public bool IsValid(IHeaderDictionary requestHeaders, string topicKey)
        {
            if (requestHeaders
                .Any(h => string.Equals("aeg-sas-key", h.Key, StringComparison.OrdinalIgnoreCase)))
            {
                if (!string.Equals(requestHeaders["aeg-sas-key"], topicKey))
                {
                    _logger.LogError("'aeg-sas-key' value did not match configured value!");
                    return(false);
                }

                _logger.LogDebug("'aeg-sas-key' header is valid");
                return(true);
            }

            if (requestHeaders
                .Any(h => string.Equals("aeg-sas-token", h.Key, StringComparison.OrdinalIgnoreCase)))
            {
                var token = requestHeaders["aeg-sas-token"];
                if (!TokenIsValid(token, topicKey))
                {
                    _logger.LogError("'aeg-sas-key' value did not match configured value!");
                    return(false);
                }

                _logger.LogDebug("'aeg-sas-token' header is valid");
                return(true);
            }

            return(false);
        }
Beispiel #2
0
        public static long DetermineByteEndFromHeaders(IHeaderDictionary headers, long fileLength)
        {
            var defaultFileLength = fileLength - 1;

            if (headers == null || !headers.Any(x => x.Key == "Range"))
            {
                return(defaultFileLength);
            }
            long?  result      = null;
            var    rangeHeader = headers["Range"];
            string rangeEnd    = null;
            var    rangeBegin  = rangeHeader.FirstOrDefault();

            if (!string.IsNullOrEmpty(rangeBegin))
            {
                //bytes=0-
                rangeBegin = rangeBegin.Replace("bytes=", "");
                var parts = rangeBegin.Split('-');
                rangeBegin = parts[0];
                if (parts.Length > 1)
                {
                    rangeEnd = parts[1];
                }
                if (!string.IsNullOrEmpty(rangeEnd))
                {
                    result = long.TryParse(rangeEnd, out long outValue) ? (int?)outValue : null;
                }
            }
            return(result ?? defaultFileLength);
        }
Beispiel #3
0
        public static long DetermineByteStartFromHeaders(IHeaderDictionary headers)
        {
            if (headers == null || !headers.Any(x => x.Key == "Range"))
            {
                return(0);
            }

            long result      = 0;
            var  rangeHeader = headers["Range"];
            var  rangeBegin  = rangeHeader.FirstOrDefault();

            if (!string.IsNullOrEmpty(rangeBegin))
            {
                //bytes=0-
                rangeBegin = rangeBegin.Replace("bytes=", "");
                var parts = rangeBegin.Split('-');
                rangeBegin = parts[0];
                if (!string.IsNullOrEmpty(rangeBegin))
                {
                    long.TryParse(rangeBegin, out result);
                }
            }

            return(result);
        }
Beispiel #4
0
        public static async Task WriteResponseAsync(this HttpResponse response, HttpStatusCode statusCode = HttpStatusCode.OK, string errorMsg = "OK", object data = null, IHeaderDictionary headers = null, string contentType = "application/json")
        {
            response.StatusCode  = (int)statusCode;
            response.ContentType = contentType;
            if (headers != null && headers.Any())
            {
                foreach (var(key, value) in headers)
                {
                    response.Headers[key] = value;
                }
            }

            string result;

            if (statusCode == HttpStatusCode.OK)
            {
                result = data == null
                    ? JsonSerializer.Serialize(new { errmsg = "OK" })
                    : JsonSerializer.Serialize(data, new JsonSerializerOptions {
                    IgnoreNullValues = true
                });
            }
            else
            {
                result = data == null
                    ? JsonSerializer.Serialize(new { errmsg = errorMsg })
                    : JsonSerializer.Serialize(new { errmsg = errorMsg, data },
                                               new JsonSerializerOptions {
                    IgnoreNullValues = true
                });
            }

            await response.WriteAsync(result);
        }
        public FeedbackCreateModel Create(string requestBody, IHeaderDictionary headers, Guid?sessionId)
        {
            var ratingModel = JsonConvert.DeserializeObject <RatingModel>(requestBody ?? string.Empty);

            var model = new FeedbackCreateModel()
            {
                SessionId = sessionId
            };

            if (!String.IsNullOrEmpty(ratingModel?.Rating))
            {
                if (byte.TryParse(ratingModel.Rating, out var ratingValue))
                {
                    model.Rating = ratingValue;
                }
            }

            if (headers != null && headers.Any() && headers.TryGetValue(UserIdHeaderName, out var headerValue))
            {
                var strUserId = headerValue.FirstOrDefault();
                if (!String.IsNullOrEmpty(strUserId))
                {
                    if (Guid.TryParse(strUserId, out var userId))
                    {
                        model.UserId = userId;
                    }
                }
            }

            return(model);
        }
