public StatementValidationResult GetValidationResult(string softwareStmt, string scope, LoggedInApplication loggedInApp) { if (!loggedInApp.IsProvider) { throw new BaseException("Access denied"); } // Setup response model var result = new StatementValidationResult { isSuccessfull = true, schemas = new List <SchemaValidationResult>() }; var tokenHandler = new JwtSecurityTokenHandler(); SecurityToken validatedToken; // Verify signature in jwt tokenHandler.ValidateToken(softwareStmt, TokenValidationParameters, out validatedToken); // Retrieve Jwt var jwt = (JwtSecurityToken)tokenHandler.ReadToken(softwareStmt); // Retrieve consumer application id var consumerPublicId = jwt.Payload["software_id"].ToString(); // Retrieve consumer application name var consumerAppName = jwt.Payload["client_name"].ToString(); var consumerAppPublicId = new Guid(consumerPublicId); // Get consumer application var consumerApp = _applications.FirstOrDefault(i => i.PublicID == consumerAppPublicId); // Return error if application was not found if (consumerApp == null) { var errMsg = $"Software details are not approved. Software '{consumerAppName}' with id '{consumerPublicId}' is not found"; throw new BaseException(errMsg); } // Get schemas that need to validate var requestedScope = scope.Split(' ').ToList(); // Get schemas from provided software statement var schemasFromStmt = JsonConvert.DeserializeObject <List <SoftwareStatementSchema> >(jwt.Payload["schemas"].ToString()); foreach (var schema in requestedScope) { // Get requested schema from schemas provided in software statement var schemaDetails = schemasFromStmt.FirstOrDefault(i => i.public_id == schema); // Return error if requested schema is not present in software statement if (schemaDetails == null) { var errorMessage = $" Provided schema '{schema}' does not present in software statement."; result.schemas.Add(GetErrorValidationResult(schema, errorMessage)); continue; } // Add schema validation result to response model result.schemas.Add(GetValidationResult(schemaDetails, consumerApp, loggedInApp)); } return(result); }
public HttpResponseMessage Validate([FromBody] string softwareStmt, string scope) { try { Log.Info("Validate statement [Begin]"); Log.Info($"Validate statement [scope]: {scope}"); Log.Info($"Validate statement [stmt]: {softwareStmt}"); StatementValidationResult result = _softwareStatementService.GetValidationResult(softwareStmt, scope, LoggedInApplication); Log.Info($"Validate statement [End]: result - {JsonConvert.SerializeObject(result)}"); return(Request.CreateResponse(HttpStatusCode.OK, result)); } catch (Exception ex) { Log.Error(ex); return(Request.CreateResponse(HttpStatusCode.BadRequest)); } }