public async Task <KeyValuePair <int, string> > PostApplicationUser(IdentityUserDTO dto)
        {
            dto.UserName = dto.Email;
            var isUserExixts = await UserExist(dto);

            if (isUserExixts)
            {
                return(new KeyValuePair <int, string>(-3, "User already exists for " + dto.UserName + " email."));
            }

            var user = new ApplicationUser()
            {
                UserName  = dto.Email,
                Email     = dto.Email,
                FirstName = dto.FirstName,
                LastName  = dto.LastName
            };

            var result = await _userManager.CreateAsync(user, dto.Password);

            if (!result.Succeeded)
            {
                return(new KeyValuePair <int, string>(-2, result.Errors.FirstOrDefault()?.Description.ToLower()));
            }
            var roleRes = await _userManager.AddToRoleAsync(user, Role.WebUser.ToString());

            if (!roleRes.Succeeded)
            {
                var resDeleteUser = await _userManager.DeleteAsync(user);

                if (!resDeleteUser.Succeeded)
                {
                    return(new KeyValuePair <int, string>(-7, "User successfully created but failed to set role, tried to remove user but error occured."));
                }

                return(new KeyValuePair <int, string>(-8, "User successfully created but failed to set role, removed user."));
            }
            var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

            var fullname    = dto.LastName + " " + dto.FirstName;
            var mailContent = await EmailBodyCreator.CreateConfirmEmailBody(Utilities.GetCurrHost(_httpContext), fullname, dto.UserName, code);

            try
            {
                await _emailService.SendMailAsync(new List <MailAddress>() { new MailAddress(user.Email) }, null, null, AppCommon.AppName + " - Verify Email", mailContent, null);

                return(new KeyValuePair <int, string>(1, "User successfully created, email sent."));
            }
            catch (Exception ex)
            {
                var resDeleteUser = await _userManager.DeleteAsync(user);

                if (!resDeleteUser.Succeeded)
                {
                    return(new KeyValuePair <int, string>(-6, "User successfully created but failed to sent email, tried to remove user but error occured."));
                }
                return(new KeyValuePair <int, string>(-4, "User successfully created but failed to sent email, deleted user."));
            }
        }
        public async Task <IActionResult> SendEmailAsync(string name, string email)
        {
            var mailContent = await EmailBodyCreator.CreateConfirmEmailBody(Utilities.GetCurrHost(_httpContext), name, null, null);

            await _emailService.SendMailAsync(new List <MailAddress>() { new MailAddress(email, name) }, null, null, AppCommon.AppName + " - Test mail", mailContent, null);

            return(OKResult(1, "mail sent to " + email));
        }
        public async Task <bool> ForgotPasswordAsync(string email)
        {
            var user = await _userManager.FindByEmailAsync(email);

            if (user == null)
            {
                return(false);
            }

            var resetCode = await _userManager.GeneratePasswordResetTokenAsync(user);

            var fullname    = user.FirstName + " " + user.LastName;
            var mailContent = await EmailBodyCreator.CreateResetPasswordEmailBody(Utilities.GetCurrHost(_httpContext), fullname, user.Email, resetCode);

            var fullName = user.FirstName + " " + user.LastName;
            await _emailService.SendMailAsync(new List <MailAddress>() { new MailAddress(user.Email, fullName) }, null, null, AppCommon.AppName + " - Reset Password", mailContent, null);

            return(true);
        }
示例#4
0
        public async Task <bool> ConfirmEmailAsync(string email, string code)
        {
            var user = await _userManager.FindByEmailAsync(email);

            code = WebUtility.UrlDecode(code);
            code = code.Replace(' ', '+');

            var result = await _userManager.ConfirmEmailAsync(user, code);

            if (result.Succeeded)
            {
                var resetCode = await _userManager.GeneratePasswordResetTokenAsync(user);

                var fullname    = user.FirstName + " " + user.LastName;
                var mailContent = await EmailBodyCreator.CreateSetPasswordEmailBody(Utilities.GetCurrHost(_httpContext), fullname, user.Email, resetCode);

                var fullName = user.FirstName + " " + user.LastName;
                await _emailService.SendMailAsync(new List <MailAddress>() { new MailAddress(user.Email, fullName) }, null, null, AppCommon.AppName + " - Set Username & Password", mailContent, null);

                return(true);
            }
            return(false);
        }