Beispiel #6
0
        public bool IsValid(IHeaderDictionary requestHeaders, string topicKey)
        {
            if (requestHeaders
                .Any(h => string.Equals(Constants.AegSasKeyHeader, h.Key, StringComparison.OrdinalIgnoreCase)))
            {
                if (!string.Equals(requestHeaders[Constants.AegSasKeyHeader], topicKey))
                {
                    _logger.LogError("'aeg-sas-key' value did not match the expected value!");
                    return(false);
                }

                _logger.LogTrace("'aeg-sas-key' header is valid");
                return(true);
            }

            if (requestHeaders
                .Any(h => string.Equals(Constants.AegSasTokenHeader, h.Key, StringComparison.OrdinalIgnoreCase)))
            {
                var token = requestHeaders[Constants.AegSasTokenHeader].First();
                if (!TokenIsValid(token, topicKey))
                {
                    _logger.LogError("'aeg-sas-token' value did not match the expected value!");
                    return(false);
                }

                _logger.LogTrace("'aeg-sas-token' header is valid");
                return(true);
            }

            if (requestHeaders
                .Any(h => string.Equals(HeaderNames.Authorization, h.Key, StringComparison.OrdinalIgnoreCase)))
            {
                var token = requestHeaders[HeaderNames.Authorization].ToString();
                if (token.StartsWith(Constants.SasAuthorizationType) && !TokenIsValid(token.Replace(Constants.SasAuthorizationType, "").Trim(), topicKey))
                {
                    _logger.LogError("'Authorization: SharedAccessSignature' value did not match the expected value!");
                    return(false);
                }

                _logger.LogTrace("'Authorization: SharedAccessSignature' header is valid");
                return(true);
            }

            return(false);
        }
Beispiel #7
0
 private static string GetHeaderTraceString(IHeaderDictionary headers)
 {
     return(headers == null || !headers.Any()
         ? null
         : string.Join(",",
                       headers.Select(
                           header =>
                           string.Format("{0}='{1}'", header.Key,
                                         string.Join(",", header.Value.Any() ? header.Value.ToString() : string.Empty)
                                         .Limit(MaxHeaderLength)))));
 }
        public static Guid GetHeaderValuesGuid(IHeaderDictionary headers, string traceHeaderName)
        {
            if (headers.Any(traceRequestHeader => traceHeaderName.Equals(traceRequestHeader.Key.ToLower())))
            {
                return(Guid.NewGuid());
            }

            var  headerValueAsString = GetHeaderValue(traceHeaderName, headers);
            Guid headerValue         = Guid.TryParse(headerValueAsString, out headerValue) ? headerValue : Guid.Empty;

            return(headerValue);
        }
Beispiel #9
0
        /// <summary>
        /// Get signature from header
        /// </summary>
        /// <param name="headers"></param>
        /// <param name="headerName"></param>
        /// <returns></returns>
        public static string GetSignature(this IHeaderDictionary headers, string headerName = "x-hub-signature")
        {
            var defaultReturn = "";

            try
            {
                if (!headers.Any(r => r.Key.ToLower() == headerName.ToLowerInvariant()))
                {
                    return(defaultReturn);
                }

                return(headers.First(r => r.Key.ToLower() == headerName.ToLowerInvariant()).Value.ToString());
            }
            catch (Exception)
            {
                return(defaultReturn);
            }
        }
Beispiel #10
0
 private static bool HasNegotiateAuthHeader(IHeaderDictionary headers)
 {
     return(headers.Any(
                h => h.Key.ToLowerInvariant() == "authorization" &&
                h.Value[0].ToLowerInvariant().StartsWith("negotiate")));
 }