Beispiel #1
0
        public async Task SendForgotPasswordMail(string email, DaoLangTypes.Type lang)
        {
            using (var transaction = Context.Database.BeginTransaction())
            {
                try
                {
                    var daoUser = await GetUser(email);

                    var emailToken = new DaoEmailToken()
                    {
                        TokenType      = DaoEmailToken.Type.Password,
                        ExpirationDate = TimeService.UtcNow.AddDays(1),
                        Token          = random.RandomString(40),
                        User           = daoUser
                    };

                    await Context.EmailTokens.AddAsync(emailToken);

                    if (await Context.SaveChangesAsync() != 1)
                    {
                        throw new DatabaseException("token_not_saved");
                    }

                    var model = new ConfirmationViewModel()
                    {
                        Title           = Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_SUBJECT),
                        PreHeader       = Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_PREHEADER),
                        Hero            = Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_HERO),
                        Greeting        = Localizer.GetString(lang, LocalizationResource.EMAIL_CASUAL_BODY_GREETING, daoUser.DisplayName),
                        Intro           = Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_BODY_INTRO),
                        EmailDisclaimer = Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_BODY_DISCLAIMER),
                        Cheers          = Localizer.GetString(lang, LocalizationResource.EMAIL_CASUAL_BODY_CHEERS),
                        BadButton       = Localizer.GetString(lang, LocalizationResource.EMAIL_FOOTER_BADBUTTON),
                        MShareTeam      = Localizer.GetString(lang, LocalizationResource.MSHARE_TEAM),
                        SiteBaseUrl     = $"{UriConf.URIForEndUsers}",
                        Button          = new EmailButtonViewModel()
                        {
                            Url  = $"{UriConf.URIForEndUsers}/api/androidlanding/forgotpassword/{emailToken.Token}",
                            Text = Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_BODY_BUTTON)
                        }
                    };
                    var htmlBody = await Renderer.RenderViewToStringAsync($"/Views/Emails/Confirmation/ConfirmationHtml.cshtml", model);

                    await EmailService.SendMailAsync(MimeKit.Text.TextFormat.Html, daoUser.DisplayName, email, Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_SUBJECT), htmlBody);

                    transaction.Commit();
                } catch
                {
                    transaction.Rollback();
                    // Eat all exceptions, User cannot know if this was successfull only for debug
#if DEBUG
                    throw;
#endif
                }
            }
        }
Beispiel #2
0
        public async Task SendForgotPasswordMail(API.Request.ValidEmail email)
        {
            var user = await _context.Users.
                       Include(x => x.EmailTokens).
                       FirstOrDefaultAsync(x =>
                                           x.Email == email.Email &&
                                           !x.EmailTokens.Any(y => y.TokenType == DaoEmailToken.Type.Validation));

            if (user != null)
            {
                using (var transaction = _context.Database.BeginTransaction()){
                    try{
                        var emailToken = new DaoEmailToken()
                        {
                            TokenType      = DaoEmailToken.Type.Password,
                            ExpirationDate = _timeService.UtcNow.AddDays(1),
                            Token          = _random.RandomString(40),
                            User           = user
                        };

                        await _context.EmailTokens.AddAsync(emailToken);

                        if (await _context.SaveChangesAsync() != 1)
                        {
                            throw new Exceptions.DatabaseException("token_not_saved");
                        }

                        await _emailService.SendMailAsync(MimeKit.Text.TextFormat.Text, user.DisplayName, email.Email, "Elfelejtett jelszó", $"Jelszó megváltoztatásához kattintson ide: {_uriConf.URIForEndUsers}/reset?token={emailToken.Token}");

                        transaction.Commit();
                    }
                    catch {
                        transaction.Rollback();
                        // Eat all exceptions, User cannot know if this was successfull only for debug
#if DEBUG
                        throw;
#endif
                    }
                }
            }
            else
            {
                // Don't handle, user can't know failure
#if DEBUG
                throw new Exceptions.ResourceNotFoundException("user");
#endif
            }
        }
