예제 #1
0
        public void GetRoleClaims_UserHasDefaultRoles_ReturnEmptyClaims()
        {
            var result = RolesServiceUtils.GetRoleClaims(new User());

            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.Empty);
        }
예제 #2
0
        public void GetRoleClaims_UserIsNull_ReturnEmptyClaims()
        {
            var result = RolesServiceUtils.GetRoleClaims(null);

            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.Empty);
        }
예제 #3
0
        public void GetRoleClaims_VctRoleIsOutOfRange_ThrowArgumentOutOfRangeException()
        {
            var user = new User();

            user.SetRoles(vct: 5);

            Assert.That(() => RolesServiceUtils.GetRoleClaims(user),
                        Throws.Exception.TypeOf <ArgumentOutOfRangeException>());
        }
예제 #4
0
        public void GetRoleClaims_UserIsTrialAdminAndMapperIsOutOfRange_ThrowArgumentOutOfRangeException()
        {
            var user = new User();

            user.SetRoles(admin: 1, mapper: 5);

            Assert.That(() => RolesServiceUtils.GetRoleClaims(user),
                        Throws.Exception.TypeOf <ArgumentOutOfRangeException>());
        }
예제 #5
0
        public void GetRoleClaims_UserIsAdmin_ReturnClaimsWithAdminRole()
        {
            var user = new User();

            user.SetRoles(2);

            var result = RolesServiceUtils.GetRoleClaims(user);

            Assert.That(result, Is.Not.Empty);
            Assert.That(result.Count(), Is.EqualTo(1));
            Assert.That(result.First().Value, Is.EqualTo("admin").IgnoreCase);
        }
예제 #6
0
        public void GetRoleClaims_UserIsSupporterAndScripter_ReturnClaimsWithSupporterAndScripterRole()
        {
            var user = new User();

            user.SetRoles(supporter: 1, scripter: 3);

            var result = RolesServiceUtils.GetRoleClaims(user);

            Assert.That(result, Is.Not.Empty);
            Assert.That(result.Count(), Is.EqualTo(2));
            Assert.That(result.First().Value, Is.EqualTo("supporter").IgnoreCase);
            Assert.That(result.Last().Value, Is.EqualTo("scripter").IgnoreCase);
        }
예제 #7
0
        public async Task <bool> IsPermitted(int userId, params RoleType[] roleTypes)
        {
            if (Configuration.IsDev(userId))
            {
                return(true);
            }

            var query = RolesServiceUtils.BuildIsPermittedQuery(userId, roleTypes);

            var result = await database.SelectQueryFirst <IsPermittedResult>(query)
                         ?? throw new DatabaseException();

            return(result.IsPermitted);
        }
예제 #8
0
        public async Task <bool> IsPermitted(User user, params RoleType[] roleTypes)
        {
            if (user == null)
            {
                throw new EntityNotFoundException("User not found");
            }

            if (Configuration.IsDev(user.Id))
            {
                return(true);
            }

            var query = RolesServiceUtils.BuildIsPermittedQuery(user.Id, roleTypes);

            var result = await database.SelectQueryFirst <IsPermittedResult>(query)
                         ?? throw new DatabaseException();

            return(result.IsPermitted);
        }
예제 #9
0
        public string GenerateToken(User user)
        {
            var claims = new List <Claim>
            {
                new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
                new Claim(ClaimTypes.Name, user.Username),
                new Claim(ClaimTypes.Email, user.Email)
            };

            var roleClaims = RolesServiceUtils.GetRoleClaims(user);

            foreach (var roleClaim in roleClaims)
            {
                claims.Add(roleClaim);
            }

            if (Configuration.IsDev(user.Id))
            {
                claims.Add(new Claim(ClaimTypes.Role, Utils.EnumToString(RoleType.Owner)));
            }

            var key = new SymmetricSecurityKey(
                Encoding.UTF8.GetBytes(Configuration.GetValue <string>(AppSettingsKeys.Token)));

            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature);

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(claims),
                Expires            = DateTime.Now.AddDays(Constants.JwtTokenExpireTimeInDays),
                SigningCredentials = creds
            };

            var tokenHandler = new JwtSecurityTokenHandler();

            var token = tokenHandler.CreateToken(tokenDescriptor);

            return(tokenHandler.WriteToken(token));
        }