A StatusCodeResult that when executed will produce a Bad Request (400) response.
Inheritance: Microsoft.AspNetCore.Mvc.StatusCodeResult
示例#1
0
        public void BadRequestResult_InitializesStatusCode()
        {
            // Arrange & act
            var badRequest = new BadRequestResult();

            // Assert
            Assert.Equal(StatusCodes.Status400BadRequest, badRequest.StatusCode);
        }
示例#2
0
        public void BadRequestResult_InitializesStatusCode()
        {
            // Arrange & act
            var badRequest = new BadRequestResult();

            // Assert
            Assert.Equal(StatusCodes.Status400BadRequest, badRequest.StatusCode);
        }
 public IActionResult AddAccessKey([FromBody] ServiceModels.AccessKey accessKey)
 {
     IActionResult result;
     if (accessKey == null)
         result = new BadRequestResult();
     else
     {
         Model.AccessKey item = accessKey.ToModel();
         item.OrganisationID = User.GetOrganisationID();
         BusinessLogicFactory.AccessKeys.SaveAccessKey(item, Model.TObjectState.Add);
         ServiceModels.AccessKey response = new ServiceModels.AccessKey(item);
         response.Secret = item.Secret;
         string rootUrl = Request.GetRootUrl();
         response.AddSelfLink(string.Concat(rootUrl, "/accesskeys/", response.Key), true, true);
         result = Request.GetObjectResult(response, HttpStatusCode.Created);
     }
     return result;
 }
        public IActionResult AddObjectDefinitions()
        {
            IActionResult result;

            try
            {
                if (Request.ContentType.StartsWith(typeof(ServiceModels.ObjectDefinitions).GetContentType()))
                {
                    ServiceModels.ObjectDefinitions objectDefinitions = Request.Deserialise<ServiceModels.ObjectDefinitions>();
                    result = AddObjectDefinitions(objectDefinitions);
                }
                else
                {
                    ObjectDefinition objectDefinition = Request.Deserialise<ObjectDefinition>();
                    result = AddObjectDefinition(objectDefinition);
                }
            }
            catch (BadRequestException)
            {
                result = new BadRequestResult();
            }

            return result;
        }
 public IActionResult GetObjectType(string clientID, string definitionID)
 {
     IActionResult result = new NotFoundResult();
     Guid clientIDGuid;
     Guid definitionIDGuid;
     if (StringUtils.GuidTryDecode(clientID, out clientIDGuid) && StringUtils.GuidTryDecode(definitionID, out definitionIDGuid))
     {
         Model.Client client = BusinessLogicFactory.Clients.GetClient(clientIDGuid);
         if ((client != null) && (client.SupportedTypes != null))
         {
             Model.ObjectDefinition definition = BusinessLogicFactory.ObjectDefinitions.GetObjectDefinition(User.GetOrganisationID(), definitionIDGuid);
             if (definition != null)
             {
                 Model.ObjectType objectType = client.SupportedTypes.GetObjectType(int.Parse(definition.ObjectID));
                 if (objectType != null)
                 {
                     ServiceModels.ObjectType response = new ServiceModels.ObjectType(objectType);
                     string rootUrl = Request.GetRootUrl();
                     response.AddSelfLink(string.Concat(rootUrl, "/clients/", clientID, "/objecttypes/", definitionID), false, false);
                     response.AddLink<ObjectDefinition>(Request, "definition", string.Concat(rootUrl, "/objecttypes/definitions/", definitionID));
                     response.AddLink("instances", string.Concat(rootUrl, "/clients/", clientID, "/objecttypes/", definitionID, "/instances"), Request.GetContentType(definition.MIMEType));
                     result = Request.GetObjectResult(response);
                 }
             }
         }
     }
     else
     {
         result = new BadRequestResult();
     }
     return result;
 }
        public IActionResult GetObjectInstances(string clientID, string definitionID)
        {
            IActionResult result;

            Guid definitionIDGuid, clientIDGuid;
            if (StringUtils.GuidTryDecode(definitionID, out definitionIDGuid) && StringUtils.GuidTryDecode(clientID, out clientIDGuid))
            {
                int organisationID = User.GetOrganisationID();
                Model.ObjectDefinition definition = BusinessLogicFactory.ObjectDefinitions.GetObjectDefinition(organisationID, definitionIDGuid);
                if (definition != null)
                {
                    Model.Client client = BusinessLogicFactory.Clients.GetClient(clientIDGuid);
                    if (client != null)
                    {
                        List<Model.Object> instances = BusinessLogicFactory.Clients.GetObjects(client, definition.ObjectDefinitionID);
                        if (instances != null)
                        {
                            ObjectInstances response = new ObjectInstances(definition);
                            string rootUrl = Request.GetRootUrl();
                            string instancesUrl = string.Concat(rootUrl, "/clients/", clientID, "/objecttypes/", StringUtils.GuidEncode(definition.ObjectDefinitionID), "/instances");

                            response.AddLink("add", instancesUrl, "");

                            response.PageInfo = Request.GetPageInfo(instances.Count);
                            int endIndex = response.PageInfo.StartIndex + response.PageInfo.ItemsCount;
                            for (int index = response.PageInfo.StartIndex; index < endIndex; index++)
                            {
                                ObjectInstance instance = new ObjectInstance(definition, instances[index]);
                                string instanceUrl = string.Concat(instancesUrl, "/", instances[index].InstanceID);
                                AddObjectInstanceLinks(Request, definition, instance, instanceUrl);
                                response.Add(instance);
                            }
                            result = response.GetAction();
                        }
                        else
                        {
                            result = new NotFoundResult();
                        }
                    }
                    else
                    {
                        result = new NotFoundResult();
                    }
                }
                else
                {
                    result = new NotFoundResult();
                }
            }
            else
            {
                result = new BadRequestResult();
            }
            return result;
        }
        public IActionResult GetObjectInstance(string clientID, string definitionID, string instanceID)
        {
            IActionResult result;

            Guid definitionIDGuid, clientIDGuid;
            if (StringUtils.GuidTryDecode(definitionID, out definitionIDGuid) && StringUtils.GuidTryDecode(clientID, out clientIDGuid))
            {
                int organisationID = User.GetOrganisationID();
                Model.ObjectDefinition definition = BusinessLogicFactory.ObjectDefinitions.GetObjectDefinition(organisationID, definitionIDGuid);
                if (definition != null)
                {
                    Model.Client client = BusinessLogicFactory.Clients.GetClient(clientIDGuid);
                    if (client != null)
                    {
                        Model.Object instance = BusinessLogicFactory.Clients.GetObject(client, definition.ObjectDefinitionID, instanceID);
                        if (instance != null)
                        {
                            ServiceModels.ObjectInstance response = new ServiceModels.ObjectInstance(definition, instance);
                            string rootUrl = Request.GetRootUrl();
                            string instanceUrl = string.Concat(rootUrl, "/clients/", clientID, "/objecttypes/", StringUtils.GuidEncode(definition.ObjectDefinitionID), "/instances/", instanceID);

                            AddObjectInstanceLinks(Request, definition, response, instanceUrl);
                            result = response.GetAction();
                        }
                        else
                        {
                            result = new NotFoundResult();
                        }
                    }
                    else
                    {
                        result = new NotFoundResult();
                    }
                }
                else
                {
                    result = new NotFoundResult();
                }
            }
            else
            {
                result = new BadRequestResult();
            }
            return result;
        }
 public IActionResult RemoveObjectDefinition(string id)
 {
     IActionResult result;
     Guid objectDefinitionID;
     if (StringUtils.GuidTryDecode(id, out objectDefinitionID))
     {
         int organisationID = User.GetOrganisationID();
         Model.ObjectDefinition objectDefinition = BusinessLogicFactory.ObjectDefinitions.GetObjectDefinition(organisationID, objectDefinitionID);
         if (objectDefinition == null)
             result = new NotFoundResult();
         else
         {
             if (!objectDefinition.OrganisationID.HasValue && (organisationID != 0))
                 result = new StatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
             else
             {
                 BusinessLogicFactory.ObjectDefinitions.SaveObjectDefinition(objectDefinition, Model.TObjectState.Delete);
                 result = new NoContentResult();
             }
         }
     }
     else
         result = new BadRequestResult();
     return result;
 }
        public IActionResult UpdateObjectInstance(string clientID, string definitionID, string instanceID)
        {
            IActionResult result;

            Guid definitionIDGuid, clientIDGuid;
            if (StringUtils.GuidTryDecode(definitionID, out definitionIDGuid) && StringUtils.GuidTryDecode(clientID, out clientIDGuid))
            {
                Model.Client client = BusinessLogicFactory.Clients.GetClient(clientIDGuid);
                int organisationID = User.GetOrganisationID();
                Model.ObjectDefinition definition = BusinessLogicFactory.ObjectDefinitions.GetObjectDefinition(organisationID, definitionIDGuid);
                if (definition != null)
                {
                    // TODO: add error handling around deserialisation.
                    List<Model.Property> executeProperties = new List<Model.Property>();
                    Model.Object lwm2mObject = new ServiceModels.ObjectInstance(definition, Request).Resource;
                    lwm2mObject.InstanceID = instanceID;
                    int index = 0;
                    while (index < lwm2mObject.Properties.Count)
                    {
                        Model.PropertyDefinition propertyDefinition = definition.GetProperty(lwm2mObject.Properties[index].PropertyDefinitionID);
                        if (propertyDefinition.Access == Model.TAccessRight.Execute)
                        {
                            executeProperties.Add(lwm2mObject.Properties[index]);
                            lwm2mObject.Properties.RemoveAt(index);
                        }
                        else
                        {
                            index++;
                        }
                    }
                    if (lwm2mObject.Properties.Count > 0)
                        BusinessLogicFactory.Clients.SaveObject(client, lwm2mObject, Model.TObjectState.Update);
                    if (executeProperties.Count > 0)
                    {
                        BusinessLogicFactory.Clients.Execute(client, lwm2mObject, executeProperties);
                    }
                    result = new NoContentResult();
                }
                else
                {
                    result = new BadRequestResult();
                }
            }
            else
            {
                result = new BadRequestResult();
            }
            return result;
        }
        public IActionResult GetSubscriptions(string clientID, string definitionID, string instanceID)
        {
            Guid clientIDGuid = Guid.Empty;
            Guid definitionIDGuid = Guid.Empty;
            IActionResult result = null;

            if (clientID != null && !StringUtils.GuidTryDecode(clientID, out clientIDGuid))
            {
                result = new BadRequestResult();
            }
            else if (clientID != null && BusinessLogicFactory.Clients.GetClient(clientIDGuid) == null)
            {
                result = new NotFoundResult();
            }
            else if (definitionID != null && !StringUtils.GuidTryDecode(definitionID, out definitionIDGuid))
            {
                result = new BadRequestResult();
            }
            else if (definitionID != null && BusinessLogicFactory.ObjectDefinitions.GetObjectDefinition(User.GetOrganisationID(), definitionIDGuid) == null)
            {
                result = new NotFoundResult();
            }
            else
            {
                string rootUrl = Request.GetRootUrl();
                if (clientID != null)
                    rootUrl = string.Concat(rootUrl, "/clients/", clientID);
                if (definitionID != null)
                    rootUrl = string.Concat(rootUrl, "/objecttypes/", definitionID);
                if (instanceID != null)
                    rootUrl = string.Concat(rootUrl, "/instances/", instanceID);

                ServiceModels.Subscriptions response = new ServiceModels.Subscriptions();
                response.AddLink("add", string.Concat(rootUrl, "/subscriptions"), null);

                List<Model.Subscription> subscriptions = null;
                if (clientID == null)
                {
                    int organisationID = User.GetOrganisationID();
                    subscriptions = BusinessLogicFactory.Subscriptions.GetSubscriptions(organisationID);
                }
                else
                {
                    List<Model.Subscription> unfilteredSubscriptions = BusinessLogicFactory.Subscriptions.GetSubscriptions(clientIDGuid);

                    if (definitionID != null)
                    {
                        subscriptions = new List<Model.Subscription>();

                        foreach (Model.Subscription subscription in unfilteredSubscriptions)
                        {
                            if (definitionID == null || definitionIDGuid == subscription.ObjectDefinitionID)
                            {
                                if (instanceID == null || instanceID.Equals(subscription.ObjectID))
                                {
                                    subscriptions.Add(subscription);
                                }
                            }
                        }
                    }
                    else
                    {
                        subscriptions = unfilteredSubscriptions;
                    }
                }

                response.PageInfo = Request.GetPageInfo(subscriptions.Count);
                int endIndex = response.PageInfo.StartIndex + response.PageInfo.ItemsCount;
                for (int index = response.PageInfo.StartIndex; index < endIndex; index++)
                {
                    ServiceModels.Subscription subscription = new ServiceModels.Subscription(subscriptions[index]);
                    subscription.AddSelfLink(string.Concat(Request.GetRootUrl(), "/subscriptions/", StringUtils.GuidEncode(subscriptions[index].SubscriptionID)), true, true);
                    response.Add(subscription);
                }
                result = Request.GetObjectResult(response);
            }
            return result;
        }
 public IActionResult GetSubscription(string subscriptionID)
 {
     IActionResult result;
     Guid subscriptionIDGuid;
     if (StringUtils.GuidTryDecode(subscriptionID, out subscriptionIDGuid))
     {
         Model.Subscription subscription = BusinessLogicFactory.Subscriptions.GetSubscription(subscriptionIDGuid);
         if (subscription == null)
             result = new NotFoundResult();
         else
         {
             ServiceModels.Subscription response = new ServiceModels.Subscription(subscription);
             string rootUrl = Request.GetRootUrl();
             response.AddSelfLink(string.Concat(rootUrl, "/subscriptions/", StringUtils.GuidEncode(subscription.SubscriptionID)), true, true);
             result = Request.GetObjectResult(response);
         }
     }
     else
     {
         result = new BadRequestResult();
     }
     return result;
 }
 public IActionResult GetObjectDefinition(string id)
 {
     IActionResult result;
     Guid objectDefinitionID;
     if (StringUtils.GuidTryDecode(id, out objectDefinitionID))
     {
         int organisationID = User.GetOrganisationID();
         Model.ObjectDefinition objectDefinition = BusinessLogicFactory.ObjectDefinitions.GetObjectDefinition(organisationID, objectDefinitionID);
         if (objectDefinition == null)
             result = new NotFoundResult();
         else
         {
             ServiceModels.ObjectDefinition response = new ServiceModels.ObjectDefinition(objectDefinition);
             string rootUrl = Request.GetRootUrl();
             if (organisationID == 0)
                 response.AddSelfLink(string.Concat(rootUrl, "/objecttypes/definitions/", response.ObjectDefinitionID), true, true);
             else
                 response.AddSelfLink(string.Concat(rootUrl, "/objecttypes/definitions/", response.ObjectDefinitionID), objectDefinition.OrganisationID.HasValue, objectDefinition.OrganisationID.HasValue);
             result = Request.GetObjectResult(response);
         }
     }
     else
         result = new BadRequestResult();
     return result;
 }
 private IActionResult AddObjectDefinitions(ServiceModels.ObjectDefinitions objectDefinitions)
 {
     IActionResult result;
     if (objectDefinitions == null || objectDefinitions.Items == null)
         result = new BadRequestResult();
     else
     {
         List<Model.ObjectDefinition> items = new List<Model.ObjectDefinition>();
         foreach (ServiceModels.ObjectDefinition item in objectDefinitions.Items)
         {
             Model.ObjectDefinition objectDefinition = item.ToModel();
             objectDefinition.OrganisationID = User.GetOrganisationID();
             items.Add(objectDefinition);
         }
         try
         {
             BusinessLogicFactory.ObjectDefinitions.SaveObjectDefinitions(items, Model.TObjectState.Add);
             string rootUrl = Request.GetRootUrl();
             ResourcesCreated response = new ResourcesCreated();
             foreach (Model.ObjectDefinition item in items)
             {
                 ResourceCreated resourceCreated = new ResourceCreated();
                 resourceCreated.ID = StringUtils.GuidEncode(item.ObjectDefinitionID);
                 resourceCreated.AddSelfLink(string.Concat(rootUrl, "/objecttypes/definitions/", resourceCreated.ID), false, false);
                 response.Add(resourceCreated);
             }
             result = Request.GetObjectResult(response, System.Net.HttpStatusCode.Created);
         }
         catch (ConflictException)
         {
             result = new StatusCodeResult((int)HttpStatusCode.Conflict);
         }
     }
     return result;
 }
 public IActionResult UpdateObjectDefinition(string id, [FromBody] ServiceModels.ObjectDefinition objectDefinition)
 {
     IActionResult result;
     Guid objectDefinitionID;
     if (StringUtils.GuidTryDecode(id, out objectDefinitionID))
     {
         int organisationID = User.GetOrganisationID();
         Model.ObjectDefinition existingObjectDefinition = BusinessLogicFactory.ObjectDefinitions.GetObjectDefinition(organisationID, objectDefinitionID);
         if (existingObjectDefinition == null)
             result = new NotFoundResult();
         else
         {
             if (!existingObjectDefinition.OrganisationID.HasValue && (organisationID != 0))
                 result = new StatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
             else
             {
                 Model.ObjectDefinition updatedObjectDefinition = objectDefinition.ToModel();
                 updatedObjectDefinition.OrganisationID = User.GetOrganisationID();
                 BusinessLogicFactory.ObjectDefinitions.SaveObjectDefinition(updatedObjectDefinition, Model.TObjectState.Update);
                 result = new NoContentResult();
             }
         }
     }
     else
         result = new BadRequestResult();
     return result;
 }
        public IActionResult GetObjectTypes(string clientID)
        {
            IActionResult result;
            Guid clientIDGuid;
            if (StringUtils.GuidTryDecode(clientID, out clientIDGuid))
            {
                Model.Client client = BusinessLogicFactory.Clients.GetClient(clientIDGuid);
                if (client != null)
                {
                    ServiceModels.ObjectTypes response = new ServiceModels.ObjectTypes();
                    string rootUrl = Request.GetRootUrl();

                    if (client.SupportedTypes != null)
                    {
                        Model.ObjectDefinitionLookups definitions = BusinessLogicFactory.ObjectDefinitions.GetLookups();

                        response.PageInfo = Request.GetPageInfo(client.SupportedTypes.Count);
                        int endIndex = response.PageInfo.StartIndex + response.PageInfo.ItemsCount;
                        for (int index = response.PageInfo.StartIndex; index < endIndex; index++)
                        {
                            ServiceModels.ObjectType objectType = new ServiceModels.ObjectType(client.SupportedTypes[index]);
                            if (definitions != null)
                            {
                                Model.ObjectDefinition definition = definitions.GetObjectDefinition(User.GetOrganisationID(), objectType.ObjectTypeID);
                                if (definition != null)
                                {
                                    objectType.AddSelfLink(string.Concat(rootUrl, "/clients/", clientID, "/objecttypes/", StringUtils.GuidEncode(definition.ObjectDefinitionID)), false, false);
                                    objectType.AddLink<ObjectDefinition>(Request, "definition", string.Concat(rootUrl, "/objecttypes/definitions/", StringUtils.GuidEncode(definition.ObjectDefinitionID)));
                                    objectType.AddLink("instances", string.Concat(rootUrl, "/clients/", clientID, "/objecttypes/", StringUtils.GuidEncode(definition.ObjectDefinitionID), "/instances"), Request.GetContentType(definition.MIMEType));
                                }
                            }
                            response.Add(objectType);
                        }
                    }
                    result = Request.GetObjectResult(response);
                }
                else
                {
                    result = new NotFoundResult();
                }
            }
            else
            {
                result = new BadRequestResult();
            }

            return result;
        }
        public IActionResult RemoveObjectInstance(string clientID, string definitionID, string instanceID)
        {
            IActionResult result;

            Guid definitionIDGuid, clientIDGuid;
            if (StringUtils.GuidTryDecode(definitionID, out definitionIDGuid) && StringUtils.GuidTryDecode(clientID, out clientIDGuid))
            {
                int organisationID = User.GetOrganisationID();
                Model.ObjectDefinition definition = BusinessLogicFactory.ObjectDefinitions.GetObjectDefinition(organisationID, definitionIDGuid);
                if (definition != null)
                {
                    Model.Client client = BusinessLogicFactory.Clients.GetClient(clientIDGuid);
                    if (client != null)
                    {
                        Model.Object instance = BusinessLogicFactory.Clients.GetObject(client, definition.ObjectDefinitionID, instanceID);
                        if (instance != null)
                        {
                            BusinessLogicFactory.Clients.SaveObject(client, instance, Model.TObjectState.Delete);
                            result = new NoContentResult();
                        }
                        else
                        {
                            result = new NotFoundResult();
                        }
                    }
                    else
                    {
                        result = new NotFoundResult();
                    }
                }
                else
                {
                    result = new NotFoundResult();
                }
            }
            else
            {
                result = new BadRequestResult();
            }
            return result;
        }
 public IActionResult RemoveSubscription(string subscriptionID)
 {
     IActionResult result;
     Guid subscriptionIDGuid;
     if (StringUtils.GuidTryDecode(subscriptionID, out subscriptionIDGuid))
     {
         Model.Subscription subscription = BusinessLogicFactory.Subscriptions.GetSubscription(subscriptionIDGuid);
         if (subscription == null)
             result = new NotFoundResult();
         else
         {
             BusinessLogicFactory.Subscriptions.SaveSubscription(subscription, TObjectState.Delete);
             result = new NoContentResult();
         }
     }
     else
     {
         result = new BadRequestResult();
     }
     return result;
 }
        public IActionResult AddObjectInstance(string clientID, string definitionID)
        {
            IActionResult result;

            Guid definitionIDGuid, clientIDGuid;
            if (StringUtils.GuidTryDecode(definitionID, out definitionIDGuid) && StringUtils.GuidTryDecode(clientID, out clientIDGuid))
            {
                Model.Client client = BusinessLogicFactory.Clients.GetClient(clientIDGuid);
                int organisationID = User.GetOrganisationID();
                Model.ObjectDefinition definition = BusinessLogicFactory.ObjectDefinitions.GetObjectDefinition(organisationID, definitionIDGuid);
                if (definition != null)
                {
                    // TODO: add error handling around deserialisation.
                    // TODO: could lwm2mObject.instanceID be an optional parameter, allowing a web client to specify?
                    Model.Object lwm2mObject = new ServiceModels.ObjectInstance(definition, Request).Resource;
                    BusinessLogicFactory.Clients.SaveObject(client, lwm2mObject, Model.TObjectState.Add);

                    ServiceModels.ResourceCreated response = new ServiceModels.ResourceCreated();
                    response.ID = lwm2mObject.InstanceID;
                    string rootUrl = Request.GetRootUrl();
                    response.AddSelfLink(string.Concat(rootUrl, "/clients/", clientID, "/objecttypes/", definitionID, "/instances/", response.ID), true, true);
                    result = Request.GetObjectResult(response, System.Net.HttpStatusCode.Created);
                }
                else
                {
                    result = new BadRequestResult();
                }
            }
            else
            {
                result = new BadRequestResult();
            }
            return result;
        }
        public IActionResult UpdateSubscription(string subscriptionID, [FromBody] ServiceModels.Subscription subscription)
        {
            IActionResult result;
            Guid subscriptionIDGuid;
            if (StringUtils.GuidTryDecode(subscriptionID, out subscriptionIDGuid))
            {
                Model.Subscription subscriptionToUpdate = BusinessLogicFactory.Subscriptions.GetSubscription(subscriptionIDGuid);
                if (subscriptionToUpdate == null)
                    result = new NotFoundResult();
                else
                {
                    subscription.UpdateModel(subscriptionToUpdate);

                    if (!ExistingSubscriptionMatches(subscriptionToUpdate))
                    {
                        BusinessLogicFactory.Subscriptions.SaveSubscription(subscriptionToUpdate, TObjectState.Update);
                        result = new NoContentResult();
                    }
                    else
                    {
                        result = new StatusCodeResult((int)System.Net.HttpStatusCode.Conflict);
                    }
                }
            }
            else
            {
                result = new BadRequestResult();
            }
            return result;
        }
        public IActionResult CreateAccessToken([FromForm]OAuthTokenRequest tokenRequest)
        {
            IActionResult result = null;

            if (string.Compare(tokenRequest.grant_type, "password", true) == 0)
            {
                Model.AccessKey accessKey = BusinessLogicFactory.AccessKeys.GetAccessKey(tokenRequest.username);
                if (accessKey != null)
                {
                    if (string.Compare(tokenRequest.password, accessKey.Secret) == 0)
                    {
                        OAuthToken token = CreateOAuthToken(accessKey.OrganisationID);
                        result = new ObjectResult(token) { StatusCode = (int)HttpStatusCode.Created };
                    }
                    else
                    {
                        _logger.LogDebug($"Incorrect Secret for Organisation {accessKey.OrganisationID} with access key: {accessKey.Name}");
                        result = new UnauthorizedResult();
                    }
                }
                else
                {
                    _logger.LogDebug($"No organisation with key: {tokenRequest.username}");
                    result = new UnauthorizedResult();
                }
            }
            else if (string.Compare(tokenRequest.grant_type, "refresh_token", true) == 0)
            {
                OrganisationSecurityTokenHandler handler = _AuthOptions.SecurityTokenValidators.OfType<OrganisationSecurityTokenHandler>().FirstOrDefault();
                JwtSecurityToken securityToken = handler.ReadJwtToken(tokenRequest.refresh_token);

                if (securityToken != null)
                {
                    Claim organisationClaim = securityToken.Claims.ToList().Find(c => c.Type.Equals(OrganisationIdentity.OrganisationClaim));
                    Claim refreshTokenClaim = securityToken.Claims.ToList().Find(c => c.Type.Equals(RefreshTokenClaim));

                    if (organisationClaim != null && refreshTokenClaim != null && refreshTokenClaim.Value.Equals(RefreshTokenExists))
                    {
                        int organisationID;
                        if (int.TryParse(organisationClaim.Value, out organisationID) && organisationID > 0)
                        {
                            OAuthToken token = CreateOAuthToken(organisationID);
                            result = new ObjectResult(token) { StatusCode = (int)HttpStatusCode.Created };
                        }
                        else
                        {
                            _logger.LogDebug($"Failed to parse organisationID in refresh token: {tokenRequest.refresh_token}");
                            result = new BadRequestResult();
                        }
                    }
                    else
                    {
                        _logger.LogDebug($"Refresh token does not have expected claims: {tokenRequest.refresh_token}");
                        result = new BadRequestResult();
                    }
                }
                else
                {
                    _logger.LogDebug($"Invalid refresh token: {tokenRequest.refresh_token}");
                    result = new BadRequestResult();
                }
            }
            else
            {
                result = new BadRequestResult();
            }

            return result;
        }
        public IActionResult AddSubscription(string clientID, string definitionID, string instanceID, [FromBody] ServiceModels.Subscription subscription)
        {
            IActionResult result;
            if (subscription != null)
            {
                Model.Subscription item = subscription.ToModel(Request, clientID, definitionID, instanceID);
                item.OrganisationID = User.GetOrganisationID();
                item.SubscriptionID = Guid.NewGuid();

                if (!ExistingSubscriptionMatches(item))
                {
                    BusinessLogicFactory.Subscriptions.SaveSubscription(item, Model.TObjectState.Add);

                    ServiceModels.ResourceCreated response = new ServiceModels.ResourceCreated();
                    response.ID = StringUtils.GuidEncode(item.SubscriptionID);
                    string rootUrl = Request.GetRootUrl();
                    response.AddSelfLink(string.Concat(rootUrl, "/subscriptions/", response.ID), false, false);
                    result = Request.GetObjectResult(response, System.Net.HttpStatusCode.Created);
                }
                else
                {
                    result = new StatusCodeResult((int)System.Net.HttpStatusCode.Conflict);
                }
            }
            else
            {
                result = new BadRequestResult();
            }
            return result;
        }