/// <summary> /// Delete a series of Job objects /// </summary> /// <param name="jobs">The job objtect templates of the Jobs to delete, each must have name and id populated. tHe name of all jobs must be the same.</param> /// <param name="zoneId">The zone in which to perform the request.</param> /// <param name="contextId">The context in which to perform the request.</param> /// <returns>A response</returns> public virtual MultipleDeleteResponse Delete(List <Job> jobs, string zoneId = null, string contextId = null) { checkRegistered(); string jobName = checkJobs(jobs, RightType.DELETE, zoneId); List <deleteIdType> deleteIds = new List <deleteIdType>(); foreach (Job job in jobs) { deleteIds.Add(new deleteIdType { id = job.Id.ToString() }); } deleteRequestType request = new deleteRequestType { deletes = deleteIds.ToArray() }; string url = GetURLPrefix(jobName) + HttpUtils.MatrixParameters(zoneId, contextId); string body = SerialiserFactory.GetXmlSerialiser <deleteRequestType>().Serialise(request); string xml = HttpUtils.PutRequest(url, RegistrationService.AuthorisationToken, body, ServiceType.FUNCTIONAL, "DELETE"); if (log.IsDebugEnabled) { log.Debug("XML from PUT (DELETE) request ..."); } if (log.IsDebugEnabled) { log.Debug(xml); } deleteResponseType updateResponseType = SerialiserFactory.GetXmlSerialiser <deleteResponseType>().Deserialise(xml); MultipleDeleteResponse updateResponse = MapperFactory.CreateInstance <deleteResponseType, MultipleDeleteResponse>(updateResponseType); return(updateResponse); }
public override IHttpActionResult Delete( deleteRequestType deleteRequest, [MatrixParameter] string[] zoneId = null, [MatrixParameter] string[] contextId = null) { return(StatusCode(HttpStatusCode.MethodNotAllowed)); }
public virtual HttpResponseMessage Delete([FromUri] string serviceName, [FromBody] deleteRequestType deleteRequest, [MatrixParameter] string[] zone = null, [MatrixParameter] string[] context = null) { string sessionToken = CheckAuthorisation(serviceName, zone, context, new Right(RightType.DELETE, RightValue.APPROVED)); IFunctionalService service = getService(serviceName); ICollection <deleteStatus> statuses = new List <deleteStatus>(); foreach (deleteIdType deleteId in deleteRequest.deletes) { try { if (SettingsManager.ProviderSettings.JobBinding && !service.IsBound(Guid.Parse(deleteId.id), getOwnerId(sessionToken))) { throw new InvalidSessionException("Request failed as job does not belong to this consumer."); } service.Delete(Guid.Parse(deleteId.id), zone: (zone == null ? null : zone[0]), context: (context == null ? null : context[0])); if (SettingsManager.ProviderSettings.JobBinding) { service.Unbind(Guid.Parse(deleteId.id)); } statuses.Add(ProviderUtils.CreateDelete(HttpStatusCode.OK, deleteId.id)); } catch (ArgumentException e) { statuses.Add(ProviderUtils.CreateDelete(HttpStatusCode.BadRequest, deleteId.id, ProviderUtils.CreateError(HttpStatusCode.BadRequest, serviceName, "Invalid argument: id=" + deleteId.id + ".\n" + e.Message))); } catch (DeleteException e) { statuses.Add(ProviderUtils.CreateDelete(HttpStatusCode.BadRequest, deleteId.id, ProviderUtils.CreateError(HttpStatusCode.BadRequest, serviceName, "Request failed for object " + serviceName + " with ID of " + deleteId.id + ".\n " + e.Message))); } catch (NotFoundException e) { statuses.Add(ProviderUtils.CreateDelete(HttpStatusCode.NotFound, deleteId.id, ProviderUtils.CreateError(HttpStatusCode.BadRequest, serviceName, "Object " + serviceName + " with ID of " + deleteId.id + " not found.\n" + e.Message))); } catch (InvalidSessionException e) { statuses.Add(ProviderUtils.CreateDelete(HttpStatusCode.BadRequest, deleteId.id, ProviderUtils.CreateError(HttpStatusCode.BadRequest, serviceName, "Request failed for object " + serviceName + " with ID of " + deleteId.id + ", job doesn't belong to this consumer.\n " + e.Message))); } catch (Exception e) { statuses.Add(ProviderUtils.CreateDelete(HttpStatusCode.InternalServerError, deleteId.id, ProviderUtils.CreateError(HttpStatusCode.BadRequest, serviceName, "Request failed for object " + serviceName + " with ID of " + deleteId.id + ".\n " + e.Message))); } } return(Request.CreateResponse <deleteResponseType>(HttpStatusCode.OK, ProviderUtils.CreateDeleteResponse(statuses.ToArray()))); }
/// <summary> /// <see cref="IConsumer{TSingle,TMultiple,TPrimaryKey}.Delete(IEnumerable{TPrimaryKey}, string, string, RequestParameter[])">Delete</see> /// </summary> public virtual MultipleDeleteResponse Delete( IEnumerable <TPrimaryKey> refIds, string zoneId = null, string contextId = null, params RequestParameter[] requestParameters) { if (!RegistrationService.Registered) { throw new InvalidOperationException("Consumer has not registered."); } List <deleteIdType> deleteIds = new List <deleteIdType>(); foreach (TPrimaryKey id in refIds) { deleteIdType deleteId = new deleteIdType { id = id.ToString() }; deleteIds.Add(deleteId); } deleteRequestType request = new deleteRequestType { deletes = deleteIds.ToArray() }; string url = new StringBuilder(EnvironmentUtils.ParseServiceUrl(EnvironmentTemplate)) .Append($"/{TypeName}s") .Append(HttpUtils.MatrixParameters(zoneId, contextId)) .Append(GenerateQueryParameterString(requestParameters)).ToString(); string requestBody = SerialiserFactory.GetSerialiser <deleteRequestType>(ContentType).Serialise(request); string responseBody = HttpUtils.PutRequest( url, RegistrationService.AuthorisationToken, requestBody, methodOverride: "DELETE", contentTypeOverride: ContentType.ToDescription(), acceptOverride: Accept.ToDescription()); if (log.IsDebugEnabled) { log.Debug("Response from PUT (DELETE) request ..."); } if (log.IsDebugEnabled) { log.Debug(responseBody); } deleteResponseType updateResponseType = SerialiserFactory.GetSerialiser <deleteResponseType>(Accept).Deserialise(responseBody); MultipleDeleteResponse updateResponse = MapperFactory.CreateInstance <deleteResponseType, MultipleDeleteResponse>(updateResponseType); return(updateResponse); }
/// <summary> /// <see cref="IConsumer{TSingle,TMultiple,TPrimaryKey}.Delete(IEnumerable{TPrimaryKey}, string, string)">Delete</see> /// </summary> public virtual MultipleDeleteResponse Delete(IEnumerable <TPrimaryKey> refIds, string zoneId = null, string contextId = null) { if (!RegistrationService.Registered) { throw new InvalidOperationException("Consumer has not registered."); } List <deleteIdType> deleteIds = new List <deleteIdType>(); foreach (TPrimaryKey id in refIds) { deleteIdType deleteId = new deleteIdType { id = id.ToString() }; deleteIds.Add(deleteId); } deleteRequestType request = new deleteRequestType { deletes = deleteIds.ToArray() }; string url = EnvironmentUtils.ParseServiceUrl(EnvironmentTemplate) + "/" + TypeName + "s" + HttpUtils.MatrixParameters(zoneId, contextId); string body = SerialiserFactory.GetXmlSerialiser <deleteRequestType>().Serialise(request); string xml = HttpUtils.PutRequest(url, RegistrationService.AuthorisationToken, body, methodOverride: "DELETE"); if (log.IsDebugEnabled) { log.Debug("XML from PUT (DELETE) request ..."); } if (log.IsDebugEnabled) { log.Debug(xml); } deleteResponseType updateResponseType = SerialiserFactory.GetXmlSerialiser <deleteResponseType>().Deserialise(xml); MultipleDeleteResponse updateResponse = MapperFactory.CreateInstance <deleteResponseType, MultipleDeleteResponse>(updateResponseType); return(updateResponse); }
/// <summary> /// <see cref="IProvider{TTSingle,TMultiple,TPrimaryKey}.Delete(deleteRequestType, string[], string[])">Delete</see> /// </summary> public virtual IHttpActionResult Delete( deleteRequestType deleteRequest, [MatrixParameter] string[] zoneId = null, [MatrixParameter] string[] contextId = null) { if (!AuthenticationService.VerifyAuthenticationHeader(Request.Headers, out string sessionToken)) { return(Unauthorized()); } // Check ACLs and return StatusCode(HttpStatusCode.Forbidden) if appropriate. if (!AuthorisationService.IsAuthorised(Request.Headers, sessionToken, $"{TypeName}s", RightType.DELETE)) { return(StatusCode(HttpStatusCode.Forbidden)); } if ((zoneId != null && zoneId.Length != 1) || (contextId != null && contextId.Length != 1)) { return(BadRequest($"Request failed for object {TypeName} as Zone and/or Context are invalid.")); } ICollection <deleteStatus> deleteStatuses = new List <deleteStatus>(); try { foreach (deleteIdType deleteId in deleteRequest.deletes) { var status = new deleteStatus { id = deleteId.id }; try { RequestParameter[] requestParameters = GetQueryParameters(Request); Service.Delete(deleteId.id, zoneId?[0], contextId?[0], requestParameters); status.statusCode = ((int)HttpStatusCode.NoContent).ToString(); } catch (ArgumentException e) { status.error = ProviderUtils.CreateError( HttpStatusCode.BadRequest, TypeName, $"Invalid argument: id={deleteId.id}.\n{e.Message}"); status.statusCode = ((int)HttpStatusCode.BadRequest).ToString(); } catch (DeleteException e) { status.error = ProviderUtils.CreateError( HttpStatusCode.BadRequest, TypeName, $"Request failed for object {TypeName} with ID of {deleteId.id}.\n{e.Message}"); status.statusCode = ((int)HttpStatusCode.BadRequest).ToString(); } catch (NotFoundException e) { status.error = ProviderUtils.CreateError( HttpStatusCode.NotFound, TypeName, $"Object {TypeName} with ID of {deleteId.id} not found.\n{e.Message}"); status.statusCode = ((int)HttpStatusCode.NotFound).ToString(); } catch (Exception e) { status.error = ProviderUtils.CreateError( HttpStatusCode.InternalServerError, TypeName, $"Request failed for object {TypeName} with ID of {deleteId.id}.\n{e.Message}"); status.statusCode = ((int)HttpStatusCode.InternalServerError).ToString(); } deleteStatuses.Add(status); } } catch (Exception) { // Need to ignore exceptions otherwise it would not be possible to return status records of processed objects. } var deleteResponse = new deleteResponseType { deletes = deleteStatuses.ToArray() }; return(Ok(deleteResponse)); }
/// <summary> /// <see cref="IProvider{TTSingle,TMultiple,TPrimaryKey}.Delete(deleteRequestType, string[], string[])">Delete</see> /// </summary> public virtual IHttpActionResult Delete(deleteRequestType deleteRequest, [MatrixParameter] string[] zoneId = null, [MatrixParameter] string[] contextId = null) { if (!authService.VerifyAuthenticationHeader(Request.Headers)) { return(Unauthorized()); } // Check ACLs and return StatusCode(HttpStatusCode.Forbidden) if appropriate. if ((zoneId != null && zoneId.Length != 1) || (contextId != null && contextId.Length != 1)) { return(BadRequest("Request failed for object " + typeof(TSingle).Name + " as Zone and/or Context are invalid.")); } IHttpActionResult result; ICollection <deleteStatus> deleteStatuses = new List <deleteStatus>(); try { foreach (deleteIdType deleteId in deleteRequest.deletes) { deleteStatus status = new deleteStatus(); status.id = deleteId.id; try { service.Delete(deleteId.id, zoneId: (zoneId == null ? null : zoneId[0]), contextId: (contextId == null ? null : contextId[0])); status.statusCode = ((int)HttpStatusCode.NoContent).ToString(); } catch (ArgumentException e) { status.error = ProviderUtils.CreateError(HttpStatusCode.BadRequest, typeof(TSingle).Name, "Invalid argument: id=" + deleteId.id + ".\n" + e.Message); status.statusCode = ((int)HttpStatusCode.BadRequest).ToString(); } catch (DeleteException e) { status.error = ProviderUtils.CreateError(HttpStatusCode.BadRequest, typeof(TSingle).Name, "Request failed for object " + typeof(TSingle).Name + " with ID of " + deleteId.id + ".\n " + e.Message); status.statusCode = ((int)HttpStatusCode.BadRequest).ToString(); } catch (NotFoundException e) { status.error = ProviderUtils.CreateError(HttpStatusCode.NotFound, typeof(TSingle).Name, "Object " + typeof(TSingle).Name + " with ID of " + deleteId.id + " not found.\n" + e.Message); status.statusCode = ((int)HttpStatusCode.NotFound).ToString(); } catch (Exception e) { status.error = ProviderUtils.CreateError(HttpStatusCode.InternalServerError, typeof(TSingle).Name, "Request failed for object " + typeof(TSingle).Name + " with ID of " + deleteId.id + ".\n " + e.Message); status.statusCode = ((int)HttpStatusCode.InternalServerError).ToString(); } deleteStatuses.Add(status); } } catch (Exception) { // Need to ignore exceptions otherwise it would not be possible to return status records of processed objects. } deleteResponseType deleteResponse = new deleteResponseType { deletes = deleteStatuses.ToArray() }; result = Ok(deleteResponse); return(result); }