import contextlib import os import flask import sys import lc.config as c import lc.error as e import lc.model as m import lc.request as r from lc.web import Endpoint, endpoint, render app = c.app @endpoint("/") class Index(Endpoint): def html(self): return render("main", title="main", content="whoo", user=self.user) @endpoint("/auth") class Auth(Endpoint): def api_post(self): _, token = m.User.login(r.User.from_json(flask.request.data)) return token @endpoint("/login") class Login(Endpoint): def html(self): return render("main", title="login", content=render("login"), user=self.user) def api_post(self): print(flask.request.form) u, token = m.User.login(r.User( name=flask.request.form["username"], password=flask.request.form["password"], )) flask.session["auth"] = token raise e.LCRedirect(u.base_url()) @endpoint("/logout") class Logout(Endpoint): def html(self): if "auth" in flask.session: del flask.session["auth"] raise e.LCRedirect("/") def api_post(self): if "auth" in flask.session: del flask.session["auth"] raise e.LCRedirect("/") @endpoint("/u") class CreateUser(Endpoint): def api_post(self): u = m.User.from_request(r.User.from_json(flask.request.data)) return flask.redirect(u.base_url()) @endpoint("/u/") class GetUser(Endpoint): def html(self, slug: str): u = m.User.by_slug(slug) pg = int(flask.request.args.get("page", 0)) links = u.get_links(page=pg) return render( "main", title=f"user {u.name}", content=render("linklist", links=links), user=self.user, ) def api_get(self, slug: str): return m.User.by_slug(slug).to_dict() @endpoint("/u//l") class CreateLink: def api_post(self, user: str): pass @endpoint("/u//l/") class GetLink: def api_get(self, user: str, link: str): pass def html(self, user: str, link: str): pass @endpoint("/u//t/") class GetTaggedLinks: def html(self, user: str, tag: str): u = m.User.by_slug(user) pg = int(flask.request.args.get("page", 0)) t = u.get_tag(tag) links = t.get_links(page=pg) return render( "main", title=f"tag {tag}", content=render("linklist", links=links), user=u, )