public async Task <ActionResult> AddNamespace([FromBody] AddNamespaceRequest addNamespaceRequest) { if (!_addNamespaceRequestValidator.TryValidateAddNamespaceRequest(addNamespaceRequest, out string validationError)) { Log.Warning($"Add namespace called with invalid input. Validation error: {validationError}"); return(BadRequest(validationError)); } try { await _namespaceRepository.CreateNamespaceAsync( addNamespaceRequest.NamespaceName, addNamespaceRequest.RoleName ); await _roleRepository .CreateNamespaceFullAccessRole(addNamespaceRequest.NamespaceName); return(Ok()); } catch (Exception ex) { Log.Error($"An error occured trying to create the namespace: {ex.Message}"); return(StatusCode(StatusCodes.Status500InternalServerError, $"An error occured trying to create the namespace: {ex.Message}")); } }
public bool TryValidateAddNamespaceRequest(AddNamespaceRequest request, out string validationError) { validationError = string.Empty; if (string.IsNullOrWhiteSpace(request.NamespaceName)) { validationError = "Namespace name is invalid."; return(false); } // Namespace name 63 char max. if (request.NamespaceName.Length > 63) { validationError = "Namespace name is invalid. A maximum of 63 characters is allowed."; return(false); } // Label must consist of lower case alphanumeric characters or '-', and must start and end with an alphanumeric character. var allowedCharactersPattern = "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$"; var match = Regex.Match(request.NamespaceName, allowedCharactersPattern); if (!match.Success) { validationError = "Namespace name is invalid. It must consist of lower case alphanumeric characters or '-', and must start and end with an alphanumeric character."; return(false); } return(true); }
public void TryValidateAddNamespaceRequest_GivenValidInput_Validates() { // Arrange var sut = new AddNamespaceRequestValidator(); var request = new AddNamespaceRequest { NamespaceName = "my-namespace" }; var validationErrors = string.Empty; // Act var validRequest = sut.TryValidateAddNamespaceRequest(request, out validationErrors); // Assert Assert.True(validRequest); Assert.Equal(string.Empty, validationErrors); }
public void TryValidateAddNamespaceRequest_GivenUpperCaseNamespaceName_DoesNotValidate() { // Arrange var sut = new AddNamespaceRequestValidator(); var request = new AddNamespaceRequest { NamespaceName = "My-Namespace" }; var validationErrors = string.Empty; // Act var validRequest = sut.TryValidateAddNamespaceRequest(request, out validationErrors); // Assert Assert.False(validRequest); Assert.NotEqual(string.Empty, validationErrors); }
public void TryValidateAddNamespaceRequest_GivenTooLongNamespaceName_DoesNotValidate() { // Arrange var sut = new AddNamespaceRequestValidator(); var namespaceNameLongerThan64Characters = new string('a', 64); var request = new AddNamespaceRequest { NamespaceName = namespaceNameLongerThan64Characters }; var validationErrors = string.Empty; // Act var validRequest = sut.TryValidateAddNamespaceRequest(request, out validationErrors); // Assert Assert.False(validRequest); Assert.NotEqual(string.Empty, validationErrors); }