protected async Task <HttpResponseMessage> CreateItemAsync <TValidator>(HttpRequestMessage httpRequestMessage)
            where TValidator : AbstractValidator <T>, new()
        {
            _ = httpRequestMessage ?? throw new ArgumentNullException(nameof(httpRequestMessage));

            var claimsPrincipal = await tokenValidator.ValidateTokenAsync(httpRequestMessage.Headers.Authorization);

            if (claimsPrincipal == null)
            {
                return(new HttpResponseMessage(HttpStatusCode.Unauthorized));
            }

            var jsonValidationResult = await jsonHttpContentValidator.ValidateJsonAsync <T, TValidator>(httpRequestMessage.Content);

            if (!jsonValidationResult.IsValid)
            {
                return(jsonValidationResult.Message);
            }

            var createdItem = await dataRepository.CreateItemAsync(jsonValidationResult.Item);

            var content = new StringContent(JsonSerializer.Serialize(createdItem), Encoding.UTF8, ContentTypes.Application.Json);

            return(new HttpResponseMessage(HttpStatusCode.Created)
            {
                Content = content
            });
        }
Esempio n. 2
0
        public async Task <HttpResponseMessage> CreateCustomer([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "customers")] HttpRequestMessage req, ILogger log)
        {
            _ = req ?? throw new ArgumentNullException(nameof(req));

            log.LogInformation(CustomerDataResources.CreateCustomerStartLog);

            var claimsPrincipal = await tokenValidator.ValidateTokenAsync(req.Headers.Authorization);

            if (claimsPrincipal == null)
            {
                return(new HttpResponseMessage(HttpStatusCode.Unauthorized));
            }

            var jsonValidationResult = await jsonHttpContentValidator.ValidateJsonAsync <Customer, CustomerValidator>(req.Content);

            if (!jsonValidationResult.IsValid)
            {
                return(jsonValidationResult.Message);
            }

            var customer = await customerRepository.CreateItemAsync(jsonValidationResult.Item);

            var content = new StringContent(JsonSerializer.Serialize(customer), Encoding.UTF8, ContentTypes.Application.Json);

            log.LogInformation(CustomerDataResources.CreateCustomerEndLog);
            return(new HttpResponseMessage(HttpStatusCode.Created)
            {
                Content = content
            });
        }
Esempio n. 3
0
        public async Task <HttpResponseMessage> CheckAccess([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "checkAccess")] HttpRequestMessage req, ILogger log)
        {
            _ = req ?? throw new ArgumentNullException(nameof(req));

            log.LogInformation(PolicyManagerResources.CheckAccessStartLog);

            var claimsPrincipal = await tokenValidator.ValidateTokenAsync(req.Headers.Authorization);

            if (claimsPrincipal == null)
            {
                return(new HttpResponseMessage(HttpStatusCode.Unauthorized));
            }

            var jsonValidationResult = await jsonHttpContentValidator.ValidateJsonAsync <CheckAccessRequest, CheckAccessRequestValidator>(req.Content);

            if (!jsonValidationResult.IsValid)
            {
                return(jsonValidationResult.Message);
            }

            var groups = await microsoftGraphRepository.FetchMyGroupsAsync(req.Headers.Authorization);

            var initialState = new InitialState <Group>()
            {
                ClaimsPrincipal = claimsPrincipal,
                Identifier      = jsonValidationResult.Item.RequestIdentifier,
                Groups          = groups,
            };

            var policyResults = await authorizationRepository.EvaluateAsync(req.Headers.Authorization, initialState);

            log.LogInformation(PolicyManagerResources.CheckAccessEndLog);

            var content = new StringContent(JsonSerializer.Serialize(policyResults), Encoding.UTF8, ContentTypes.Application.Json);

            return(new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = content
            });
        }