public async Task <IActionResult> CreateSampleQueryAsync([FromBody] SampleQueryModel sampleQueryModel) { try { // Get the list of policies SampleQueriesPolicies policies = await GetSampleQueriesPoliciesAsync(); string categoryName = sampleQueryModel.Category; ClaimsIdentity identity = (ClaimsIdentity)User.Identity; IEnumerable <Claim> claims = identity.Claims; string userPrincipalName = (claims?.FirstOrDefault(x => x.Type.Equals(Constants.ClaimTypes.UpnJwt, StringComparison.OrdinalIgnoreCase)) ?? claims?.FirstOrDefault(x => x.Type.Equals(Constants.ClaimTypes.UpnUriSchema, StringComparison.OrdinalIgnoreCase)))?.Value; // Check if authenticated user is authorized for this action bool isAuthorized = SamplesPolicyService.IsUserAuthorized(policies, userPrincipalName, categoryName, HttpMethods.Post); if (!isAuthorized) { return(new JsonResult( $"{userPrincipalName} is not authorized to create the sample query. Category: '{categoryName}'") { StatusCode = StatusCodes.Status403Forbidden }); } // Get the list of sample queries SampleQueriesList sampleQueriesList = await _samplesStore.FetchSampleQueriesListAsync("en-US"); // Assign a new Id to the new sample query sampleQueryModel.Id = Guid.NewGuid(); // Add the new sample query to the list of sample queries SampleQueriesList newSampleQueriesList = SamplesService.AddToSampleQueriesList(sampleQueriesList, sampleQueryModel); // Get the serialized JSON string of the sample query string newSampleQueriesJson = SamplesService.SerializeSampleQueriesList(newSampleQueriesList); // Disabled functionality // await _fileUtility.WriteToFile(updatedSampleQueriesJson, _queriesFilePathSource); // Create the query Uri for the newly created sample query string newSampleQueryUri = string.Format("{0}://{1}{2}/{3}", Request.Scheme, Request.Host, Request.Path.Value, sampleQueryModel.Id.ToString()); // Success; return the new sample query that was added along with its Uri return(Created(newSampleQueryUri, sampleQueryModel)); } catch (Exception exception) { return(new JsonResult(exception.Message) { StatusCode = StatusCodes.Status500InternalServerError }); } }
public async Task <IActionResult> CreateSampleQueryAsync([FromBody] SampleQueryModel sampleQueryModel) { try { // Get the list of policies SampleQueriesPolicies policies = await GetSampleQueriesPoliciesAsync(); string categoryName = sampleQueryModel.Category; string userPrincipalName = User.Identity.Name; // Check if authenticated user is authorized for this action bool isAuthorized = SamplesPolicyService.IsUserAuthorized(policies, userPrincipalName, categoryName, HttpMethods.Post); if (!isAuthorized) { return(new JsonResult( $"{userPrincipalName} is not authorized to create the sample query. Category: '{categoryName}'") { StatusCode = StatusCodes.Status401Unauthorized }); } // Get the list of sample queries SampleQueriesList sampleQueriesList = await GetSampleQueriesListAsync(); // Assign a new Id to the new sample query sampleQueryModel.Id = Guid.NewGuid(); // Add the new sample query to the list of sample queries SampleQueriesList newSampleQueriesList = SamplesService.AddToSampleQueriesList(sampleQueriesList, sampleQueryModel); // Get the serialized JSON string of the sample query string newSampleQueriesJson = SamplesService.SerializeSampleQueriesList(newSampleQueriesList); // Save the document-readable JSON-styled string to the source file await _fileUtility.WriteToFile(newSampleQueriesJson, _queriesFilePathSource); // Create the query Uri for the newly created sample query string newSampleQueryUri = string.Format("{0}://{1}{2}/{3}", Request.Scheme, Request.Host, Request.Path.Value, sampleQueryModel.Id.ToString()); // Success; return the new sample query that was added along with its Uri return(Created(newSampleQueryUri, sampleQueryModel)); } catch (Exception exception) { return(new JsonResult(exception.Message) { StatusCode = StatusCodes.Status500InternalServerError }); } }