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; }