Skip to content

Commit edb5412

Browse files
committed
Fix tests
1 parent d04f795 commit edb5412

File tree

6 files changed

+81
-46
lines changed

6 files changed

+81
-46
lines changed

server/db/models/otp.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ type OTP struct {
1212
Key string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty" dynamo:"key,omitempty"` // for arangodb
1313
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id" dynamo:"id,hash"`
1414
Email string `gorm:"unique" json:"email" bson:"email" cql:"email" dynamo:"email" index:"email,hash"`
15-
PhoneNumber string `gorm:"unique" json:"phone_number" bson:"phone_number" cql:"phone_number" dynamo:"phone_number" index:"phone_number,hash"`
15+
PhoneNumber string `gorm:"index:unique_index_phone_number,unique" json:"phone_number" bson:"phone_number" cql:"phone_number" dynamo:"phone_number" index:"phone_number,hash"`
1616
Otp string `json:"otp" bson:"otp" cql:"otp" dynamo:"otp"`
1717
ExpiresAt int64 `json:"expires_at" bson:"expires_at" cql:"expires_at" dynamo:"expires_at"`
1818
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at" dynamo:"created_at"`

server/resolvers/mobile_login.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/authorizerdev/authorizer/server/graph/model"
1818
"github.com/authorizerdev/authorizer/server/memorystore"
1919
"github.com/authorizerdev/authorizer/server/refs"
20+
"github.com/authorizerdev/authorizer/server/smsproviders"
2021
"github.com/authorizerdev/authorizer/server/token"
2122
"github.com/authorizerdev/authorizer/server/utils"
2223
"github.com/authorizerdev/authorizer/server/validators"
@@ -94,6 +95,45 @@ func MobileLoginResolver(ctx context.Context, params model.MobileLoginInput) (*m
9495
roles = params.Roles
9596
}
9697

98+
disablePhoneVerification, _ := memorystore.Provider.GetBoolStoreEnvVariable(constants.EnvKeyDisablePhoneVerification)
99+
if disablePhoneVerification {
100+
now := time.Now().Unix()
101+
user.PhoneNumberVerifiedAt = &now
102+
}
103+
fmt.Println("=> disablePhoneVerification", disablePhoneVerification)
104+
105+
if !disablePhoneVerification {
106+
duration, _ := time.ParseDuration("10m")
107+
smsCode := utils.GenerateOTP()
108+
109+
smsBody := strings.Builder{}
110+
smsBody.WriteString("Your verification code is: ")
111+
smsBody.WriteString(smsCode)
112+
113+
// TODO: For those who enabled the webhook to call their sms vendor separately - sending the otp to their api
114+
if err != nil {
115+
log.Debug("error while upserting user: ", err.Error())
116+
return nil, err
117+
}
118+
_, err := db.Provider.UpsertOTP(ctx, &models.OTP{
119+
PhoneNumber: params.PhoneNumber,
120+
Otp: smsCode,
121+
ExpiresAt: time.Now().Add(duration).Unix(),
122+
})
123+
if err != nil {
124+
log.Debug("error while upserting OTP: ", err.Error())
125+
return nil, err
126+
}
127+
go func() {
128+
129+
smsproviders.SendSMS(params.PhoneNumber, smsBody.String())
130+
}()
131+
return &model.AuthResponse{
132+
Message: "Please check the OTP",
133+
ShouldShowOtpScreen: refs.NewBoolRef(true),
134+
}, nil
135+
}
136+
97137
scope := []string{"openid", "email", "profile"}
98138
if params.Scope != nil && len(scope) > 0 {
99139
scope = params.Scope

server/resolvers/mobile_signup.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ func MobileSignupResolver(ctx context.Context, params *model.MobileSignUpInput)
105105
}
106106

107107
inputRoles := []string{}
108-
109108
if len(params.Roles) > 0 {
110109
// check if roles exists
111110
rolesString, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyRoles)
@@ -197,7 +196,7 @@ func MobileSignupResolver(ctx context.Context, params *model.MobileSignUpInput)
197196
log.Debug("Failed to add user: ", err)
198197
return res, err
199198
}
200-
199+
fmt.Println("=> disablePhoneVerification signup", disablePhoneVerification)
201200
if !disablePhoneVerification {
202201
duration, _ := time.ParseDuration("10m")
203202
smsCode := utils.GenerateOTP()
@@ -211,15 +210,22 @@ func MobileSignupResolver(ctx context.Context, params *model.MobileSignUpInput)
211210
log.Debug("error while upserting user: ", err.Error())
212211
return nil, err
213212
}
214-
213+
_, err = db.Provider.UpsertOTP(ctx, &models.OTP{
214+
PhoneNumber: mobile,
215+
Otp: smsCode,
216+
ExpiresAt: time.Now().Add(duration).Unix(),
217+
})
218+
if err != nil {
219+
log.Debug("error while upserting OTP: ", err.Error())
220+
return nil, err
221+
}
215222
go func() {
216-
db.Provider.UpsertOTP(ctx, &models.OTP{
217-
PhoneNumber: mobile,
218-
Otp: smsCode,
219-
ExpiresAt: time.Now().Add(duration).Unix(),
220-
})
221223
smsproviders.SendSMS(mobile, smsBody.String())
222224
}()
225+
return &model.AuthResponse{
226+
Message: "Please check the OTP in your inbox",
227+
ShouldShowOtpScreen: refs.NewBoolRef(true),
228+
}, nil
223229
}
224230

