예제 #1
0
        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);
        }
예제 #2
0
        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("Авторизация прошла успешно!");
        }
예제 #3
0
        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
            }));
        }