feat: Start twitch user auth module.
This commit is contained in:
9
src/twitch/__init__.py
Normal file
9
src/twitch/__init__.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
from .cog import TwitchAuthCog
|
||||||
|
|
||||||
|
async def setup(bot):
|
||||||
|
await bot.add_cog(TwitchAuthCog(bot))
|
||||||
|
|
||||||
7
src/twitch/authserver.py
Normal file
7
src/twitch/authserver.py
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
"""
|
||||||
|
We want to open an aiohttp server and listen on a configured port.
|
||||||
|
When we get a request, we validate it to be 'of twitch form',
|
||||||
|
parse out the error or access token, state, etc, and then pass that information on.
|
||||||
|
|
||||||
|
Passing on maybe done through webhook server?
|
||||||
|
"""
|
||||||
31
src/twitch/cog.py
Normal file
31
src/twitch/cog.py
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import asyncio
|
||||||
|
from enum import Enum
|
||||||
|
from typing import Optional
|
||||||
|
from datetime import timedelta
|
||||||
|
|
||||||
|
import discord
|
||||||
|
from discord.ext import commands as cmds
|
||||||
|
import twitchio
|
||||||
|
from twitchio.ext import commands
|
||||||
|
|
||||||
|
|
||||||
|
from data.queries import ORDER
|
||||||
|
from meta import LionCog, LionBot, CrocBot
|
||||||
|
from utils.lib import utc_now
|
||||||
|
from . import logger
|
||||||
|
from .data import TwitchAuthData
|
||||||
|
|
||||||
|
|
||||||
|
class TwitchAuthCog(LionCog):
|
||||||
|
def __init__(self, bot: LionBot):
|
||||||
|
self.bot = bot
|
||||||
|
self.data = bot.db.load_registry(TwitchAuthData())
|
||||||
|
|
||||||
|
async def cog_load(self):
|
||||||
|
await self.data.init()
|
||||||
|
|
||||||
|
# ----- Auth API -----
|
||||||
|
|
||||||
|
async def fetch_client_for(self, userid: int):
|
||||||
|
...
|
||||||
|
|
||||||
28
src/twitch/data.py
Normal file
28
src/twitch/data.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
from data import Registry, RowModel
|
||||||
|
from data.columns import Integer, String, Timestamp
|
||||||
|
|
||||||
|
|
||||||
|
class TwitchAuthData(Registry):
|
||||||
|
class UserAuthRow(RowModel):
|
||||||
|
"""
|
||||||
|
Schema
|
||||||
|
------
|
||||||
|
CREATE TABLE twitch_tokens(
|
||||||
|
userid BIGINT PRIMARY KEY,
|
||||||
|
access_token TEXT NOT NULL,
|
||||||
|
expires_at TIMESTAMPTZ NOT NULL,
|
||||||
|
refresh_token TEXT NOT NULL,
|
||||||
|
obtained_at TIMESTAMPTZ
|
||||||
|
);
|
||||||
|
|
||||||
|
"""
|
||||||
|
_tablename_ = 'twitch_tokens'
|
||||||
|
_cache_ = {}
|
||||||
|
|
||||||
|
userid = Integer(primary=True)
|
||||||
|
access_token = String()
|
||||||
|
expires_at = Timestamp()
|
||||||
|
refresh_token = String()
|
||||||
|
obtained_at = Timestamp()
|
||||||
|
|
||||||
|
# TODO: Scopes
|
||||||
Reference in New Issue
Block a user