225231
roles := strings.Split(user.Roles, ",")

server/smsproviders/twilio.go

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,37 @@
11
package smsproviders
22

33
import (
4-
twilio "github.com/twilio/twilio-go"
5-
api "github.com/twilio/twilio-go/rest/api/v2010"
64
"github.com/authorizerdev/authorizer/server/constants"
75
"github.com/authorizerdev/authorizer/server/memorystore"
86
log "github.com/sirupsen/logrus"
7+
twilio "github.com/twilio/twilio-go"
8+
api "github.com/twilio/twilio-go/rest/api/v2010"
99
)
1010

1111
// TODO: Should be restructured to interface when another provider is added
1212
func SendSMS(sendTo, messageBody string) error {
13-
1413
twilioAPISecret, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyTwilioAPISecret)
15-
if err != nil || twilioAPISecret == ""{
16-
log.Errorf("Failed to get api secret: ", err)
14+
if err != nil || twilioAPISecret == "" {
15+
log.Debug("Failed to get api secret: ", err)
1716
return err
1817
}
19-
2018
twilioAPIKey, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyTwilioAPIKey)
21-
if err != nil || twilioAPIKey == ""{
22-
log.Errorf("Failed to get api key: ", err)
19+
if err != nil || twilioAPIKey == "" {
20+
log.Debug("Failed to get api key: ", err)
2321
return err
2422
}
25-
2623
twilioSenderFrom, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyTwilioSenderFrom)
2724
if err != nil || twilioSenderFrom == "" {
28-
log.Errorf("Failed to get sender: ", err)
25+
log.Debug("Failed to get sender: ", err)
2926
return err
3027
}
31-
3228
// accountSID is not a must to send sms on twilio
3329
twilioAccountSID, _ := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyTwilioAccountSID)
34-
3530
client := twilio.NewRestClientWithParams(twilio.ClientParams{
3631
Username: twilioAPIKey,
3732
Password: twilioAPISecret,
3833
AccountSid: twilioAccountSID,
3934
})
40-
4135
message := &api.CreateMessageParams{}
4236
message.SetBody(messageBody)
4337
message.SetFrom(twilioSenderFrom)

server/test/mobile_login_test.go

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package test
22

