Пример #1
0
        private Task Pull(HttpContext arg)
        {
            try
            {
                var req = arg.PostData <CowidPlusPullRequest>();

                arg.Response.SendChunk("{");

                var items = _dbs[req.N].GetBatch(req.Items);
                var last  = items.Length - 1;

                for (var i = 0; i < items.Length; i++)
                {
                    arg.Response
                    .SendChunk($"\"{HttpUtility.JavaScriptStringEncode(items[i].Key)}\":{(string.IsNullOrWhiteSpace(items[i].Value) ? "null" : items[i].Value)}}}");
                    if (i < last)
                    {
                        arg.Response.SendChunk(",");
                    }
                }

                return(arg.Response.SendFinalChunk("}"));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);

                return(arg.Response.Send(HttpStatusCode.InternalServerError));
            }
        }
Пример #2
0
        private Task Update(HttpContext arg)
        {
            try
            {
                var req = arg.PostData <CowidPlusUpdateRequest>();

                using (var sha = SHA512.Create())
                {
                    var dataHash = Convert.ToBase64String(sha.ComputeHash(Encoding.ASCII.GetBytes(req.Data)));

                    var token = $"{dataHash}-{_lastUpdateToken}-{_secureUpdateToken}";
                    if (req.SessionKey != Convert.ToBase64String(sha.ComputeHash(Encoding.ASCII.GetBytes(token))))
                    {
                        return(arg.Response.Send(HttpStatusCode.Forbidden));
                    }
                }
                _lastUpdateToken = Guid.NewGuid().ToString("N");

                Database.SetupElasticIndex(ref _es);

                Database.InsertFromWebRequest(req.Data, new DateTime(req.Year, req.Month, req.Day), _es, _dbs);

                return(arg.Response.Send(HttpStatusCode.OK));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);

                return(arg.Response.Send(HttpStatusCode.InternalServerError));
            }
        }
Пример #3
0
        private Task Down(HttpContext arg)
        {
            try
            {
                if (arg.Request.ContentLength > _maxPostSize)
                {
                    return(arg.Response.Send(HttpStatusCode.RequestUriTooLong));
                }

                var request = arg.PostData <CowidPlusDownRequest>();
                foreach (var e in _exporter)
                {
                    if (e.Id == request.Format.ToUpper())
                    {
                        var db = _dbs[request.N];
                        return(e.Convert(arg, ref db, request.N, request.Requests));
                    }
                }
                return(arg.Response.Send(HttpStatusCode.NotFound));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);

                return(arg.Response.Send(HttpStatusCode.InternalServerError));
            }
        }