Exemplo n.º 1
0
        public static JToken FormToJson(this IOwinRequest req)
        {
            var r    = req.ReadFormAsync().Result;
            var json = JsonConvert.SerializeObject(r.ToDictionary(pair => pair.Key, pair => pair.Value));

            return(JToken.Parse(json));
        }
        async Task <ConsentAnswer> TryGetConsentAnswerAsync(IOwinRequest request)
        {
            ConsentAnswer consentAnswer;

            if (request.IsPost())
            {
                IFormCollection formCollection = await request.ReadFormAsync();

                string consent = formCollection.Get(_options.HandleConsentOptions.ConsentParameterName);

                consentAnswer = ConsentAnswer.TryParse(consent);
            }
            else if (request.IsGet())
            {
                string consent = request.Query.Get(_options.HandleConsentOptions.ConsentParameterName);

                consentAnswer = ConsentAnswer.TryParse(consent);
            }
            else
            {
                consentAnswer = ConsentAnswer.InvalidMethod;
            }

            return(consentAnswer);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Returns True if the <see cref="IOwinRequest"/> contains an LTI request that requires authentication.
        /// </summary>
        /// <param name="request">The <see cref="IOwinRequest"/> to examine.</param>
        /// <returns>True if the request contains an LTI request that requires authentication.</returns>
        public static async Task <bool> IsAuthenticatedLtiRequestAsync(this IOwinRequest request)
        {
            // All LTI 1.x communication is handled with HTTP POST
            if (!request.Method.Equals(WebRequestMethods.Http.Post))
            {
                return(false);
            }

            // All LTI requests should contain content and specify ContentType
            if (string.IsNullOrEmpty(request.ContentType))
            {
                return(false);
            }

            // LTI launch and content item requests are sent as form posts
            if (request.ContentType.Equals("application/x-www-form-urlencoded"))
            {
                var form = await request.ReadFormAsync();

                var messageType = form[LtiConstants.LtiMessageTypeParameter];
                return(!string.IsNullOrWhiteSpace(messageType));
            }

            // LTI Outcome requests and responses are sent as Plain Old XML
            if (request.ContentType.Equals("application/xml"))
            {
                return(OutcomesClient.IsLtiOutcomesRequest(request.Body));
            }

            // Tool Consumer Profile requests and responses do not need authentication
            return(false);
        }
Exemplo n.º 4
0
        private HttpRequestParams _getHttpRequestParams(IOwinRequest request)
        {
            var t = request.ReadFormAsync();

            t.Wait();

            return(new HttpRequestParams(request.Query, t.Result));
        }
        internal static async Task <IFormCollection> ReadFormFromBeginningAsync(this IOwinRequest request)
        {
            request.Body.Seek(0L, SeekOrigin.Begin);
            var form = await request.ReadFormAsync();

            request.Body.Seek(0L, SeekOrigin.Begin);

            return(form);
        }
Exemplo n.º 6
0
        public static async Task <Dictionary <string, string> > GetBodyParameters(this IOwinRequest request)
        {
            var dictionary     = new Dictionary <string, string>(StringComparer.CurrentCultureIgnoreCase);
            var formCollection = await request.ReadFormAsync().ConfigureAwait(false);

            foreach (var pair in formCollection)
            {
                var value = GetJoinedValue(pair.Value);
                dictionary.Add(pair.Key, value);
            }

            return(dictionary);
        }
Exemplo n.º 7
0
        /// <summary>
        ///     Gets the form body request parameters.
        /// </summary>
        /// <param name="request">Owin Request.</param>
        /// <returns>Dictionary of form body parameters.</returns>
        public static Dictionary <string, string> GetBodyParameters(this IOwinRequest request)
        {
            var dictionary         = new Dictionary <string, string>(StringComparer.CurrentCultureIgnoreCase);
            var formCollectionTask = request.ReadFormAsync();

            formCollectionTask.Wait();
            foreach (var pair in formCollectionTask.Result)
            {
                var value = GetJoinedValue(pair.Value);
                dictionary.Add(pair.Key, value);
            }

            return(dictionary);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Parse the <see cref="IOwinRequest"/> into an <see cref="ILtiRequest"/>.
        /// </summary>
        /// <param name="request">The <see cref="IOwinRequest"/> to parse.</param>
        /// <returns>The <see cref="ILtiRequest"/>.</returns>
        public static async Task <ILtiRequest> ParseLtiRequestAsync(this IOwinRequest request)
        {
            var ltiRequest = new LtiRequest(null)
            {
                Url        = request.Uri,
                HttpMethod = request.Method
            };

            // LTI launch and content item requests are sent as form posts
            if (request.ContentType.Equals("application/x-www-form-urlencoded"))
            {
                var form = await request.ReadFormAsync();

                foreach (var pair in form)
                {
                    ltiRequest.Parameters.Add(pair.Key, string.Join(",", pair.Value));
                }
                return(ltiRequest);
            }

            // LTI Outcome requests and responses are sent as Plain Old XML
            if (request.ContentType.Equals("application/xml"))
            {
                using (var ms = new MemoryStream())
                {
                    try
                    {
                        await request.Body.CopyToAsync(ms);

                        using (var reader = new StreamReader(ms))
                        {
                            ltiRequest.ImsxPoxEnvelope = await reader.ReadToEndAsync();
                        }
                    }
                    finally
                    {
                        if (request.Body.CanSeek)
                        {
                            request.Body.Position = 0;
                        }
                    }
                }
                var authorizationHeader = request.GetAuthorizationHeader();
                ltiRequest.Parameters.Add(authorizationHeader.Parameters);
                return(ltiRequest);
            }
            return(ltiRequest);
        }
        protected internal async Task <Dictionary <string, string[]> > GetRequestParametersAsync(IOwinRequest request)
        {
            Dictionary <string, string[]> parameters = new Dictionary <string, string[]>();
            var query = request.Query;

            foreach (var p in query)
            {
                parameters.Add(p.Key, p.Value);
            }

            if (HasFormContentType(request))
            {
                var formData = await request.ReadFormAsync();

                foreach (var p in formData)
                {
                    parameters.Add(p.Key, p.Value);
                }
            }

            return(parameters);
        }
Exemplo n.º 10
0
        public static async Task <IDictionary <string, string> > GetBodyParameters(IOwinRequest request)
        {
            var dictionary = new Dictionary <string, string>(StringComparer.CurrentCultureIgnoreCase);

            if (request.ContentType != "application/json")
            {
                var formCollectionTask = await request.ReadFormAsync();

                foreach (var pair in formCollectionTask)
                {
                    var value = GetJoinedValue(pair.Value);
                    dictionary.Add(pair.Key, value);
                }
            }
            else
            {
                using (var stream = new MemoryStream())
                {
                    byte[] buffer = new byte[2048]; // read in chunks of 2KB
                    int    bytesRead;
                    while ((bytesRead = request.Body.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        stream.Write(buffer, 0, bytesRead);
                    }
                    var result = Encoding.UTF8.GetString(stream.ToArray());
                    // TODO: do something with the result
                    var dict = Newtonsoft.Json.JsonConvert.DeserializeObject <Dictionary <string, object> >(result);

                    foreach (var pair in dict)
                    {
                        string value = (pair.Value is string) ? Convert.ToString(pair.Value) : Newtonsoft.Json.JsonConvert.SerializeObject(pair.Value);
                        dictionary.Add(pair.Key, value);
                    }
                }
            }

            return(dictionary);
        }
Exemplo n.º 11
0
 public Task <IFormCollection> ReadFormAsync()
 {
     return(_request.ReadFormAsync());
 }
Exemplo n.º 12
0
 public ExpressRequest(IOwinRequest request)
 {
     _request = request;
     Form     = request.ReadFormAsync().Result;
 }
        async Task<ConsentAnswer> TryGetConsentAnswerAsync(IOwinRequest request)
        {
            ConsentAnswer consentAnswer;

            if (request.IsPost())
            {
                IFormCollection formCollection = await request.ReadFormAsync();

                string consent = formCollection.Get(_options.HandleConsentOptions.ConsentParameterName);

                consentAnswer = ConsentAnswer.TryParse(consent);
            }
            else if (request.IsGet())
            {
                string consent = request.Query.Get(_options.HandleConsentOptions.ConsentParameterName);

                consentAnswer = ConsentAnswer.TryParse(consent);
            }
            else
            {
                consentAnswer = ConsentAnswer.InvalidMethod;
            }

            return consentAnswer;
        }