示例#5
0
        private static async Task SendExceptionEmailAsync(HttpContext context, IExceptionHandlerFeature contextFeature, IConfiguration config)
        {
            var emailSettings = new EmailSettings();

            config.GetSection("EmailSettings").Bind(emailSettings);
            var appSettings = new AppSettings();

            config.GetSection("AppSettings").Bind(appSettings);

            var model = new ErrorDetail()
            {
                ConnectionId  = context.Connection.Id,
                RequestUrl    = context.Request.Path,
                Userid        = context.User?.GetUserId(),
                UserEmail     = context.User?.GetEmail(),
                RemoteIp      = context.Connection?.RemoteIpAddress?.ToString(),
                Ex            = contextFeature.Error,
                DateTime      = DateTime.UtcNow,
                RequestMethod = context.Request.Method,
                Request       = context.Request,
                TimezoneName  = appSettings.TimezoneName
            };

            var timeZoneName = appSettings.TimezoneName;
            var utcOffset    = appSettings.UTCOffset.Replace("UTC", "").Replace("utc", "").Trim();
            var isAdd        = utcOffset.StartsWith("+");
            var hm           = utcOffset.Replace("+", "");
            var ts           = TimeSpan.Parse(hm);

            if (isAdd)
            {
                model.DateTime = model.DateTime.Add(ts);
            }
            else
            {
                model.DateTime = model.DateTime.Subtract(ts);
            }

            var contentType = context.Request.ContentType;

            if (model.RequestMethod == "GET" && context.Request.QueryString.HasValue)
            {
                var content = context.Request.QueryString.Value;
                if (content.Length > 3000)
                {
                    content = content.Substring(3000) + ".....";
                }
                model.Payload = content;
            }
            else
            {
                if (string.IsNullOrEmpty(contentType) || contentType == "text/plain" || contentType == "application/json")
                {
                    var reader = new StreamReader(context.Request.Body);
                    context.Request.Body.Position = 0;
                    var content = reader.ReadToEnd();
                    reader.Close();
                    if (content.Length > 3000)
                    {
                        content = content.Substring(3000) + ".....";
                    }
                    model.Payload = content;
                }
                else if (contentType == "application/octet-stream")
                {
                    model.Payload = "File is posted with request.";
                }
                else
                {
                    model.Payload = "Data other than 'text/plain', 'application/json' and 'application/octet-stream' posted.";
                }
            }

            var emailService = new EmailService(emailSettings);
            var body         = await EmailBodyCreator.CreateExceptionEmailBody(model);

            await emailService.SendMailAsync(
                new List <MailAddress>()
            {
                new MailAddress(appSettings.ExceptionEmailSendTo, appSettings.ExceptionEmailSendToName)
            }, null, null, AppCommon.AppName + " - Exception", body, null);
        }
示例#6
0
        public async Task <KeyValuePair <int, string> > RegisterAsync(RegisterViewModel model)
        {
            var isUserExixts = await IsUserExists(model.Email);

            if (isUserExixts)
            {
                return(new KeyValuePair <int, string>(-3, "User already exists for " + model.Email + " email."));
            }

            var user = new ApplicationUser
            {
                UserName       = model.Email,
                Email          = model.Email,
                EmailConfirmed = false,
                FirstName      = model.FirstName,
                LastName       = model.LastName
            };

            var resultCreateUser = await _userManager.CreateAsync(user, _appSetting.DefaultPassword);

            if (!resultCreateUser.Succeeded)
            {
                _logger.LogInformation("A new user account " + model.Email + " created with default password " + _appSetting.DefaultPassword);
                return(new KeyValuePair <int, string>(-2, resultCreateUser.Errors.FirstOrDefault()?.Description.ToLower()));
            }

            var roleRes = await _userManager.AddToRoleAsync(user, Role.WebUser.ToString());

            if (!roleRes.Succeeded)
            {
                _logger.LogError("Couldn't add user to role. " + roleRes.Errors.ToJsonString());
                _logger.LogWarning("Deleting user : "******"Couldn't delete user " + user.Email + ", Error(s) : " + roleRes.Errors.ToJsonString());
                    return(new KeyValuePair <int, string>(-7, "User successfully created but failed to set role, tried to remove user but error occured."));
                }

                return(new KeyValuePair <int, string>(-8, "User successfully created but failed to set role, removed user."));
            }
            var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

            var fullname    = user.FirstName + " " + user.LastName;
            var mailContent = await EmailBodyCreator.CreateConfirmEmailBody(Utilities.GetCurrHost(_httpContext), fullname, user.Email, code);

            var fullName = user.FirstName + " " + user.LastName;

            try
            {
                await _emailService.SendMailAsync(new List <MailAddress>() { new MailAddress(user.Email, fullName) }, null, null, AppCommon.AppName + " - Verify Email", mailContent, null);

                return(new KeyValuePair <int, string>(1, "User successfully created, email sent."));
            }
            catch (Exception ex)
            {
                _logger.LogError("Couldn't sent mail. Error : " + ex.ToString());

                _logger.LogWarning("Removing user " + user.Email + " from role " + Role.WebUser.ToString());
                var resRemoveFromRole = await _userManager.RemoveFromRoleAsync(user, Role.WebUser.ToString());

                if (!resRemoveFromRole.Succeeded)
                {
                    _logger.LogError("Couldn't remove user " + user.Email + " from role " + Role.WebUser.ToString() + ", Error(s) : " + resRemoveFromRole.Errors.ToJsonString());
                    return(new KeyValuePair <int, string>(-6, "User successfully created but failed to sent email, tried to remove user but error occured."));
                }

                _logger.LogWarning("Deleting user : "******"Couldn't delete user " + user.Email + ", Error(s) : " + resRemoveFromRole.Errors.ToJsonString());
                    return(new KeyValuePair <int, string>(-6, "User successfully created but failed to sent email, tried to remove user but error occured."));
                }

                return(new KeyValuePair <int, string>(-4, "User successfully created but failed to sent email, deleted user."));
            }
        }