public static void CreateIdentity(MvcIdentityModel identity)
        {
            var computed = MvcIdentityModel.New(identity);

            computed.Password  = SecurePassword.Hash(computed.Password);
            computed.Password2 = computed.Password;
            computed.Status    = "active";
            Database.Insert("identities", computed.ToDbModel());
        }
        public IActionResult Index(AuthenticationIdentity identity)
        {
            if (!ModelState.IsValid)
            {
                return(View("Authentication", identity));
            }

            MvcIdentityModel computed = Identity.GetIdentityByEmail(identity.Email);

            if (computed == default(MvcIdentityModel))
            {
                ModelState.AddModelError("General", "The entered email and/or password is incorrect!");
                return(View("Authentication", identity));
            }

            if (!computed.VerifyPassword(identity.Password))
            {
                ModelState.AddModelError("General", "The entered email and/or password is incorrect!");
                return(View("Authentication", identity));
            }

            var sid = Request.Cookies.ContainsKey("SID") ? Guid.Parse(Request.Cookies["SID"]) : Guid.Empty;

            if (sid == Guid.Empty)
            {
                ModelState.AddModelError("General", "The session ID was lost between authentication steps!");
                return(View("Authentication", identity));
            }

            var session     = SessionStore.GetSession(sid);
            var authRequest = session.GetAttribute <AuthRequestPayload>("AuthRequest");

            var authResponse = new AuthResponsePayload()
            {
                Authenticated = true,
                RequestId     = authRequest.RequestId,
                SessionId     = session.Guid,
                SessionExpiry = session.ExpiryTime,
                Identity      = computed.ToBaseModel()
            };

            session["AuthPayload"] = authResponse;

            HttpHandler.Post(authRequest.ResponseUri, authResponse.Encode()).Wait();
            return(Redirect(authRequest.RedirectUri.ToString()));
        }
        public IActionResult Index(MvcIdentityModel identity)
        {
            if (!ModelState.IsValid)
            {
                return(View("Registration", identity));
            }

            if (!UsernameAvailable(identity.Username))
            {
                ModelState.AddModelError("Username", "This username is already taken!");
                return(View("Registration", identity));
            }

            if (!EmailAvailable(identity.Email))
            {
                ModelState.AddModelError("Email", "This email is already in use!");
                return(View("Registration", identity));
            }

            var authIdentity = new AuthenticationIdentity()
            {
                Email             = identity.Email,
                NewAccount        = true,
                PendingActivation = true
            };

            identity.IpAddress = Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();

            var activationToken = RandomData.String(16);

            var pendingActivation = new PendingActivationIdentity()
            {
                ActivationToken = activationToken,
                Identity        = identity
            };

            CacheStore.Create(activationToken, DateTime.UtcNow.AddHours(1), pendingActivation);

            SendGridHandler.SendRegistrationMail(identity, activationToken).Wait();

            return(RedirectToAction("Index", "Authentication", authIdentity));
        }
Esempio n. 4
0
        public static async Task <bool> SendRegistrationMail(MvcIdentityModel identity, string activationToken)
        {
            var subject = $"Welcome to Andrei Hava Systems, {identity.FirstName}!";
            var to      = new EmailAddress(identity.Email, $"{identity.FirstName} {identity.LastName}");

            var variableValues = new Dictionary <string, string>()
            {
                { "$FirstName$", identity.FirstName },
                { "$LastName$", identity.LastName },
                { "$Username$", identity.Username },
                { "$Email$", identity.Email },
                { "$ActivationUrl$", $"https://id.andreihava.net/activate?ActivationToken={activationToken}" },
                { "$RegistrationIp$", identity.IpAddress }
            };

            var templates = EmailTemplates.GetTemplate("registration", variableValues);

            var email = MailHelper.CreateSingleEmail(_fromAddress, to, subject, templates.Value, templates.Key);

            var response = await _client.SendEmailAsync(email);

            return(response.StatusCode == HttpStatusCode.Accepted);
        }
        public static MvcIdentityModel GetIdentityByToken(string token)
        {
            var dbIdentity = Database.GetOne <DatabaseIdentityModel>("identities", $"token = '{token}'");

            return(MvcIdentityModel.New(dbIdentity));
        }
        public static MvcIdentityModel GetIdentityByUsername(string username)
        {
            var dbIdentity = Database.GetOne <DatabaseIdentityModel>("identities", $"username = '******'");

            return(MvcIdentityModel.New(dbIdentity));
        }
        public static MvcIdentityModel GetIdentityByEmail(string email)
        {
            var dbIdentity = Database.GetOne <DatabaseIdentityModel>("identities", $"email = '{email}'");

            return(MvcIdentityModel.New(dbIdentity));
        }
        public static MvcIdentityModel GetIdentityByGuid(Guid guid)
        {
            var dbIdentity = Database.GetOne <DatabaseIdentityModel>("identities", $"id = '{guid}'");

            return(MvcIdentityModel.New(dbIdentity));
        }