Example #1
0
 internal static bool NotFound(this ResponseAdapter response)
 {
     response.SetHeader(HeaderConstants.TusResumable, HeaderConstants.TusResumableValue);
     response.SetHeader(HeaderConstants.CacheControl, HeaderConstants.NoStore);
     response.SetStatus((int)HttpStatusCode.NotFound);
     return(true);
 }
Example #2
0
        /// <summary>
        /// Handles the tus.io request.
        /// </summary>
        /// <param name="context">The IOwinContext</param>
        /// <returns></returns>
        public override async Task Invoke(IOwinContext context)
        {
            var request = new RequestAdapter
            {
                Headers    = context.Request.Headers.ToDictionary(f => f.Key, f => f.Value.ToList(), StringComparer.OrdinalIgnoreCase),
                Body       = context.Request.Body,
                Method     = context.Request.Method,
                RequestUri = context.Request.Uri
            };

            var response = new ResponseAdapter
            {
                Body      = context.Response.Body,
                SetHeader = (key, value) => context.Response.Headers[key] = value,
                SetStatus = status => context.Response.StatusCode = status
            };

            var config = await _configFactory(context.Request);

            var handled = await TusProtocolHandler.Invoke(new ContextAdapter
            {
                Request           = request,
                Response          = response,
                Configuration     = config,
                CancellationToken = context.Request.CallCancelled
            });

            if (!handled)
            {
                await Next.Invoke(context);
            }
        }
Example #3
0
        internal static async Task <bool> Error(this ResponseAdapter response, HttpStatusCode statusCode, string message)
        {
            response.SetHeader(HeaderConstants.ContentType, "text/plain");
            response.SetHeader(HeaderConstants.TusResumable, HeaderConstants.TusResumableValue);
            response.SetStatus((int)statusCode);
            var buffer = new UTF8Encoding().GetBytes(message);
            await response.Body.WriteAsync(buffer, 0, buffer.Length);

            return(true);
        }
Example #4
0
        public static ResponseAdapter RegraBuscaCarta(string cidade)
        {
            var response = new ResponseAdapter();

            response.isSucess   = !string.IsNullOrWhiteSpace(cidade);
            response.details    = string.IsNullOrWhiteSpace(cidade) ? "Informe alguma cidade" : "";
            response.returnBody = null;

            return(response);
        }
Example #5
0
        /// <summary>
        /// Handles the tus.io request.
        /// </summary>
        /// <param name="context">The HttpContext</param>
        /// <returns></returns>
        public async Task Invoke(HttpContext context)
        {
            var config = await _configFactory(context);

            if (config == null)
            {
                await _next(context);

                return;
            }

            var requestUri = GetRequestUri(context);

            if (!TusProtocolHandlerIntentBased.RequestIsForTusEndpoint(requestUri, config))
            {
                await _next(context);

                return;
            }

            var request = new RequestAdapter(config.UrlPath)
            {
                Headers =
                    context.Request.Headers.ToDictionary(
                        f => f.Key,
                        f => f.Value.ToList(),
                        StringComparer.OrdinalIgnoreCase),
                Body       = context.Request.Body,
                Method     = context.Request.Method,
                RequestUri = requestUri
            };

            var response = new ResponseAdapter
            {
                Body      = context.Response.Body,
                SetHeader = (key, value) => context.Response.Headers[key] = value,
                SetStatus = status => context.Response.StatusCode = (int)status
            };

            var handled = await TusProtocolHandlerIntentBased.Invoke(new ContextAdapter
            {
                Request           = request,
                Response          = response,
                Configuration     = config,
                CancellationToken = context.RequestAborted,
                HttpContext       = context
            });

            if (handled == ResultType.ContinueExecution)
            {
                await _next(context);
            }
        }
