/// <summary>
        /// Begin password reset
        /// </summary>
        /// <param name="email"></param>
        /// <param name="ipaddress"></param>
        /// <param name="resetBaseUrl"></param>
        /// <returns></returns>
        public async Task BeginResetAsync(String email, String ipaddress, String returnUrl)
        {
            if (String.IsNullOrEmpty(returnUrl))
            {
                _log.Warn($"No return url specified in reset by {email}");
                return;
            }
            if (!_resetReturnDomains.Any(o => returnUrl.StartsWith(o)))
            {
                _log.Warn($"Invalid returnUrl {returnUrl} in password reset request. Email: {email}, Ip: {ipaddress}");
                return;
            }

            try
            {
                var admin = await _context.Admins.SingleOrDefaultAsync(o => o.Email == email && o.Status == 1);

                if (admin != null)
                {
                    var reset = new AdminReset
                    {
                        Validto          = DateTime.UtcNow.AddDays(2),
                        Id               = CryptoMethods.GetRandomString(64),
                        IpaddressRequest = ipaddress
                    };
                    admin.AdminReset.Add(reset);
                    await _context.SaveChangesAsync();

                    // todo move this to servicebus...
                    using (var message = new System.Net.Mail.MailMessage("*****@*****.**", email))
                    {
                        message.Subject = "Flexinets Portal - Password reset";
                        message.Bcc.Add("*****@*****.**");
                        message.Body = "To reset your password please follow this link" + Environment.NewLine +
                                       Environment.NewLine
                                       + returnUrl + reset.Id + Environment.NewLine +
                                       Environment.NewLine
                                       + "If you did not start the reset process, you can ignore this message.";

                        await _smtpClient.SendAsync(message);

                        _log.Info($"Password reset started for email {email}");
                    }
                }
                else
                {
                    _log.Warn($"Failed password reset for {email}");
                }
            }
            catch (Exception ex)
            {
                _log.Error($"Failed password reset for {email}", ex);
            }
        }