예제 #1
0
        private IEnumerable <Permission> GetPermissionsFromViewModel(AddApiKeyViewModel viewModel)
        {
            List <Permission> permissions = new List <Permission>();

            foreach (var p in viewModel.PermissionValues.Where(tuple => !tuple.Forbidden))
            {
                if (Policies.IsStorePolicy(p.Permission))
                {
                    if (p.StoreMode == AddApiKeyViewModel.ApiKeyStoreMode.AllStores && p.Value)
                    {
                        permissions.Add(Permission.Create(p.Permission));
                    }
                    else if (p.StoreMode == AddApiKeyViewModel.ApiKeyStoreMode.Specific)
                    {
                        permissions.AddRange(p.SpecificStores.Select(s => Permission.Create(p.Permission, s)));
                    }
                }
                else if (p.Value && Permission.TryCreatePermission(p.Permission, null, out var pp))
                {
                    permissions.Add(pp);
                }
            }


            return(permissions.Distinct());
        }
        private IActionResult HandleCommands(AddApiKeyViewModel viewModel)
        {
            switch (viewModel.Command)
            {
            case "change-store-mode":
                viewModel.StoreMode = viewModel.StoreMode == AddApiKeyViewModel.ApiKeyStoreMode.Specific
                        ? AddApiKeyViewModel.ApiKeyStoreMode.AllStores
                        : AddApiKeyViewModel.ApiKeyStoreMode.Specific;

                if (viewModel.StoreMode == AddApiKeyViewModel.ApiKeyStoreMode.Specific &&
                    !viewModel.SpecificStores.Any() && viewModel.Stores.Any())
                {
                    viewModel.SpecificStores.Add(null);
                }
                return(View(viewModel));

            case "add-store":
                viewModel.SpecificStores.Add(null);
                return(View(viewModel));

            case string x when x.StartsWith("remove-store", StringComparison.InvariantCultureIgnoreCase):
            {
                ModelState.Clear();
                var index = int.Parse(
                    viewModel.Command.Substring(
                        viewModel.Command.IndexOf(":", StringComparison.InvariantCultureIgnoreCase) + 1),
                    CultureInfo.InvariantCulture);
                viewModel.SpecificStores.RemoveAt(index);
                return(View(viewModel));
            }
            }

            return(null);
        }
예제 #3
0
        public async Task <IActionResult> AddApiKey(AddApiKeyViewModel viewModel)
        {
            await SetViewModelValues(viewModel);

            var ar = HandleCommands(viewModel);

            if (ar != null)
            {
                return(ar);
            }

            if (!ModelState.IsValid)
            {
                return(View(viewModel));
            }

            var key = await CreateKey(viewModel);

            TempData.SetStatusMessageModel(new StatusMessageModel()
            {
                Severity = StatusMessageModel.StatusSeverity.Success,
                Html     = $"API key generated! <code class='alert-link'>{key.Id}</code>"
            });
            return(RedirectToAction("APIKeys"));
        }