33
import (
4-
"strings"
54
"testing"
65

7-
"github.com/authorizerdev/authorizer/server/constants"
86
"github.com/authorizerdev/authorizer/server/db"
97
"github.com/authorizerdev/authorizer/server/graph/model"
108
"github.com/authorizerdev/authorizer/server/refs"
@@ -26,11 +24,6 @@ func mobileLoginTests(t *testing.T, s TestSetup) {
2624
})
2725
assert.NoError(t, err)
2826
assert.NotNil(t, signUpRes)
29-
assert.Equal(t, email, signUpRes.User.Email)
30-
assert.Equal(t, phoneNumber, refs.StringValue(signUpRes.User.PhoneNumber))
31-
assert.True(t, strings.Contains(signUpRes.User.SignupMethods, constants.AuthRecipeMethodMobileBasicAuth))
32-
assert.Len(t, strings.Split(signUpRes.User.SignupMethods, ","), 1)
33-
3427
res, err := resolvers.MobileLoginResolver(ctx, model.MobileLoginInput{
3528
PhoneNumber: phoneNumber,
3629
Password: "random_test",
@@ -45,34 +38,24 @@ func mobileLoginTests(t *testing.T, s TestSetup) {
4538
})
4639
assert.Error(t, err)
4740
assert.Nil(t, res)
48-
4941
// should fail because phone is not verified
5042
res, err = resolvers.MobileLoginResolver(ctx, model.MobileLoginInput{
5143
PhoneNumber: phoneNumber,
5244
Password: s.TestInfo.Password,
5345
})
5446
assert.NotNil(t, err, "should fail because phone is not verified")
5547
assert.Nil(t, res)
56-
5748
smsRequest, err := db.Provider.GetOTPByPhoneNumber(ctx, phoneNumber)
5849
assert.NoError(t, err)
5950
assert.NotEmpty(t, smsRequest.Otp)
60-
6151
verifySMSRequest, err := resolvers.VerifyOtpResolver(ctx, model.VerifyOTPRequest{
6252
PhoneNumber: &phoneNumber,
6353
Otp: smsRequest.Otp,
6454
})
6555
assert.Nil(t, err)
6656
assert.NotEqual(t, verifySMSRequest.Message, "", "message should not be empty")
67-
68-
res, err = resolvers.MobileLoginResolver(ctx, model.MobileLoginInput{
69-
PhoneNumber: phoneNumber,
70-
Password: s.TestInfo.Password,
71-
})
72-
assert.NoError(t, err)
73-
assert.NotEmpty(t, res.AccessToken)
74-
assert.NotEmpty(t, res.IDToken)
75-
57+
assert.NotEmpty(t, verifySMSRequest.AccessToken)
58+
assert.NotEmpty(t, verifySMSRequest.IDToken)
7659
cleanData(email)
7760
})
7861
}

server/test/mobile_signup_test.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package test
22

33
import (
4+
"fmt"
45
"testing"
56

67
"github.com/authorizerdev/authorizer/server/constants"
8+
"github.com/authorizerdev/authorizer/server/db"
79
"github.com/authorizerdev/authorizer/server/graph/model"
810
"github.com/authorizerdev/authorizer/server/memorystore"
911
"github.com/authorizerdev/authorizer/server/refs"
@@ -65,16 +67,26 @@ func mobileSingupTest(t *testing.T, s TestSetup) {
6567
})
6668
assert.Error(t, err)
6769
assert.Nil(t, res)
68-
70+
phoneNumber := "1234567890"
6971
res, err = resolvers.MobileSignupResolver(ctx, &model.MobileSignUpInput{
70-
PhoneNumber: "1234567890",
72+
PhoneNumber: phoneNumber,
7173
Password: s.TestInfo.Password,
7274
ConfirmPassword: s.TestInfo.Password,
7375
})
7476
assert.NoError(t, err)
75-
assert.NotEmpty(t, res.AccessToken)
76-
assert.Equal(t, "[email protected]", res.User.Email)
77-
77+
assert.NotNil(t, res)
78+
assert.True(t, *res.ShouldShowOtpScreen)
79+
// Verify with otp
80+
otp, err := db.Provider.GetOTPByPhoneNumber(ctx, phoneNumber)
81+
fmt.Println("=> otp", otp, err)
82+
assert.Nil(t, err)
83+
assert.NotEmpty(t, otp.Otp)
84+
otpRes, err := resolvers.VerifyOtpResolver(ctx, model.VerifyOTPRequest{
85+
PhoneNumber: &phoneNumber,
86+
Otp: otp.Otp,
87+
})
88+
assert.Nil(t, err)
89+
assert.NotEmpty(t, otpRes.Message)
7890
res, err = resolvers.MobileSignupResolver(ctx, &model.MobileSignUpInput{
7991
PhoneNumber: "1234567890",
8092
Password: s.TestInfo.Password,

0 commit comments

Comments
 (0)