public async Task <IActionResult> Save(string id, DocumentSubmissionModel submissionModel) { submissionModel.AntecedentIdBase64 = submissionModel.AntecedentIdBase64 ?? Enumerable.Empty <string>(); if (submissionModel.AntecedentIdBase64.Any() && !submissionModel.AntecedentIdBase64.Contains(id)) { logger.LogWarning("Document rejected; The given id is a member of the given antecedents; Origin: {0}", HttpContext.GetRemoteAddress()); return(BadRequest()); } if (submissionModel.AntecedentIdBase64.Count() > 2) { logger.LogWarning("Document rejected; More than two antecedents; Origin: {0}", HttpContext.GetRemoteAddress()); return(BadRequest()); } if (submissionModel.AntecedentIdBase64.Any(_id => _id.FalsifyAsIdentifier())) { logger.LogWarning("Document rejected; Invalid antecents; Origin: {0}", HttpContext.GetRemoteAddress()); return(BadRequest()); } submissionModel.Title = submissionModel.Title ?? string.Empty; submissionModel.Body = submissionModel.Body ?? string.Empty; submissionModel.Title = submissionModel.Title.Trim(); submissionModel.Body = submissionModel.Body.Trim(); if (submissionModel.Title.Length > inputConfiguration.TitleLengthLimit) { logger.LogWarning("Document rejected; Title too long; Origin: {0}", HttpContext.GetRemoteAddress()); return(StatusCode(413)); } if (submissionModel.Body.Length > inputConfiguration.BodyLengthLimit) { logger.LogWarning("Document rejected; Body too long; Origin: {0}", HttpContext.GetRemoteAddress()); return(StatusCode(413)); } var antecedantIds = ImmutableArray.CreateRange(submissionModel.AntecedentIdBase64.Select(s => new MD5Sum(WebEncoders.Base64UrlDecode(s)))); Guid authorId; { var nameIdentifierClaim = User.Claims.First(c => c.Type == ClaimTypes.NameIdentifier); authorId = Guid.Parse(nameIdentifierClaim.Value); } var submissionId = await databaseService.AddDocumentAsync(authorId, submissionModel.Body, submissionModel.Title, antecedantIds); logger.LogInformation("Document saved; Key: {1}; Origin: {0}", HttpContext.GetRemoteAddress(), submissionId.ToString()); return(RedirectToAction(nameof(GetDocument), new { id = submissionId.ToString() })); }