예제 #4
0
        private IActionResult HandleCommands(AddApiKeyViewModel viewModel)
        {
            if (string.IsNullOrEmpty(viewModel.Command))
            {
                return(null);
            }
            var parts      = viewModel.Command.Split(':', StringSplitOptions.RemoveEmptyEntries);
            var permission = parts[0];

            if (!Policies.IsStorePolicy(permission))
            {
                return(null);
            }
            var permissionValueItem = viewModel.PermissionValues.Single(item => item.Permission == permission);
            var command             = parts[1];
            var storeIndex          = parts.Length == 3 ? parts[2] : null;

            ModelState.Clear();
            switch (command)
            {
            case "change-store-mode":
                permissionValueItem.StoreMode = permissionValueItem.StoreMode == AddApiKeyViewModel.ApiKeyStoreMode.Specific
                        ? AddApiKeyViewModel.ApiKeyStoreMode.AllStores
                        : AddApiKeyViewModel.ApiKeyStoreMode.Specific;
                // Reset values for "all stores" option to their original values
                if (permissionValueItem.StoreMode == AddApiKeyViewModel.ApiKeyStoreMode.AllStores)
                {
                    permissionValueItem.SpecificStores = new List <string>();
                    permissionValueItem.Value          = true;
                }

                if (permissionValueItem.StoreMode == AddApiKeyViewModel.ApiKeyStoreMode.Specific &&
                    !permissionValueItem.SpecificStores.Any() && viewModel.Stores.Any())
                {
                    permissionValueItem.SpecificStores.Add(null);
                }
                return(View(viewModel));

            case "add-store":
                permissionValueItem.SpecificStores.Add(null);
                return(View(viewModel));

            case "remove-store":
            {
                if (storeIndex != null)
                {
                    permissionValueItem.SpecificStores.RemoveAt(int.Parse(storeIndex,
                                                                          CultureInfo.InvariantCulture));
                }
                return(View(viewModel));
            }
            }

            return(null);
        }
        private async Task <APIKeyData> CreateKey(AddApiKeyViewModel viewModel)
        {
            var key = new APIKeyData()
            {
                Id     = Encoders.Hex.EncodeData(RandomUtils.GetBytes(20)),
                Type   = APIKeyType.Permanent,
                UserId = _userManager.GetUserId(User),
                Label  = viewModel.Label
            };

            key.SetPermissions(GetPermissionsFromViewModel(viewModel));
            await _apiKeyRepository.CreateKey(key);

            return(key);
        }
예제 #6
0
        private async Task <APIKeyData> CreateKey(AddApiKeyViewModel viewModel)
        {
            var key = new APIKeyData()
            {
                Id     = Guid.NewGuid().ToString().Replace("-", string.Empty),
                Type   = APIKeyType.Permanent,
                UserId = _userManager.GetUserId(User),
                Label  = viewModel.Label
            };

            key.SetPermissions(GetPermissionsFromViewModel(viewModel));
            await _apiKeyRepository.CreateKey(key);

            return(key);
        }
예제 #7
0
        private async Task <APIKeyData> CreateKey(AddApiKeyViewModel viewModel)
        {
            var key = new APIKeyData()
            {
                Id     = Encoders.Hex.EncodeData(RandomUtils.GetBytes(20)),
                Type   = APIKeyType.Permanent,
                UserId = _userManager.GetUserId(User),
                Label  = viewModel.Label
            };

            key.Permissions = string.Join(";", GetPermissionsFromViewModel(viewModel).Select(p => p.ToString()).Distinct().ToArray());
            await _apiKeyRepository.CreateKey(key);

            return(key);
        }
        private IEnumerable <string> GetPermissionsFromViewModel(AddApiKeyViewModel viewModel)
        {
            var permissions = viewModel.PermissionValues.Where(tuple => tuple.Value).Select(tuple => tuple.Permission).ToList();

            if (viewModel.StoreMode == AddApiKeyViewModel.ApiKeyStoreMode.Specific)
            {
                permissions.AddRange(viewModel.SpecificStores.Select(Permissions.GetStorePermission));
            }
            else if (viewModel.StoreManagementPermission)
            {
                permissions.Add(Permissions.StoreManagement);
            }

            if (viewModel.IsServerAdmin && viewModel.ServerManagementPermission)
            {
                permissions.Add(Permissions.ServerManagement);
            }

            return(permissions.Distinct());
        }
        private IEnumerable <string> GetPermissionsFromViewModel(AddApiKeyViewModel viewModel)
        {
            var permissions = new List <string>();

            if (viewModel.StoreMode == AddApiKeyViewModel.ApiKeyStoreMode.Specific)
            {
                permissions.AddRange(viewModel.SpecificStores.Select(APIKeyConstants.Permissions.GetStorePermission));
            }
            else if (viewModel.StoreManagementPermission)
            {
                permissions.Add(APIKeyConstants.Permissions.StoreManagement);
            }

            if (viewModel.IsServerAdmin && viewModel.ServerManagementPermission)
            {
                permissions.Add(APIKeyConstants.Permissions.ServerManagement);
            }

            return(permissions);
        }
예제 #10
0
 private async Task <APIKeyData> CreateKey(AddApiKeyViewModel viewModel, (string appIdentifier, string appAuthority) app = default)