예제 #1
0
 public AccountController(AdoptMeDataContext context, IAccountService accountService, IMapper mapper, UserManager <User> userManager, SignInManager <User> signInManager, IConfiguration configuration)
 {
     this.context        = context;
     this.accountService = accountService;
     this.mapper         = mapper;
     this.userManager    = userManager;
     this.signInManager  = signInManager;
     this.configuration  = configuration;
 }
예제 #2
0
 public PetTypeRepository(AdoptMeDataContext dataContext) : base(dataContext)
 {
 }
예제 #3
0
 public UnitOfWork(AdoptMeDataContext context)
 {
     this.context = context;
     Pets         = new PetRepository(context);
     PetTypes     = new PetTypeRepository(context);
 }
예제 #4
0
        public static LoginResponseData Execute(User user, AdoptMeDataContext db, RefreshToken refreshToken = null)
        {
            var options = GetOptions();
            var now     = DateTime.UtcNow;

            var claims = new List <Claim>()
            {
                new Claim(JwtRegisteredClaimNames.NameId, user.Id),
                new Claim(JwtRegisteredClaimNames.Jti, user.Id.ToString()),
                new Claim(JwtRegisteredClaimNames.Iat, new DateTimeOffset(now).ToUniversalTime().ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64),
                new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
            };

            var userClaims = db.UserClaims.Where(i => i.UserId == user.Id);

            foreach (var userClaim in userClaims)
            {
                claims.Add(new Claim(userClaim.ClaimType, userClaim.ClaimValue));
            }
            var userRoles = db.UserRoles.Where(i => i.UserId == user.Id);

            foreach (var userRole in userRoles)
            {
                var role = db.Roles.Single(i => i.Id == userRole.RoleId);
                claims.Add(new Claim(Extensions.RoleClaimType, role.Name));
            }

            if (refreshToken == null)
            {
                refreshToken = new RefreshToken()
                {
                    UserId = user.Id,
                    Token  = Guid.NewGuid().ToString("N"),
                };
                db.InsertNew(refreshToken);
            }

            refreshToken.IssuedUtc  = now;
            refreshToken.ExpiresUtc = now.Add(options.Expiration);
            db.SaveChanges();

            var jwt = new JwtSecurityToken(
                issuer: options.Issuer,
                audience: options.Audience,
                claims: claims.ToArray(),
                notBefore: now,
                expires: now.Add(options.Expiration),
                signingCredentials: options.SigningCredentials);
            var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

            var response = new LoginResponseData
            {
                access_token  = encodedJwt,
                refresh_token = refreshToken.Token,
                expires_in    = (int)options.Expiration.TotalSeconds,
                userName      = user.UserName,
                firstName     = user.FirstName,
                lastName      = user.LastName,
                isAdmin       = claims.Any(i => i.Type == Extensions.RoleClaimType && i.Value == Extensions.AdminRole)
            };

            return(response);
        }
예제 #5
0
 public BaseRepository(AdoptMeDataContext dataContext)
 {
     this.dataContext = dataContext;
 }