- Add missing actions and make a clear boundary between actions, services and nfra (i.e: actions shouldn't use stuff from infra/) - Delete stuff not in use: tts, gtts, etc - Add a ton of tests
42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
import secrets
|
|
|
|
from litestar import MediaType, get
|
|
from litestar.datastructures.cookie import Cookie
|
|
from litestar.response import Redirect, Template
|
|
|
|
from huesoporro.actions.users.authenticate_user import AuthenticateUserAction
|
|
from huesoporro.settings import Settings
|
|
|
|
|
|
@get(path="/o/code")
|
|
async def get_code(code: str, authenticate_action: AuthenticateUserAction) -> Redirect:
|
|
user = await authenticate_action.run(code)
|
|
token = user.encode()
|
|
return Redirect(
|
|
"/",
|
|
cookies=[
|
|
Cookie(
|
|
key="huesoporroAuth",
|
|
value=token,
|
|
expires=604800, # 1 week
|
|
)
|
|
],
|
|
)
|
|
|
|
|
|
@get(
|
|
"/login",
|
|
media_type=MediaType.HTML,
|
|
)
|
|
async def login(s: Settings) -> Template:
|
|
scopes = "+".join(s.twitch_scopes)
|
|
return Template(
|
|
"login.html",
|
|
context={
|
|
"twitch_login_url": "https://id.twitch.tv/oauth2/authorize?response_type=code"
|
|
f"&client_id={s.twitch_client_id}"
|
|
f"&redirect_uri={s.server_hostname}o/code"
|
|
f"&scope={scopes}"
|
|
f"&state={secrets.token_urlsafe(32)}"
|
|
},
|
|
)
|