public void Add() { var username = _randomMaker.NewNumber(); var duplicated = _accountService.FirstAsync(new AccountGetFirstSchema { Username = username }).GetAwaiter().GetResult(); while (duplicated != null) { username = _randomMaker.NewNumber(); duplicated = _accountService.FirstAsync(new AccountGetFirstSchema { Username = username }).GetAwaiter().GetResult(); } var account = new AccountAddSchema { Password = _cryptograph.RNG("1234"), ProviderId = AccountProvider.Clipboardy.ToInt(), Username = username, CreatedAt = DateTime.Now, StatusId = Status.Active.ToInt() }; var accountId = _accountService.AddAsync(account).GetAwaiter().GetResult(); Assert.IsTrue(account.StatusCode == 200); Assert.IsTrue(accountId > 0); }
public async Task <IServiceResult> SignupAsync(SignupBindingModel signupModel) { var username = _randomMaker.NewNumber(); var duplicated = await FirstAsync(new AccountGetFirstSchema { Username = username }); while (duplicated != null) { username = _randomMaker.NewNumber(); duplicated = await FirstAsync(new AccountGetFirstSchema { Username = username }); } using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { try { var now = DateTime.UtcNow; var account = new AccountAddSchema { Password = _cryptograph.RNG(signupModel.Password), ProviderId = AccountProvider.Clipboardy.ToInt(), Username = username, CreatedAt = now, StatusId = Status.Active.ToInt() }; var accountId = await AddAsync(account); var accountDevice = new AccountDeviceAddSchema { AccountId = accountId, DeviceId = signupModel.DeviceId, DeviceName = signupModel.DeviceName, DeviceType = signupModel.DeviceType, CreatedAt = now, StatusId = Status.Active.ToInt() }; var deviceId = await _accountDeviceService.AddAsync(accountDevice); var accountProfile = new AccountProfileAddSchema { AccountId = accountId, LinkedId = string.IsNullOrWhiteSpace(signupModel.Email) ? signupModel.Phone : signupModel.Email, TypeId = string.IsNullOrWhiteSpace(signupModel.Email) ? AccountProfileType.Phone.ToInt() : AccountProfileType.Email.ToInt(), CreatedAt = now, StatusId = Status.Active.ToInt() }; await _accountProfileService.AddAsync(accountProfile); transaction.Complete(); var token = _jwtHandler.Bearer(new Account(accountId, deviceId, username, now).ToClaimsIdentity()); return(DataTransferer.Ok(token)); } catch (Exception ex) { var errmsg = "Something went wrong."; Log.Error(ex, errmsg); return(DataTransferer.InternalServerError(ex)); } } }
public async Task <ActionResult> ActivationRequestAsync() { var query = new AccountProfileGetFirstSchema { LinkedId = CurrentAccount.Username }; if (CurrentAccount.Username.IsPhoneNumber()) { query.TypeId = AccountProfileType.Phone.ToInt(); } else if (new EmailAddressAttribute().IsValid(CurrentAccount.Username)) { query.TypeId = AccountProfileType.Email.ToInt(); } else { return(BadRequest(_localizer[DataTransferer.InvalidEmailOrCellPhone().Message])); } try { var accountProfile = await _accountProfileService.FirstAsync(query).ConfigureAwait(true); if (accountProfile == null) { if (query.TypeId == AccountProfileType.Phone.ToInt()) { return(BadRequest(_localizer[DataTransferer.PhoneNotFound().Message])); } if (query.TypeId == AccountProfileType.Email.ToInt()) { return(BadRequest(_localizer[DataTransferer.EmailNotFound().Message])); } } var activationCode = _randomMaker.NewNumber(10000, 99999); _memoryCache.Set(CurrentAccount.Username, activationCode, DateTime.Now.AddMinutes(10)); if (query.TypeId == AccountProfileType.Phone.ToInt()) { await _smsService.SendAsync(new SMSModel { PhoneNo = accountProfile.LinkedId, TextBody = $"{DataTransferer.ActivationCodeSMSBody().Message} \r\n {activationCode}" }).ConfigureAwait(false); } else { await _emailService.SendAsync(new EmailModel { Address = accountProfile.LinkedId, Subject = _localizer[DataTransferer.ActivationCodeEmailSubject().Message], IsBodyHtml = true, Body = $"<p>{DataTransferer.ActivationCodeEmailBody().Message}</p>" + $"<p>{activationCode}</p>" }).ConfigureAwait(false); } return(Ok(_localizer[DataTransferer.ActivationCodeRequested().Message])); } catch (Exception ex) { Log.Error(ex, ex.Source); return(Problem()); } }