Example #1
0
        public OicResponse CreateOrUpdate(OicRequest request, IOicResource resource)
        {
            var myResource = GetResource(request.ToUri);

            if (myResource == null)
            {
                return(OicResponseUtility.CreateMessage(OicResponseCode.NotFound, "Resource not found"));
            }

            if ((myResource.Interfaces & OicResourceInterface.ReadWrite) == OicResourceInterface.ReadWrite)
            {
                return(OicResponseUtility.CreateMessage(OicResponseCode.OperationNotAllowed, "Operation not allowed"));
            }

            if (resource == null)
            {
                return(OicResponseUtility.CreateMessage(OicResponseCode.BadRequest, "No valid OIC resource was provided"));
            }

            myResource.UpdateFields(resource);

            return(new OicResourceResponse(_configuration, _helloResource)
            {
                ResposeCode = OicResponseCode.Changed
            });
        }
Example #2
0
        public OicResponse Delete(OicRequest request)
        {
            var resource = GetResourceForPath(request);

            if (resource != null)
            {
                throw new NotImplementedException();
            }

            return(OicResponseUtility.CreateMessage(OicResponseCode.NotFound, "Not found"));
        }
Example #3
0
        public OicResponse Create(OicRequest request, IOicResource resource)
        {
            var myResource = GetResource(request.ToUri);

            if (myResource == null)
            {
                return(OicResponseUtility.CreateMessage(OicResponseCode.NotFound, "Resource not found"));
            }

            throw new NotImplementedException();
        }
Example #4
0
        public OicResponse Retrieve(OicRequest request)
        {
            var myResource = GetResource(request.ToUri);

            if (myResource == null)
            {
                return(OicResponseUtility.CreateMessage(OicResponseCode.NotFound, "Resource not found"));
            }

            return(new OicResourceResponse(_configuration, myResource)
            {
                ResposeCode = OicResponseCode.Content
            });
        }
Example #5
0
        public OicResponse Retrieve(OicRequest request)
        {
            var resource = GetResourceForPath(request);

            if (resource != null)
            {
                return new OicResourceResponse(_configuration, resource)
                       {
                           ResposeCode = OicResponseCode.Content
                       }
            }
            ;

            return(OicResponseUtility.CreateMessage(OicResponseCode.NotFound, "Not found"));
        }
    }
Example #6
0
        protected override async Task <CoapMessage> HandleRequestAsync(ICoapConnectionInformation connectionInformation, CoapMessage message)
        {
            _logger.LogDebug($"New request! {message}");

            var        response  = OicResponseUtility.CreateMessage(OicResponseCode.NotFound, "Not found");
            OicContext context   = null;
            Exception  exception = null;

            if (_options.UseCoreLink && message.GetUri().AbsolutePath.Equals("/.well-known/core", StringComparison.Ordinal))
            {
                return(GenerateCoreLinkResource(message));
            }

            try
            {
                // Create the OiCContext
                context = _application.CreateContext(new OicCoapContext(connectionInformation, message));

                await _application.ProcessRequestAsync(context);

                if (context.Response.ResposeCode != default(OicResponseCode))
                {
                    response = context.Response;
                }
                else
                {
                    // This should only occur during development.
                    var errorMessage = $"{context.GetType()}.{nameof(context.Response)}.{nameof(context.Response.ResposeCode)} was not set!";
                    _logger.LogError(errorMessage);
                    response = OicResponseUtility
                               .CreateMessage(OicResponseCode.InternalServerError, errorMessage);
                }
            }
            catch (Exception ex)
            {
                exception = ex;
                // TODO: Do we want to restrict error messages to developers/logging only?
                response = OicResponseUtility.FromException(ex);
            }
            finally
            {
                _application.DisposeContext <OicCoapContext>(context, exception);
            }

            _logger.LogDebug($"Responding with {response}");
            return(response.ToCoapMessage());
        }
Example #7
0
        public OicResponse CreateOrUpdate(OicRequest request, IOicResource resource)
        {
            var existing = GetResourceForPath(request);

            if (existing == null)
            {
                return(OicResponseUtility.CreateMessage(OicResponseCode.NotFound, "Not found"));
            }

            if (existing is OicResourceList)
            {
                throw new NotImplementedException();
            }

            ((IOicResource)existing).UpdateFields(resource);
            return(new OicResourceResponse(_configuration, existing)
            {
                ResposeCode = OicResponseCode.Changed
            });
        }
Example #8
0
        public async Task Invoke(OicContext context)
        {
            var resourceContext = new ResourceRepositoryContext(context, _options, _resourceRepository);

            if (!resourceContext.ValidatePath())
            {
                await _next(context);

                return;
            }

            OicResponse result;
            var         request = resourceContext.GetSubRequest();

            IOicResource requestResource = null;

            if (request.ContentType != OicMessageContentType.None)
            {
                if (request.Content == null)
                {
                    context.Response = OicResponseUtility.CreateMessage(OicResponseCode.BadRequest, "Content type provided with no content");
                    return;
                }

                var r = _oicConfiguration.Serialiser.Deserialise(request.Content, request.ContentType);

                if (r is OicResourceList list)
                {
                    // TODO: verify grabbing the first resource is okay and enumeration is not needed.
                    requestResource = list.First();
                }
                else
                {
                    requestResource = r as IOicResource;
                }
            }

            if (request.Operation == OicRequestOperation.Get)
            {
                result = await _resourceRepository.RetrieveAsync(request);
            }
            else if (request.Operation == OicRequestOperation.Post)
            {
                result = await _resourceRepository.CreateOrUpdateAsync(request, requestResource);
            }
            else if (request.Operation == OicRequestOperation.Put)
            {
                result = await _resourceRepository.CreateAsync(request, requestResource);
            }
            else if (request.Operation == OicRequestOperation.Delete)
            {
                result = await _resourceRepository.DeleteAsync(request);
            }
            else
            {
                result = OicResponseUtility.CreateMessage(OicResponseCode.BadRequest, "Bad request");
            }

            if (result.ResposeCode == OicResponseCode.NotFound)
            {
                await _next(context);

                return;
            }

            context.Response = result;
        }