public async Task Invoke(HttpContext ctx, DatabaseContext db) { if (ctx.WebSockets.IsWebSocketRequest && ctx.Request.Query.TryGetValue("email", out var email)) { var result = await AuthService.CreateLink(email); var socket = await ctx.WebSockets.AcceptWebSocketAsync(); var wrapper = SocketWrapper.Create(result.UserId, result.Unique, socket); Sockets.Add(wrapper); var url = $"{Program.URL}/login/{result.Protected}"; Console.WriteLine(url); while (wrapper.Socket.State == WebSocketState.Open) { await Task.Delay(5000); } } else { await Next(ctx); } }