Exemple #1
0
 public static RegisterAccountResult Succeeded(GametekiUser newUser)
 {
     return(new RegisterAccountResult
     {
         Success = true,
         User = newUser
     });
 }
Exemple #2
0
        private static void PopulateApiUser(GametekiUser user, ApiUser apiUser)
        {
            apiUser.Id       = user.Id;
            apiUser.Username = user.UserName;
            apiUser.Email    = user.Email;
            apiUser.Settings = new ApiSettings
            {
                Background = user.Settings.Background,
                CardSize   = user.Settings.CardSize
            };
            apiUser.Permissions = new GametekiPermissions();
            apiUser.CustomData  = user.CustomData;

            foreach (var userRole in user.UserRoles)
            {
                switch (userRole.Role.Name)
                {
                case Roles.UserManager:
                    apiUser.Permissions.CanManageUsers = true;
                    break;

                case Roles.PermissionsManager:
                    apiUser.Permissions.CanManagePermissions = true;
                    break;

                case Roles.ChatManager:
                    apiUser.Permissions.CanModerateChat = true;
                    break;

                case Roles.GameManager:
                    apiUser.Permissions.CanManageGames = true;
                    break;

                case Roles.NewsManager:
                    apiUser.Permissions.CanEditNews = true;
                    break;

                case Roles.NodeManager:
                    apiUser.Permissions.CanManageNodes = true;
                    break;

                case Roles.Admin:
                    apiUser.Permissions.IsAdmin = true;
                    break;

                case Roles.Contributor:
                    apiUser.Permissions.IsContributor = true;
                    break;

                case Roles.Supporter:
                    apiUser.Permissions.IsSupporter = true;
                    break;
                }
            }
        }
Exemple #3
0
        public static ApiUser ToApiUser(this GametekiUser user)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            var apiUser = new ApiUser();

            PopulateApiUser(user, apiUser);

            return(apiUser);
        }
Exemple #4
0
        public Task <bool> UpdatePermissionsAsync(GametekiUser user, GametekiPermissions newPermissions)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            if (newPermissions == null)
            {
                throw new ArgumentNullException(nameof(newPermissions));
            }

            return(UpdatePermissionsInternalAsync(user, newPermissions));
        }
Exemple #5
0
        public Task <bool> RemoveBlockListEntryAsync(GametekiUser user, string username)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            if (username == null)
            {
                throw new ArgumentNullException(nameof(username));
            }

            return(RemoveBlockListEntryInternalAsync(username));
        }
Exemple #6
0
        private async Task <bool> UpdatePermissionsInternalAsync(GametekiUser user, GametekiPermissions newPermissions)
        {
            var existingPermissions = user.ToApiUser().Permissions;
            var toAdd    = new List <string>();
            var toRemove = new List <string>();

            ProcessPermission(newPermissions.CanEditNews, existingPermissions.CanEditNews, Roles.NewsManager, toRemove, toAdd);
            ProcessPermission(newPermissions.CanManageGames, existingPermissions.CanManageGames, Roles.GameManager, toRemove, toAdd);
            ProcessPermission(newPermissions.CanManageNodes, existingPermissions.CanManageNodes, Roles.NodeManager, toRemove, toAdd);
            ProcessPermission(newPermissions.CanManagePermissions, existingPermissions.CanManagePermissions, Roles.PermissionsManager, toRemove, toAdd);
            ProcessPermission(newPermissions.CanManageUsers, existingPermissions.CanManageUsers, Roles.UserManager, toRemove, toAdd);
            ProcessPermission(newPermissions.CanModerateChat, existingPermissions.CanModerateChat, Roles.ChatManager, toRemove, toAdd);
            ProcessPermission(newPermissions.IsSupporter, existingPermissions.IsSupporter, Roles.Supporter, toRemove, toAdd);
            ProcessPermission(newPermissions.IsContributor, existingPermissions.IsContributor, Roles.Contributor, toRemove, toAdd);
            ProcessPermission(newPermissions.IsAdmin, existingPermissions.IsAdmin, Roles.Admin, toRemove, toAdd);

            foreach (var roleToAdd in toAdd)
            {
                var role = await context.Roles.SingleOrDefaultAsync(r => r.Name == roleToAdd).ConfigureAwait(false);

                if (role == null)
                {
                    continue;
                }

                user.UserRoles.Add(new GametekiUserRole {
                    Role = role, User = user
                });
            }

            foreach (var userRole in toRemove.Select(roleToRemove => user.UserRoles.Single(ur => ur.Role.Name == roleToRemove)))
            {
                user.UserRoles.Remove(userRole);
            }

            try
            {
                await context.SaveChangesAsync().ConfigureAwait(false);
            }
            catch (DbUpdateException exception)
            {
#pragma warning disable CA1303 // Do not pass literals as localized parameters
                logger.LogError(exception, "Failed updating permissions");
#pragma warning restore CA1303 // Do not pass literals as localized parameters
                return(false);
            }

            return(true);
        }
Exemple #7
0
        public static ApiUserAdmin ToApiUserAdmin(this GametekiUser user)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            var adminUser = new ApiUserAdmin();

            PopulateApiUser(user, adminUser);

            adminUser.Disabled = user.Disabled;

            // adminUser.Verified = user.EmailConfirmed;
            return(adminUser);
        }
Exemple #8
0
        private async Task <bool> AddBlockListEntryInternalAsync(GametekiUser user, string username)
        {
            var blockListEntry = new BlockListEntry
            {
                BlockedUser = username,
                UserId      = user.Id
            };

            try
            {
                context.BlockListEntry.Add(blockListEntry);
                await context.SaveChangesAsync().ConfigureAwait(false);
            }
            catch (DbUpdateException ex)
            {
                logger.LogError($"Error adding block list entry '{username}' for {user.UserName}", ex);
                return(false);
            }

            return(true);
        }
Exemple #9
0
        private string GenerateTokenForUser(GametekiUser user)
        {
            var claims = new List <Claim> {
                new Claim(ClaimTypes.Name, user.UserName)
            };

            claims.AddRange(user.UserRoles.Select(ur => new Claim(ClaimTypes.Role, ur.Role.Name)));

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(tokenOptions.Key));
            var jwt = new JwtSecurityToken(
                tokenOptions.Issuer,
                tokenOptions.Issuer,
                claims,
                DateTime.UtcNow,
                DateTime.UtcNow.AddMinutes(5),
                new SigningCredentials(key, SecurityAlgorithms.HmacSha256))
            {
                Payload = { ["UserData"] = user.ToApiUser() }
            };

            return(new JwtSecurityTokenHandler().WriteToken(jwt));
        }