public async Task <SendAddSerialEmailResponse> Handle(SendAddSerialEmailRequest request, CancellationToken cancellationToken) { var user = await userService.GetUserWithSerials(httpContextReader.CurrentUserId); if (!(await userService.GetUserWithSerials(httpContextReader.CurrentUserId)).HasEmptySerialSlot()) { throw new PremiumOperationException("Account has no more serial slots"); } if (await serialService.SerialExists(request.Serial, httpContextReader.CurrentUserId)) { throw new DuplicateException("Serial already exists"); } var result = await userTokenGenerator.GenerateAddSerialToken(); var(encryptedSerial, encryptedEmail, encryptedToken) = (cryptoService.Encrypt(request.Serial), cryptoService.Encrypt(result.Email), cryptoService.Encrypt(result.Token)); string callbackUrl = $"{Configuration.GetValue<string>(AppSettingsKeys.ServerAddress)}api/account/serial/add?email={encryptedEmail}&token={encryptedToken}&serial={encryptedSerial}"; var emailTemplate = (await emailTemplateGenerator.FindEmailTemplate(EmailTemplateDictionary.RegisterTemplate)) .ReplaceParameters(new EmailTemplateParameter("{{username}}", result.Username), new EmailTemplateParameter("{{callbackUrl}}", callbackUrl)); await emailSender.Send(EmailMessages.ActivationAccountEmail(result.Email, emailTemplate)); return(new SendAddSerialEmailResponse()); }
public async Task <SignUpResponse> Handle(SignUpRequest request, CancellationToken cancellationToken) { if (!await captchaService.VerifyCaptcha(request.CaptchaResponse)) { throw new CaptchaException(); } if (await authValidationService.UsernameExists(request.Username) || await authValidationService.EmailExists(request.Email)) { throw new DuplicateException("Account already exists"); } if (await serialService.SerialExists(request.Serial)) { throw new DuplicateException("Serial already exists"); } User referrer = default; if (!string.IsNullOrEmpty(request.Referrer)) { referrer = await userService.FindUserByUsername(request.Referrer); } var response = await authService.SignUp(request.Username, request.Email, request.Password, request.Serial, referrer == null? 0 : referrer.Id); var(encryptedToken, encryptedEmail) = (cryptoService.Encrypt(response.TokenCode), cryptoService.Encrypt(response.User.Email)); //TODO:Change it on ClientAddress string callbackUrl = $"{Configuration.GetValue<string>(AppSettingsKeys.ServerAddress)}api/auth/confirm?email={encryptedEmail}&token={encryptedToken}"; var emailTemplate = (await emailTemplateGenerator.FindEmailTemplate(EmailTemplateDictionary.RegisterTemplate)) .ReplaceParameters(new EmailTemplateParameter("{{username}}", response.User.Username), new EmailTemplateParameter("{{callbackUrl}}", callbackUrl)); return(await emailSender.Send(EmailMessages.ActivationAccountEmail(response.User.Email, emailTemplate)) ? (SignUpResponse) new SignUpResponse { TokenCode = encryptedToken, User = mapper.Map <UserAuthDto>(response.User) } .LogInformation($"User {request.Username} with email {request.Email} signed up") : throw new ServiceException("Sending confirmation email failed")); }
public async Task <AddSerialResponse> Handle(AddSerialRequest request, CancellationToken cancellationToken) { var(token, email, serial) = (cryptoService.Decrypt(request.Token), cryptoService.Decrypt(request.Email), cryptoService.Decrypt(request.Serial)); if (await serialService.SerialExists(serial)) { throw new DuplicateException("Serial already exists"); } return(await accountManager.AddSerial(serial, email, token) ? (AddSerialResponse) new AddSerialResponse().LogInformation( $"User with email {email} added serial to their account") : throw new ChangeEmailException("Error occured during changing email")); }