Example #6
0
        public static ResponseAdapter RegraCarta(Carta carta)
        {
            var validator = new CartaValidator(carta);
            var errorMsg  = validator.Validate();

            var response = new ResponseAdapter();

            response.isSucess   = errorMsg == null || errorMsg.Count == 0;
            response.details    = errorMsg;
            response.returnBody = null;

            return(response);
        }
        internal static async Task Error(this ResponseAdapter response, HttpStatusCode statusCode, string message, bool includeTusResumableHeader = true)
        {
            if (includeTusResumableHeader)
            {
                response.SetHeader(HeaderConstants.TusResumable, HeaderConstants.TusResumableValue);
            }

            response.SetStatus(statusCode);
            if (message != null)
            {
                response.SetHeader(HeaderConstants.ContentType, "text/plain");
                var buffer = _utf8Encoding.GetBytes(message);
                await response.Body.WriteAsync(buffer, 0, buffer.Length);
            }
        }
        /// <summary>
        /// Handles the tus.io request.
        /// </summary>
        /// <param name="context">The HttpContext</param>
        /// <returns></returns>
        public async Task Invoke(HttpContext context)
        {
            var request = new RequestAdapter
            {
                Headers =
                    context.Request.Headers.ToDictionary(
                        f => f.Key,
                        f => f.Value.ToList(),
                        StringComparer.OrdinalIgnoreCase),
                Body       = context.Request.Body,
                Method     = context.Request.Method,
                RequestUri = new Uri(
                    $"{context.Request.Scheme}://{context.Request.Host}{context.Request.Path}")
            };

            var response = new ResponseAdapter
            {
                Body      = context.Response.Body,
                SetHeader = (key, value) => context.Response.Headers[key] = value,
                SetStatus = status => context.Response.StatusCode = status
            };

            var config = _configFactory(context);

            var handled = await TusProtocolHandler.Invoke(
                new ContextAdapter
            {
                Request           = request,
                Response          = response,
                CancellationToken = context.RequestAborted,
                Configuration     = config,
            });


            if (!handled)
            {
                await _next(context);
            }
        }
Example #9
0
        public async Task Handles_Abrupt_Disconnects_Gracefully(string pipeline)
        {
            // This test differs in structure from the others as this test needs to test that tusdotnet handles pipeline specifics correctly.
            // We can only emulate the pipelines so this test might not be 100% accurate.
            // Also we must bypass the TestServer and go directly for the TusProtcolHandler as we would otherwise introduce yet another pipeline.

            var pipelineDetails = PipelineDisconnectEmulationDataAttribute.GetInfo(pipeline);

            var cts   = new CancellationTokenSource();
            var store = Substitute.For <ITusStore>().WithExistingFile("testfile", uploadLength: 10, uploadOffset: 5);

            var requestStream = Substitute.For <Stream>();

            requestStream.ReadAsync(Arg.Any <byte[]>(), Arg.Any <int>(), Arg.Any <int>(), Arg.Any <CancellationToken>())
            .ThrowsForAnyArgs(_ =>
            {
                if (pipelineDetails.FlagsCancellationTokenAsCancelled)
                {
                    cts.Cancel();
                }
                throw pipelineDetails.ExceptionThatIsThrown;
            });

            store.AppendDataAsync("testfile", Arg.Any <Stream>(), Arg.Any <CancellationToken>())
            .ReturnsForAnyArgs <Task <long> >(async callInfo => await callInfo.Arg <Stream>().ReadAsync(null, 0, 0, callInfo.Arg <CancellationToken>()));

            var responseHeaders = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);
            var responseStatus  = HttpStatusCode.OK;
            var response        = new ResponseAdapter
            {
                Body      = new MemoryStream(),
                SetHeader = (key, value) => responseHeaders[key] = value,
                SetStatus = status => responseStatus = status
            };

            var context = new ContextAdapter
            {
                CancellationToken = cts.Token,
                Configuration     = new DefaultTusConfiguration
                {
                    UrlPath = "/files",
                    Store   = store
                },
                Request = new RequestAdapter("/files")
                {
                    Headers = new Dictionary <string, List <string> >(StringComparer.OrdinalIgnoreCase)
                    {
                        { "Content-Type", new List <string>(1)
                          {
                              "application/offset+octet-stream"
                          } },
                        { "Tus-Resumable", new List <string>(1)
                          {
                              "1.0.0"
                          } },
                        { "Upload-Offset", new List <string>(1)
                          {
                              "5"
                          } }
                    },
                    Method     = "PATCH",
                    Body       = requestStream,
                    RequestUri = new Uri("https://localhost:8080/files/testfile")
                },
                Response = response
            };

            var handled = await TusProtocolHandlerIntentBased.Invoke(context);

            handled.ShouldBe(ResultType.StopExecution);
            responseStatus.ShouldBe(HttpStatusCode.OK);
            responseHeaders.Count.ShouldBe(0);
            response.Body.Length.ShouldBe(0);
        }