feat: support time_zone for user registration context
This commit is contained in:
@@ -72,21 +72,21 @@ func TestUserServiceRESTCompatibilityPublicConfirmUsesEnsureOutcomes(t *testing.
|
||||
createdChallengeID := harness.sendChallengeID(t, "created@example.com")
|
||||
blockedChallengeID := harness.sendChallengeID(t, "blocked@example.com")
|
||||
|
||||
existing := gatewayCompatibilityPostJSONValue(t, harness.publicBaseURL+"/api/v1/public/auth/confirm-email-code", map[string]string{
|
||||
"challenge_id": existingChallengeID,
|
||||
"code": userServiceRESTCompatibilityCode,
|
||||
"client_public_key": gatewayCompatibilityClientPublicKey,
|
||||
})
|
||||
created := gatewayCompatibilityPostJSONValue(t, harness.publicBaseURL+"/api/v1/public/auth/confirm-email-code", map[string]string{
|
||||
"challenge_id": createdChallengeID,
|
||||
"code": userServiceRESTCompatibilityCode,
|
||||
"client_public_key": gatewayCompatibilityClientPublicKey,
|
||||
})
|
||||
blocked := gatewayCompatibilityPostJSONValue(t, harness.publicBaseURL+"/api/v1/public/auth/confirm-email-code", map[string]string{
|
||||
"challenge_id": blockedChallengeID,
|
||||
"code": userServiceRESTCompatibilityCode,
|
||||
"client_public_key": gatewayCompatibilityClientPublicKey,
|
||||
})
|
||||
existing := gatewayCompatibilityPostJSONValue(
|
||||
t,
|
||||
harness.publicBaseURL+"/api/v1/public/auth/confirm-email-code",
|
||||
gatewayCompatibilityConfirmRequest(existingChallengeID, userServiceRESTCompatibilityCode, gatewayCompatibilityClientPublicKey),
|
||||
)
|
||||
created := gatewayCompatibilityPostJSONValue(
|
||||
t,
|
||||
harness.publicBaseURL+"/api/v1/public/auth/confirm-email-code",
|
||||
gatewayCompatibilityConfirmRequest(createdChallengeID, userServiceRESTCompatibilityCode, gatewayCompatibilityClientPublicKey),
|
||||
)
|
||||
blocked := gatewayCompatibilityPostJSONValue(
|
||||
t,
|
||||
harness.publicBaseURL+"/api/v1/public/auth/confirm-email-code",
|
||||
gatewayCompatibilityConfirmRequest(blockedChallengeID, userServiceRESTCompatibilityCode, gatewayCompatibilityClientPublicKey),
|
||||
)
|
||||
|
||||
assert.Equal(t, http.StatusOK, existing.StatusCode)
|
||||
assert.JSONEq(t, `{"device_session_id":"device-session-1"}`, existing.Body)
|
||||
@@ -326,13 +326,39 @@ func newUserServiceStubHandler(directory *userservice.StubDirectory) http.Handle
|
||||
writeUserServiceStubJSON(writer, http.StatusOK, map[string]bool{"exists": exists})
|
||||
case request.Method == http.MethodPost && request.URL.Path == "/api/v1/internal/users/ensure-by-email":
|
||||
var input struct {
|
||||
Email string `json:"email"`
|
||||
Email string `json:"email"`
|
||||
RegistrationContext *struct {
|
||||
PreferredLanguage string `json:"preferred_language"`
|
||||
TimeZone string `json:"time_zone"`
|
||||
} `json:"registration_context"`
|
||||
}
|
||||
if !decodeUserServiceStubRequest(writer, request, &input) {
|
||||
return
|
||||
}
|
||||
|
||||
result, err := directory.EnsureUserByEmail(request.Context(), common.Email(input.Email))
|
||||
ensureInput := ports.EnsureUserInput{
|
||||
Email: common.Email(input.Email),
|
||||
}
|
||||
if input.RegistrationContext != nil {
|
||||
ensureInput.RegistrationContext = &ports.RegistrationContext{
|
||||
PreferredLanguage: input.RegistrationContext.PreferredLanguage,
|
||||
TimeZone: input.RegistrationContext.TimeZone,
|
||||
}
|
||||
}
|
||||
if ensureInput.RegistrationContext == nil {
|
||||
writeUserServiceStubError(writer, http.StatusBadRequest, errors.New("registration_context must be present"))
|
||||
return
|
||||
}
|
||||
if ensureInput.RegistrationContext.PreferredLanguage != "en" {
|
||||
writeUserServiceStubError(writer, http.StatusBadRequest, errors.New("registration_context.preferred_language must equal en during rollout"))
|
||||
return
|
||||
}
|
||||
if ensureInput.RegistrationContext.TimeZone != gatewayCompatibilityTimeZone {
|
||||
writeUserServiceStubError(writer, http.StatusBadRequest, errors.New("registration_context.time_zone must match public confirm time_zone"))
|
||||
return
|
||||
}
|
||||
|
||||
result, err := directory.EnsureUserByEmail(request.Context(), ensureInput)
|
||||
if err != nil {
|
||||
writeUserServiceStubError(writer, http.StatusInternalServerError, err)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user