public virtual Task <IActionResult> PatchMe(string id, [FromBody] PatchRepresentationParameter patchRepresentation) { return(ExecuteActionIfAuthenticated(() => { return InternalPatch(id, patchRepresentation); })); }
private async Task <IActionResult> InternalPatch(string id, PatchRepresentationParameter patchRepresentation) { _logger.LogInformation(string.Format(Global.PatchResource, id)); try { var newRepresentation = await _patchRepresentationCommandHandler.Handle(new PatchRepresentationCommand(id, patchRepresentation)); return(BuildHTTPResult(newRepresentation, HttpStatusCode.OK, false)); } catch (SCIMFilterException ex) { _logger.LogError(ex, ex.Message); return(this.BuildError(HttpStatusCode.BadRequest, ex.Message, SCIMConstants.ErrorSCIMTypes.InvalidFilter)); } catch (SCIMBadSyntaxException ex) { _logger.LogError(ex, ex.Message); return(this.BuildError(HttpStatusCode.BadRequest, ex.Message, SCIMConstants.ErrorSCIMTypes.InvalidSyntax)); } catch (SCIMNotFoundException ex) { return(this.BuildError(HttpStatusCode.NotFound, ex.Message, SCIMConstants.ErrorSCIMTypes.Unknown)); } catch (Exception ex) { _logger.LogError(ex, ex.Message); return(this.BuildError(HttpStatusCode.InternalServerError, ex.ToString(), SCIMConstants.ErrorSCIMTypes.InternalServerError)); } }
private void CheckParameter(PatchRepresentationParameter patchRepresentation) { if (patchRepresentation == null) { throw new SCIMBadSyntaxException(string.Format(Global.RequestIsNotWellFormatted, "PATCH")); } var requestedSchemas = patchRepresentation.Schemas; if (!requestedSchemas.Any()) { throw new SCIMBadSyntaxException(string.Format(Global.AttributeMissing, StandardSCIMRepresentationAttributes.Schemas)); } if (!requestedSchemas.SequenceEqual(new List <string> { StandardSchemas.PatchRequestSchemas.Id })) { throw new SCIMBadSyntaxException(Global.SchemasNotRecognized); } if (patchRepresentation.Operations == null) { throw new SCIMBadSyntaxException(string.Format(Global.AttributeMissing, StandardSCIMRepresentationAttributes.Operations)); } }
public PatchRepresentationCommand(string id, string resourceType, PatchRepresentationParameter patchRepresentation, string location) { Id = id; ResourceType = resourceType; PatchRepresentation = patchRepresentation; Location = location; }
protected async Task <IActionResult> InternalPatch(string id, PatchRepresentationParameter patchRepresentation) { _logger.LogInformation(string.Format(Global.PatchResource, id, patchRepresentation == null ? string.Empty : JsonConvert.SerializeObject(patchRepresentation))); try { var newRepresentation = await _patchRepresentationCommandHandler.Handle(new PatchRepresentationCommand(id, ResourceType, patchRepresentation, Request.GetAbsoluteUriWithVirtualPath())); var location = GetLocation(newRepresentation); var content = newRepresentation.ToResponse(location, false); if (SCIMConstants.MappingScimResourceTypeToCommonType.ContainsKey(_resourceType)) { await _busControl.Publish(new RepresentationUpdatedEvent(newRepresentation.Id, newRepresentation.Version, SCIMConstants.MappingScimResourceTypeToCommonType[_resourceType], content, _options.IncludeToken ? Request.GetToken() : string.Empty)); } return(BuildHTTPResult(HttpStatusCode.OK, location, newRepresentation.Version, content)); } catch (SCIMDuplicateAttributeException ex) { _logger.LogError(ex, ex.Message); return(this.BuildError(HttpStatusCode.NoContent, ex.Message, SCIMConstants.ErrorSCIMTypes.Uniqueness)); } catch (SCIMUniquenessAttributeException ex) { _logger.LogError(ex, ex.Message); return(this.BuildError(HttpStatusCode.Conflict, ex.Message, SCIMConstants.ErrorSCIMTypes.Uniqueness)); } catch (SCIMFilterException ex) { _logger.LogError(ex, ex.Message); return(this.BuildError(HttpStatusCode.BadRequest, ex.Message, SCIMConstants.ErrorSCIMTypes.InvalidFilter)); } catch (SCIMBadSyntaxException ex) { _logger.LogError(ex, ex.Message); return(this.BuildError(HttpStatusCode.BadRequest, ex.Message, SCIMConstants.ErrorSCIMTypes.InvalidSyntax)); } catch (SCIMNoTargetException ex) { return(this.BuildError(HttpStatusCode.BadRequest, ex.Message, SCIMConstants.ErrorSCIMTypes.NoTarget)); } catch (SCIMNotFoundException ex) { return(this.BuildError(HttpStatusCode.NotFound, ex.Message, SCIMConstants.ErrorSCIMTypes.Unknown)); } catch (Exception ex) { _logger.LogError(ex, ex.Message); return(this.BuildError(HttpStatusCode.InternalServerError, ex.ToString(), SCIMConstants.ErrorSCIMTypes.InternalServerError)); } }
protected async Task <IActionResult> InternalPatch(string id, PatchRepresentationParameter patchRepresentation) { _logger.LogInformation(string.Format(Global.PatchResource, id)); try { var newRepresentation = await _patchRepresentationCommandHandler.Handle(new PatchRepresentationCommand(id, patchRepresentation)); var location = GetLocation(newRepresentation); var content = newRepresentation.ToResponse(location, false); await _busControl.Publish(new RepresentationUpdatedEvent(newRepresentation.Id, newRepresentation.VersionNumber, _resourceType, content)); return(BuildHTTPResult(HttpStatusCode.OK, location, newRepresentation.Version, content)); } catch (SCIMFilterException ex) { _logger.LogError(ex, ex.Message); return(this.BuildError(HttpStatusCode.BadRequest, ex.Message, SCIMConstants.ErrorSCIMTypes.InvalidFilter)); } catch (SCIMBadSyntaxException ex) { _logger.LogError(ex, ex.Message); return(this.BuildError(HttpStatusCode.BadRequest, ex.Message, SCIMConstants.ErrorSCIMTypes.InvalidSyntax)); } catch (SCIMNoTargetException ex) { return(this.BuildError(HttpStatusCode.BadRequest, ex.Message, SCIMConstants.ErrorSCIMTypes.NoTarget)); } catch (SCIMNotFoundException ex) { return(this.BuildError(HttpStatusCode.NotFound, ex.Message, SCIMConstants.ErrorSCIMTypes.Unknown)); } catch (Exception ex) { _logger.LogError(ex, ex.Message); return(this.BuildError(HttpStatusCode.InternalServerError, ex.ToString(), SCIMConstants.ErrorSCIMTypes.InternalServerError)); } }
public PatchRepresentationCommand(string id, PatchRepresentationParameter patchRepresentation) { Id = id; PatchRepresentation = patchRepresentation; }
public virtual Task <IActionResult> Patch(string id, [FromBody] PatchRepresentationParameter patchRepresentation) { return(InternalPatch(id, patchRepresentation)); }