Ejemplo n.º 1
0
        /// <summary>
        /// Generates a JWT Token tailored to the proved user
        /// </summary>
        /// <returns>JWT Token Response</returns>
        public TokenResponse CreateToken(data.Entities.User user)
        {
            var now = DateTime.UtcNow;

            var claims = new Claim[]
            {
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim(JwtRegisteredClaimNames.Iat, now.ToString(), ClaimValueTypes.Integer64),
                new Claim("UserId", user.UserId.ToString()),
                new Claim("Permissions", Permissions.GetString(user.Permissions))
            };

            var signingCredentials = GetSigningCredentials();

            var jwt = new JwtSecurityToken(
                issuer: _settings.Issuer,
                audience: _settings.Audience,
                claims: claims,
                notBefore: now,
                expires: now.Add(_settings.Expiration),
                signingCredentials: signingCredentials);

            var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

            var response = new TokenResponse
            {
                AccessToken = encodedJwt,
                ExpiresIn   = DateTime.Now.AddSeconds((int)_settings.Expiration.TotalSeconds),
                User        = UserResponse.MapFromObject(user)
            };

            return(response);
        }
Ejemplo n.º 2
0
 public static UserBasics MapFromEntity(data.Entities.User entity)
 {
     return(new UserBasics()
     {
         UserId = entity.UserId,
         FirstName = entity.FirstName,
         LastName = entity.LastName,
         Email = entity.Email,
         Permissions = entity.Permissions
     });
 }
Ejemplo n.º 3
0
        public data.Entities.User MapToEntity()
        {
            var user = new data.Entities.User()
            {
                FirstName   = this.FirstName,
                LastName    = this.LastName,
                Email       = this.Email,
                Password    = this.Password,
                Salt        = this.Salt,
                Permissions = this.Permissions
            };

            return(user);
        }
Ejemplo n.º 4
0
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var UserAddresses = new List <UserAddress>()
                {
                    new UserAddress()
                    {
                        IsDeleted = false,
                        Address   = new Address()
                        {
                            IsDeleted       = false,
                            City            = model.City,
                            Zip             = model.Zip,
                            State           = model.State,
                            MainAddress     = model.MainAddress,
                            DeliveryAddress = model.DeliveryAddress,
                            Country         = model.Country
                        }
                    }
                };


                var user = new data.Entities.User()
                {
                    Email        = model.Email,
                    FName        = model.FName,
                    LName        = model.LName,
                    Individually = model.Individually,
                    IsDeleted    = false,
                    MName        = model.MName,
                    NationalId   = model.NationalId,
                    Phone        = model.Phone,

                    UserAddresses = UserAddresses,
                };
                var corporateDetails = new CorporateDetails();
                if (model.Individually == 2)
                {
                    corporateDetails = new CorporateDetails()
                    {
                        CorporateName  = model.CorporateName,
                        CorporateSite  = model.CorporateSite,
                        RegistrationNo = model.RegistrationNo,
                        user           = user
                    };
                    db.CorporatesDetails.Add(corporateDetails);
                    db.SaveChanges();
                }
                else
                {
                    db.SaveChanges();
                }

                var ASPUser = new ApplicationUser {
                    user = user, UserName = model.Email, Email = model.Email
                };

                var result = await UserManager.CreateAsync(ASPUser, model.Password);

                if (result.Succeeded)
                {
                    UserManager.AddToRole(ASPUser.Id, "User");
                    await SignInManager.SignInAsync(ASPUser, isPersistent : false, rememberBrowser : false);

                    EmailTemplate Email     = new EmailTemplate();
                    string        path      = @"~/Common/WelcomeEmailTemplate.html";
                    var           emailHtml = Email.ReadTemplateEmail(user, path);
                    try
                    {
                        GmailSender.SendEmail("*****@*****.**", "Serious!1", new List <string>()
                        {
                            model.Email
                        }, "Welcome", emailHtml, null);
                    }
                    catch (Exception e)
                    {
                        db.CorporatesDetails.Remove(corporateDetails);
                        var logins       = ASPUser.Logins;
                        var rolesForUser = await _userManager.GetRolesAsync(ASPUser.Id);

                        using (var transaction = context.Database.BeginTransaction())
                        {
                            foreach (var login in logins.ToList())
                            {
                                await _userManager.RemoveLoginAsync(login.UserId, new UserLoginInfo(login.LoginProvider, login.ProviderKey));
                            }

                            if (rolesForUser.Count() > 0)
                            {
                                foreach (var item in rolesForUser.ToList())
                                {
                                    await _userManager.RemoveFromRoleAsync(ASPUser.Id, item);
                                }
                            }
                            await _userManager.DeleteAsync(ASPUser);

                            transaction.Commit();
                        }

                        db.SaveChanges();
                    }

                    // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
                    // Send an email with this link
                    // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                    // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                    return(RedirectToAction("Index", "Home"));
                }
                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }