internal async Task HandleAsync(NotificationApiRequest request, string path, HttpMethod method) { log.Info($"Starting process request {path}"); var handler = handlerMapper.Get(path, method); if (handler != null) { await handler.HandleAsync(request); return; } request.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; }
public static string Generate(NotificationApiRequest request) { var timeBytes = BitConverter.GetBytes(request.timestamp / 60); var part1 = BitConverter.ToInt32(new[] { timeBytes[0], timeBytes[1], timeBytes[2], timeBytes[3] }); var part2 = BitConverter.ToInt16(new[] { timeBytes[4], timeBytes[5] }); var part3 = BitConverter.ToInt16(new[] { timeBytes[6], timeBytes[7] }); var srcBytes = Encoding.UTF8.GetBytes(request.source); var bytes = new byte[8]; for (var i = 0; i < Math.Min(srcBytes.Length, 8); i++) { bytes[i] = srcBytes[i]; } var guid = new Guid(part1, part2, part3, bytes); return(guid.ToString()); }
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { app.Run(async(context) => { var b = a.HttpContext; string body; using (StreamReader reader = new StreamReader(b.Request.Body, Encoding.UTF8, true, 1024, true)) { body = reader.ReadToEnd(); } var method = string.Equals(b.Request.Method, "GET", StringComparison.OrdinalIgnoreCase) ? HttpMethod.Get : HttpMethod.Post; var notificationApiRequest = method == HttpMethod.Post ? NotificationApiRequest.CreateFromBody(body, b) : NotificationApiRequest.CreateFromQueryCollection(b.Request.Query, b); await handler.HandleAsync(notificationApiRequest, b.Request.Path, method); }); }
public async Task HandleAsync(NotificationApiRequest request) { request.HttpContext.Response.Headers.Add("Content-Type", "text/event-stream"); request.HttpContext.Response.Headers.Add("Keep-alive", "true"); request.HttpContext.Response.ContentType = "text/event-stream"; if (!(await subscriber.Subscribe(request.source, request.Token, request.HttpContext))) { request.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized; return; } var cts = new TaskCompletionSource <byte>(); request.HttpContext.RequestAborted.Register(() => cts.TrySetResult(1)); await cts.Task; subscriber.Unsubscribe(request.source, request.HttpContext); }
public async Task HandleAsync(NotificationApiRequest request) { var token = request.IsPublic ? null : TokensGenerator.Generate(request); await mongoDbClient.InsertUser(request.source, token, request.password, request.IsPublic); if (request.IsPublic) { authorizer.RegisterPublic(request.source, request.password); } else { authorizer.RegisterPrivate(request.source, token, request.password); } sourceStorage.Add(request.source); request.HttpContext.Response.StatusCode = (int)HttpStatusCode.OK; await request.HttpContext.Response.WriteAsync(token); await request.HttpContext.Response.Body.FlushAsync(); }
public async Task HandleAsync(NotificationApiRequest request) { if (!authorizer.CanPush(request.source, request.password)) { request.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized; return; } request.HttpContext.Response.StatusCode = (int)HttpStatusCode.Accepted; Task.Run(async() => { if (sourceStorage.TryGetInfo(request.source, out var info)) { var message = new Message(request.Base64Message, DateTime.UtcNow + ttl); if (info.AddMessage(message)) { await mongoClient.InsertMessage(request.source, message); messageSender.Send(request.Base64Message, info); } } }); }