106 lines
4.0 KiB
Python
106 lines
4.0 KiB
Python
from pathlib import Path
|
|
|
|
from fastapi import APIRouter, Cookie, Request
|
|
from fastapi.responses import HTMLResponse
|
|
|
|
from app.db import auth_db
|
|
from app.web.shared import require_page_user
|
|
|
|
|
|
def build_router(templates, repo_root: Path, stock_report_template: str):
|
|
router = APIRouter()
|
|
|
|
def render_page(template_name: str, request: Request, **kwargs):
|
|
try:
|
|
user = auth_db.get_user_by_session_token(request.cookies.get("altcoin_session", ""))
|
|
if user:
|
|
auth_db.log_user_activity(
|
|
user["id"],
|
|
"page_view",
|
|
template_name.replace(".html", ""),
|
|
ip=request.client.host if request.client else "",
|
|
)
|
|
except Exception:
|
|
pass
|
|
return templates.TemplateResponse(request=request, name=template_name, context={"show_nav": True, **kwargs})
|
|
|
|
@router.get("/", response_class=HTMLResponse)
|
|
async def index():
|
|
with open(repo_root / "static" / "index.html", "r", encoding="utf-8") as f:
|
|
return HTMLResponse(content=f.read())
|
|
|
|
@router.get("/auth", response_class=HTMLResponse)
|
|
async def auth_page():
|
|
with open(repo_root / "static" / "auth.html", "r", encoding="utf-8") as f:
|
|
return HTMLResponse(content=f.read())
|
|
|
|
@router.get("/watchlist", response_class=HTMLResponse)
|
|
async def watchlist_page(request: Request):
|
|
user, redirect = require_page_user(request)
|
|
if redirect:
|
|
return redirect
|
|
return render_page("watchlist.html", request)
|
|
|
|
@router.get("/pipeline", response_class=HTMLResponse)
|
|
async def pipeline_page(request: Request):
|
|
user, redirect = require_page_user(request)
|
|
if redirect:
|
|
return redirect
|
|
return render_page("pipeline.html", request)
|
|
|
|
@router.get("/strategy", response_class=HTMLResponse)
|
|
async def strategy_page(request: Request):
|
|
user, redirect = require_page_user(request)
|
|
if redirect:
|
|
return redirect
|
|
return render_page("strategy.html", request)
|
|
|
|
@router.get("/subscription", response_class=HTMLResponse)
|
|
async def subscription_page(request: Request):
|
|
user, redirect = require_page_user(request, require_subscription=False)
|
|
if redirect:
|
|
return redirect
|
|
return render_page("subscription.html", request)
|
|
|
|
@router.get("/referral", response_class=HTMLResponse)
|
|
async def referral_page(request: Request, altcoin_session: str = Cookie(default="")):
|
|
user, redirect = require_page_user(request)
|
|
if redirect:
|
|
return redirect
|
|
return render_page("referral.html", request)
|
|
|
|
@router.get("/app", response_class=HTMLResponse)
|
|
async def app_page(altcoin_session: str = Cookie(default=""), request: Request = None):
|
|
user, redirect = require_page_user(request)
|
|
if redirect:
|
|
return redirect
|
|
try:
|
|
auth_db.log_user_activity(user["id"], "page_view", "app", ip=request.client.host if request and request.client else "")
|
|
except Exception:
|
|
pass
|
|
resp = templates.TemplateResponse(request=request, name="app.html", context={"show_nav": True})
|
|
resp.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
|
|
resp.headers["Pragma"] = "no-cache"
|
|
resp.headers["Expires"] = "0"
|
|
return resp
|
|
|
|
@router.get("/sentiment", response_class=HTMLResponse)
|
|
async def sentiment_page(request: Request):
|
|
user, redirect = require_page_user(request)
|
|
if redirect:
|
|
return redirect
|
|
return render_page("sentiment.html", request)
|
|
|
|
@router.get("/iteration", response_class=HTMLResponse)
|
|
async def iteration_page(request: Request):
|
|
user, redirect = require_page_user(request)
|
|
if redirect:
|
|
return redirect
|
|
return render_page("iteration.html", request)
|
|
|
|
@router.get("/stock-report", response_class=HTMLResponse)
|
|
async def stock_report_page():
|
|
return HTMLResponse(content=stock_report_template)
|
|
|
|
return router
|