예제 #1
0
        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));
            }
        }