52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
|
from typing import List
|
||
|
from starlette.routing import Route, Mount
|
||
|
from starlette.requests import Request
|
||
|
from starlette.responses import Response, RedirectResponse
|
||
|
from os import path
|
||
|
import yaml
|
||
|
import jinja2
|
||
|
|
||
|
from core.frontend import FE_Base, UserSession
|
||
|
from core.config import CoreConfig
|
||
|
from .database import DivaData
|
||
|
from .config import DivaConfig
|
||
|
from .const import DivaConstants
|
||
|
|
||
|
class DivaFrontend(FE_Base):
|
||
|
def __init__(
|
||
|
self, cfg: CoreConfig, environment: jinja2.Environment, cfg_dir: str
|
||
|
) -> None:
|
||
|
super().__init__(cfg, environment)
|
||
|
self.data = DivaData(cfg)
|
||
|
self.game_cfg = DivaConfig()
|
||
|
if path.exists(f"{cfg_dir}/{DivaConstants.CONFIG_NAME}"):
|
||
|
self.game_cfg.update(
|
||
|
yaml.safe_load(open(f"{cfg_dir}/{DivaConstants.CONFIG_NAME}"))
|
||
|
)
|
||
|
self.nav_name = "diva"
|
||
|
|
||
|
def get_routes(self) -> List[Route]:
|
||
|
return [
|
||
|
Route("/", self.render_GET, methods=['GET'])
|
||
|
]
|
||
|
|
||
|
async def render_GET(self, request: Request) -> bytes:
|
||
|
template = self.environment.get_template(
|
||
|
"titles/diva/templates/diva_index.jinja"
|
||
|
)
|
||
|
usr_sesh = self.validate_session(request)
|
||
|
if not usr_sesh:
|
||
|
usr_sesh = UserSession()
|
||
|
|
||
|
if usr_sesh.user_id > 0:
|
||
|
profile = self.data.profile
|
||
|
|
||
|
resp = Response(template.render(
|
||
|
title=f"{self.core_config.server.name} | {self.nav_name}",
|
||
|
game_list=self.environment.globals["game_list"],
|
||
|
sesh=vars(usr_sesh),
|
||
|
profile=profile
|
||
|
))
|
||
|
return resp
|
||
|
else:
|
||
|
return RedirectResponse("/login")
|