app.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import contextlib
  2. import os
  3. import flask
  4. import sys
  5. import lc.config as c
  6. import lc.error as e
  7. import lc.model as m
  8. import lc.request as r
  9. from lc.web import Endpoint, endpoint, render
  10. app = c.app
  11. @endpoint("/")
  12. class Index(Endpoint):
  13. def html(self):
  14. return render("main", title="main", content="whoo", user=self.user)
  15. @endpoint("/auth")
  16. class Auth(Endpoint):
  17. def api_post(self):
  18. _, token = m.User.login(r.User.from_json(flask.request.data))
  19. return token
  20. @endpoint("/login")
  21. class Login(Endpoint):
  22. def html(self):
  23. return render("main", title="login", content=render("login"), user=self.user)
  24. def api_post(self):
  25. print(flask.request.form)
  26. u, token = m.User.login(
  27. r.User(
  28. name=flask.request.form["username"],
  29. password=flask.request.form["password"],
  30. )
  31. )
  32. flask.session["auth"] = token
  33. raise e.LCRedirect(u.base_url())
  34. @endpoint("/logout")
  35. class Logout(Endpoint):
  36. def html(self):
  37. if "auth" in flask.session:
  38. del flask.session["auth"]
  39. raise e.LCRedirect("/")
  40. def api_post(self):
  41. if "auth" in flask.session:
  42. del flask.session["auth"]
  43. raise e.LCRedirect("/")
  44. @endpoint("/u")
  45. class CreateUser(Endpoint):
  46. def api_post(self):
  47. u = m.User.from_request(r.User.from_json(flask.request.data))
  48. return flask.redirect(u.base_url())
  49. @endpoint("/u/<string:slug>")
  50. class GetUser(Endpoint):
  51. def html(self, slug: str):
  52. u = m.User.by_slug(slug)
  53. pg = int(flask.request.args.get("page", 0))
  54. links = u.get_links(page=pg)
  55. return render(
  56. "main",
  57. title=f"user {u.name}",
  58. content=render("linklist", links=links),
  59. user=self.user,
  60. )
  61. def api_get(self, slug: str):
  62. return m.User.by_slug(slug).to_dict()
  63. @endpoint("/u/<string:user>/l")
  64. class CreateLink:
  65. def api_post(self, user: str):
  66. pass
  67. @endpoint("/u/<string:user>/l/<string:link>")
  68. class GetLink:
  69. def api_get(self, user: str, link: str):
  70. pass
  71. def html(self, user: str, link: str):
  72. pass
  73. @endpoint("/u/<string:user>/t/<path:tag>")
  74. class GetTaggedLinks:
  75. def html(self, user: str, tag: str):
  76. u = m.User.by_slug(user)
  77. pg = int(flask.request.args.get("page", 0))
  78. t = u.get_tag(tag)
  79. links = t.get_links(page=pg)
  80. return render(
  81. "main", title=f"tag {tag}", content=render("linklist", links=links), user=u,
  82. )