public async Task CreateAndGetVCode() { string key = RandomExtensions.NextString(10); var code = await verificationCodesService.CreateVerificationCodeAsync(DateTime.UtcNow.ToUnixTime(), key); var expectedCode = await verificationCodesService.GetUserVerificationCodeAsync(key); Assert.Equal(code, expectedCode.VCode); }
public async Task <Response> CreateResponseAsync() { UserVm resultUser; VerificationCodeInfo verificationCode = await verificationCodesService .GetUserVerificationCodeAsync(request.Value, clientConnection.UserId).ConfigureAwait(false); if (isPhoneEditing) { if (await loadUsersService.IsPhoneExistsAsync(request.Value).ConfigureAwait(false)) { var errorObject = new { Phone = $"Phone number {request.Value} already exists" }; return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ObjectsLibrary.Enums.ErrorCode.WrongArgumentError)); } if (verificationCode != null && verificationCode.VCode == request.VCode && request.Value == verificationCode.Id) { resultUser = await updateUsersService.UpdateUserPhoneAsync(clientConnection.UserId.Value, request.Value).ConfigureAwait(false); } else { return(new ResultResponse(request.RequestId, "Wrong verification code.", ObjectsLibrary.Enums.ErrorCode.WrongVerificationCode)); } } else { if (await loadUsersService.IsEmailExistsAsync(request.Value).ConfigureAwait(false)) { var errorObject = new { Email = $"Email {request.Value} already exists" }; return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ObjectsLibrary.Enums.ErrorCode.WrongArgumentError)); } if (verificationCode != null && verificationCode.VCode == request.VCode && request.Value == verificationCode.Id) { resultUser = await updateUsersService.UpdateUserEmailAsync(clientConnection.UserId.Value, request.Value).ConfigureAwait(false); } else { return(new ResultResponse(request.RequestId, "Wrong verification code.", ObjectsLibrary.Enums.ErrorCode.WrongVerificationCode)); } } return(new UsersResponse(request.RequestId, resultUser)); }
public async Task <Response> CreateResponseAsync() { if (!NodeSettings.Configs.Node.UserRegistrationAllowed) { return(new ResultResponse(request.RequestId, "User registration is not allowed.", ErrorCode.PermissionDenied)); } UserVm user = request.User; try { VerificationCodeInfo verificationCode = null; if (!request.User.Phones.IsNullOrEmpty() && request.User.Emails.IsNullOrEmpty()) { if (NodeSettings.Configs.Node.RegistrationMethod == RegistrationMethod.EmailRequired) { var errorObject = new { Email = "Email required" }; return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ErrorCode.WrongArgumentError)); } if (await loadUsersService.IsPhoneExistsAsync(request.User.Phones.FirstOrDefault().FullNumber).ConfigureAwait(false)) { var errorObject = new { Phone = "Phone already exists" }; return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ErrorCode.WrongArgumentError)); } verificationCode = await verificationCodesService.GetUserVerificationCodeAsync(request.User.Phones.FirstOrDefault().FullNumber).ConfigureAwait(false); } else if (request.User.Phones.IsNullOrEmpty() && !request.User.Emails.IsNullOrEmpty()) { if (NodeSettings.Configs.Node.RegistrationMethod == RegistrationMethod.PhoneRequired) { var errorObject = new { Email = "Phone required" }; return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ErrorCode.WrongArgumentError)); } if (await loadUsersService.IsEmailExistsAsync(request.User.Emails.FirstOrDefault()).ConfigureAwait(false)) { var errorObject = new { Email = "Email already exists." }; return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ErrorCode.WrongArgumentError)); } verificationCode = await verificationCodesService.GetUserVerificationCodeAsync(request.User.Emails.FirstOrDefault()).ConfigureAwait(false); } else { if (NodeSettings.Configs.Node.RegistrationMethod != RegistrationMethod.NothingRequired) { var errorObject = new { Email = "Email only or phone only", Phone = "Email only or phone only" }; return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ErrorCode.WrongArgumentError)); } } if (verificationCode != null && verificationCode.VCode != request.VCode && (!request.User.Emails.IsNullOrEmpty() || !request.User.Phones.IsNullOrEmpty())) { var errorObject = new { VCode = "Wrong verification code" }; return(new ResultResponse(request.RequestId, ObjectSerializer.ObjectToJson(errorObject), ErrorCode.WrongVerificationCode)); } ValuePair <UserVm, string> userPasswordPair = await createUsersService.CreateNewUserAsync(user, NodeSettings.Configs.Node.Id, NodeSettings.Configs.ConfirmUsers).ConfigureAwait(false); TokenVm tempTokens = await tokensService.CreateTokenPairByUserIdAsync(userPasswordPair.FirstValue.Id.GetValueOrDefault(), false, 30 * 60).ConfigureAwait(false); clientConn.FileAccessToken = RandomExtensions.NextString(64); BlockSegmentVm segment = await BlockSegmentsService.Instance.CreateNewUserSegmentAsync( userPasswordPair.FirstValue, NodeSettings.Configs.Node.Id, NodeData.Instance.NodeKeys.SignPrivateKey, NodeData.Instance.NodeKeys.SymmetricKey, NodeData.Instance.NodeKeys.Password, NodeData.Instance.NodeKeys.KeyId).ConfigureAwait(false); BlockGenerationHelper.Instance.AddSegment(segment); ShortUser shortUser = new ShortUser { UserId = userPasswordPair.FirstValue.Id.GetValueOrDefault(), PrivateData = segment.PrivateData }; nodeNoticeService.SendNewUsersNodeNoticeAsync(shortUser, segment); return(new TokensResponse( request.RequestId, userPasswordPair.FirstValue, tempTokens.AccessToken, tempTokens.RefreshToken, clientConn.FileAccessToken, userPasswordPair.SecondValue)); } catch (CreateNewUserException ex) { Logger.WriteLog(ex, request); return(new ResultResponse(request.RequestId, ex.Message, ErrorCode.UnknownError)); } }