protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { LoggingUtility log = LoggerFactory.GetLogger(); string _requestId = request.Properties["requestId"].ToString(); ErrorUtil errorUtil = new ErrorUtil(); RpcAuthenticationResponse _responseEnvelope = new RpcAuthenticationResponse(_requestId); LogObject logObject = new LogObject(); var errorResponse = new HttpResponseMessage(); var tsc = new TaskCompletionSource<HttpResponseMessage>(); //Initialize the error to 0 to be able to check later if there is any error in the request int Error = 0; if (new CommonMethods().IsLegacyFormat(request.RequestUri.OriginalString)) request = new CommonMethods().CombobulateRequest(request); AuthenticationObject authenticationObject = new CommonMethods().GetAuthenticationHeader(request); if (authenticationObject == null || authenticationObject.AuthenticationType == null || authenticationObject.ApiUser == null || authenticationObject.SharedSecret == null) { Error = ErrorKey.ERR_HUB_AUTHENTICATION_FAILED; authenticationObject = new AuthenticationObject(); } //Authenticate with pmp else { Error = PmpAuth(authenticationObject); } //The following logic has been added to enforce xml output by default if no or incompatible application value is specified in the request header var responseType = request.GetRequestContext().Url.Request.Headers.Accept.LastOrDefault(); if (responseType != null && responseType.ToString().ToLower().Equals("application/json")) request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); else request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); if (Error != 0) { _responseEnvelope.Data.Errors.Add(new ErrorObject(Error)); errorResponse = new MethodsApi().FormatRpcErrorResponse(request, HttpStatusCode.Unauthorized, _responseEnvelope); //R185 Modification logObject = new CommonMethods().Authentication_ToLogObject(_requestId, authenticationObject.ApiUser, OperationType, OperationName, authenticationObject, _responseEnvelope.Data.Errors); log.InfoJson(logObject); tsc.SetResult(errorResponse); return tsc.Task; } //Authentication succeeded...continue with the request else { // This piece of code has been added to unit test this handler // In case of success we are returning an empty RpcAuthenticationResponse if (xunit) { tsc.SetResult(new MethodsApi().FormatRpcErrorResponse(request, HttpStatusCode.OK, _responseEnvelope)); return tsc.Task; } logObject = new CommonMethods().Authentication_ToLogObject(_requestId, authenticationObject.ApiUser, OperationType, OperationName, authenticationObject, _responseEnvelope.Data.Errors); log.InfoJson(logObject); var rpcResponse = base.SendAsync(request, cancellationToken); //Check if request has missing parameters (e.g. does not specify the term id or the offer id in the url) if (rpcResponse.Result.StatusCode == HttpStatusCode.NotFound) { _responseEnvelope.Data.Errors.Add(new ErrorObject(ErrorKey.ERR_HUB_MISSING_DATA_ARGUMENTS)); //Log the error Dictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("URL", rpcResponse.Result.RequestMessage.RequestUri.PathAndQuery); log.InfoJson(new Methods().Error_ToLogObject(_requestId, authenticationObject.ApiUser, OperationType, operationName.ApiCall.ToString(), parameters, _responseEnvelope.Data.Errors)); errorResponse = new MethodsApi().FormatRpcErrorResponse(request, HttpStatusCode.NotFound, _responseEnvelope); tsc.SetResult(errorResponse); return tsc.Task; } return rpcResponse; } }
protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { LoggingUtility log = LoggerFactory.GetLogger(); ErrorUtil errorUtil = new ErrorUtil(); LogObject logObject = new LogObject(); var tsc = new TaskCompletionSource<HttpResponseMessage>(); string _requestId = request.Properties["requestId"].ToString(); ProviderAuthenticationResponse _responseEnvelope = new ProviderAuthenticationResponse(_requestId); //Initialize the error to 0 to be able to check later if there is any error in the request int Error = 0; //Get the authentication credentials AuthenticationObject authenticationObject = new CommonMethods().GetAuthenticationHeader(request); //If header does not contain the required credentials then add an error to the response envelope else if (authenticationObject == null || authenticationObject.AuthenticationType == null || authenticationObject.ApiUser == null || authenticationObject.SharedSecret == null) { Error = ErrorKey.ERR_PROVIDER_AUTHENTICATION_FAILED; authenticationObject = new AuthenticationObject(); } //Authenticate with pmp else { Error = PmpAuth(authenticationObject, _requestId); } //Error different then 0, send back the request with an error message if (Error != 0) { Dictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("ApiUser", authenticationObject.ApiUser); //Add the error in the response envelope //Edit for R184 _responseEnvelope.Data.Errors.Add(new ErrorObject(Error, parameters)); //R185 Modification //_responseEnvelope.Data.Errors.Add(new ErrorObject(Error, parameters)); //Log the error //Edit for R184 logObject = new CommonMethods().Authentication_ToLogObject(_requestId, authenticationObject.ApiUser, OperationType, OperationName, authenticationObject, _responseEnvelope.Data.Errors); //R185 Modification //logObject = new Methods().Authentication_ToLogObject(_requestId, authenticationObject.ApiUser, OperationType, OperationName, authenticationObject, _responseEnvelope.Data.Errors); log.InfoJson(logObject); var response = new MethodsApi().FormatProviderErrorResponse(request, HttpStatusCode.OK, _responseEnvelope); //Return back the results tsc.SetResult(response); return tsc.Task; } //Authentication succeeded...continue with the request else { //Authentication and authorization were successful, log the request and continue processing //Edit for R184 logObject = new CommonMethods().Authentication_ToLogObject(_requestId, authenticationObject.ApiUser, OperationType, OperationName, authenticationObject, _responseEnvelope.Data.Errors); //R185 Modification //logObject = new Methods().Authentication_ToLogObject(_requestId, authenticationObject.ApiUser, OperationType, OperationName, authenticationObject, _responseEnvelope.Data.Errors); log.InfoJson(logObject); // This piece of code has been added to unit test this handler // In case of success we are returning an empty ProviderAuthenticationResponse if (xunit) { tsc.SetResult(new MethodsApi().FormatProviderErrorResponse(request, HttpStatusCode.OK, _responseEnvelope)); return tsc.Task; } var providerResponse = base.SendAsync(request, cancellationToken); //Check if request has missing action name (e.g. does not specify the action for liveoffers) if (providerResponse.Result.StatusCode == HttpStatusCode.InternalServerError) { _responseEnvelope.Data.Errors.Add(new ErrorObject(ErrorKey.ERR_PROVIDER_MISSING_ACTION)); var response = new MethodsApi().FormatProviderErrorResponse(request, HttpStatusCode.OK, _responseEnvelope); //Log the error Dictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("URL", providerResponse.Result.RequestMessage.RequestUri.AbsolutePath); log.InfoJson(new Methods().Error_ToLogObject(_requestId, authenticationObject.ApiUser, OperationType, operationName.ApiCall.ToString(), parameters, _responseEnvelope.Data.Errors)); tsc.SetResult(response); return tsc.Task; } return providerResponse; } }