public override async Task Handle() { if (Request.Headers["Authorization"] != null) { Guid token = Guid.Parse(Request.Headers["Authorization"]); CurrentUser = manager.AuthorizeUser(token); } string requestJson; using (var textReader = new StreamReader(Request.InputStream, Request.ContentEncoding)) { requestJson = await textReader.ReadToEndAsync().ConfigureAwait(false); } TRequestData requestData = JsonConvert.DeserializeObject <TRequestData>(requestJson); TResponseData responseData = await Handle(requestData).ConfigureAwait(false); var responseJson = JsonConvert.SerializeObject(responseData); Response.StatusCode = 200; Response.Headers.Add(HttpResponseHeader.ContentType, "application/json"); byte[] buffer = Encoding.UTF8.GetBytes(responseJson); Response.ContentLength64 = buffer.Length; Response.OutputStream.Write(buffer, 0, buffer.Length); }
public async Task Auth(CommandContext ctx) { if (ctx.Message.Channel.IsPrivate) { return; } var user = await db.GetUser(ctx.User.Id.ToString()); if (user != null) { await ctx.RespondAsync($"{ctx.Message.Author.Mention}, ты уже авторизован :3"); return; } var dm = await ctx.Member.CreateDmChannelAsync(); var interactivity = ctx.Client.GetInteractivityModule(); var authManager = new AuthorizationManager(); ShikimoriResponse response; await dm.SendMessageAsync($"{BotConfig.GreetMessage}\n\n{BotConfig.AuthURL}"); do { var msg = await interactivity.WaitForMessageAsync(m => { return(m.Author.Id == ctx.User.Id && m.Channel.IsPrivate); }, TimeSpan.FromMinutes(5)); if (msg == null) { await dm.SendMessageAsync("Я устал ждать... Увидимся позже."); return; } response = await authManager.AuthorizeUser(msg.Message.Content); if (response.status == HttpStatusCode.BadRequest) { await dm.SendMessageAsync($"Кажется, ты прислал неверный код. Попробуй ещё раз!\n\n{BotConfig.AuthURL}"); } } while (response.status == HttpStatusCode.BadRequest); await db.InsertUser( nickname : ctx.Message.Author.Username, clientId : ctx.User.Id.ToString(), shikimoriUserId : response.userId, shikimoriNickname : response.nickname, accessToken : response.accessToken, refreshToken : response.refreshToken ); await dm.SendMessageAsync("Авторизация прошла успешно!"); }
public override Task <LoginResponse> Handle(LoginRequest requestData) { var user = manager.AuthorizeUser(requestData.Username); return(Task.FromResult(new LoginResponse { Id = user.Id, Username = user.Username, Online = true, Token = user.Token })); }