Beispiel #3
0
        public async Task <bool> Register(NewUser newUser)
        {
            var existingUser = await _context.Users.FirstOrDefaultAsync(x => x.Email == newUser.Email);

            if (existingUser != null)
            {
                throw new Exceptions.BusinessException("email_taken");
            }

            using (var transaction = _context.Database.BeginTransaction()) {
                try {
                    var emailToken = new DaoEmailToken()
                    {
                        TokenType      = DaoEmailToken.Type.Validation,
                        ExpirationDate = _timeService.UtcNow.AddDays(1),
                        Token          = _random.RandomString(40)
                    };

                    var userToBeInserted = new DaoUser()
                    {
                        DisplayName = newUser.DisplayName,
                        Email       = newUser.Email,
                        Password    = Hasher.GetHash(newUser.Password),
                        EmailTokens = new DaoEmailToken[] {
                            emailToken
                        }
                    };

                    await _context.Users.AddAsync(userToBeInserted);

                    if (await _context.SaveChangesAsync() != 2)
                    {
                        throw new Exceptions.DatabaseException("registration_not_saved");
                    }

                    await _emailService.SendMailAsync(MimeKit.Text.TextFormat.Text, newUser.DisplayName, newUser.Email, "MShare Regisztráció", $"Sikeres regisztráció, az email cím megerősítéséhez kérem kattintson ide: {_uriConf.URIForEndUsers}/account/confirm/{emailToken.Token}");

                    transaction.Commit();
                    return(true);
                } catch {
                    transaction.Rollback();
                    throw;
                }
            }
        }
Beispiel #4
0
        public async Task Register(NewUser newUser)
        {
            var existingUser = await Context.Users
                .FirstOrDefaultAsync(x => x.Email == newUser.Email);

            if (existingUser != null)
                throw new BusinessException("email_taken");

            using (var transaction = Context.Database.BeginTransaction())
            {
                try
                {
                    var emailToken = new DaoEmailToken()
                    {
                        TokenType = DaoEmailToken.Type.Validation,
                        ExpirationDate = TimeService.UtcNow.AddDays(1),
                        Token = random.RandomString(40)
                    };

                    var userToBeInserted = new DaoUser()
                    {
                        DisplayName = newUser.DisplayName,
                        Email = newUser.Email,
                        Password = Hasher.GetHash(newUser.Password),
                        EmailTokens = new DaoEmailToken[] {
                            emailToken
                        },
                        Lang = newUser.Lang
                    };

                    await Context.Users.AddAsync(userToBeInserted);

                    if (await Context.SaveChangesAsync() != 2)
                        throw new DatabaseException("registration_not_saved");

                    var model = new ConfirmationViewModel()
                    {
                        Title = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_SUBJECT),
                        PreHeader = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_PREHEADER),
                        Hero = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_HERO),
                        Greeting = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_CASUAL_BODY_GREETING, newUser.DisplayName),
                        Intro = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_BODY_INTRO),
                        EmailDisclaimer = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_BODY_DISCLAIMER),
                        Cheers = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_CASUAL_BODY_CHEERS),
                        BadButton = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_FOOTER_BADBUTTON),
                        MShareTeam = Localizer.GetString(newUser.Lang, LocalizationResource.MSHARE_TEAM),
                        SiteBaseUrl = $"{UriConf.URIForEndUsers}",
                        Button = new EmailButtonViewModel()
                        {
                            Url = $"{UriConf.URIForEndUsers}/api/androidlanding/confirmregistration/{emailToken.Token}",
                            Text = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_BODY_BUTTON)
                        }
                    };
                    var htmlBody = await Renderer.RenderViewToStringAsync($"/Views/Emails/Confirmation/ConfirmationHtml.cshtml", model);
                    await EmailService.SendMailAsync(MimeKit.Text.TextFormat.Html, newUser.DisplayName, newUser.Email, Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_SUBJECT), htmlBody);

                    transaction.Commit();
                }
                catch
                {
                    transaction.Rollback();
                    throw;
                }
            }
        }