api.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. from flask import Blueprint, jsonify, request, abort, g
  2. from configure import conf
  3. from json import loads
  4. from datetime import datetime
  5. from object.archive import Archive
  6. from object.blog import BlogArticle
  7. from object.msg import Message
  8. from object.comment import Comment
  9. from object.user import User
  10. from app.http_auth import http_auth
  11. from app.tool import api_role_required
  12. api = Blueprint("api", __name__)
  13. @api.route("/", methods=["GET", "POST"])
  14. def api_say_hello():
  15. json = loads(request.get_json())
  16. name = "unknown"
  17. if json:
  18. name = json.get("name", "unknown")
  19. res = {"status": 200, name: "Hello!"}
  20. return res
  21. @api.route("/get_introduce")
  22. @http_auth.login_required
  23. def api_get_introduce():
  24. title = request.args.get("title", "", type=str).lower()
  25. res = {"status": 200, "introduce": {}}
  26. have_found = False
  27. for info in conf['INTRODUCE']:
  28. if title is None or title == info[0].lower():
  29. res["introduce"][info[0]] = info[1]
  30. have_found = True
  31. if not have_found:
  32. abort(404)
  33. return jsonify(res)
  34. @api.route("/find_me")
  35. @http_auth.login_required
  36. def api_get_find_me():
  37. where = request.args.get("where", None, type=str)
  38. if where:
  39. where = where.lower()
  40. res = {"status": 200, "content": {}}
  41. have_found = False
  42. for i in conf['INTRODUCE_LINK']:
  43. if where is None or where == i.lower():
  44. res["content"][i] = conf['INTRODUCE_LINK'][i]
  45. have_found = True
  46. if not have_found:
  47. abort(404)
  48. return jsonify(res)
  49. @api.route("/archive_list")
  50. @http_auth.login_required
  51. @api_role_required("ReadBlog", "api get archive list")
  52. def api_get_archive_list():
  53. archive_list = Archive.get_archive_list()
  54. res = {"status": 200}
  55. res_list = []
  56. for i in archive_list:
  57. res_list.append({
  58. "name": i.name,
  59. "describe": i.describe,
  60. "count": i.count,
  61. "id": i.id,
  62. })
  63. res["archive"] = res_list
  64. return jsonify(res)
  65. @api.route("/archive/<int:archive_id>")
  66. @http_auth.login_required
  67. @api_role_required("ReadBlog", "api get archive")
  68. def get_get_archive(archive_id):
  69. archive = Archive(archive_id)
  70. if len(archive.name) == 0:
  71. abort(404)
  72. return {
  73. "status": 200,
  74. "archive": {
  75. "name": archive.name,
  76. "describe": archive.describe,
  77. "count": archive.count,
  78. "id": archive.id,
  79. }
  80. }
  81. @api.route("/archive_blog_list/<int:archive_id>/<int:page>")
  82. @http_auth.login_required
  83. @api_role_required("ReadBlog", "api get archive blog list")
  84. def api_get_archive_blog_list(archive_id: int, page: int):
  85. blog_list = BlogArticle.get_blog_list(archive_id=archive_id, limit=20, offset=(page - 1) * 20)
  86. res = {"status": 200}
  87. res_list = []
  88. for i in blog_list:
  89. res_list.append({
  90. "auth": i.user.id,
  91. "title": i.title,
  92. "subtitle": i.subtitle,
  93. "update_time": datetime.timestamp(i.update_time),
  94. "create_time": datetime.timestamp(i.create_time),
  95. "top": i.top,
  96. "id": i.id,
  97. })
  98. res["blog"] = res_list
  99. return jsonify(res)
  100. @api.route("/blog_list/<int:page>")
  101. @http_auth.login_required
  102. @api_role_required("ReadBlog", "api get blog list")
  103. def api_get_blog_list(page: int):
  104. blog_list = BlogArticle.get_blog_list(limit=20, offset=(page - 1) * 20)
  105. res = {"status": 200}
  106. res_list = []
  107. for i in blog_list:
  108. res_list.append({
  109. "auth": i.user.id,
  110. "title": i.title,
  111. "subtitle": i.subtitle,
  112. "update_time": datetime.timestamp(i.update_time),
  113. "create_time": datetime.timestamp(i.create_time),
  114. "top": i.top,
  115. "id": i.id,
  116. })
  117. res["blog"] = res_list
  118. return jsonify(res)
  119. @api.route("/blog/<int:blog_id>")
  120. @http_auth.login_required
  121. @api_role_required("ReadBlog", "api get blog")
  122. def api_get_blog(blog_id: int):
  123. blog = BlogArticle(blog_id)
  124. return {
  125. "status": 200,
  126. "blog": {
  127. "auth": blog.user.id,
  128. "title": blog.title,
  129. "subtitle": blog.subtitle,
  130. "update_time": datetime.timestamp(blog.update_time),
  131. "create_time": datetime.timestamp(blog.create_time),
  132. "top": blog.top,
  133. "content": blog.content,
  134. "id": blog.id,
  135. }
  136. }
  137. @api.route("/get_blog_comment/<int:blog_id>")
  138. @http_auth.login_required
  139. @api_role_required("ReadComment", "api get blog comment")
  140. def api_get_blog_comment(blog_id: int):
  141. blog = BlogArticle(blog_id)
  142. res = {"status": 200}
  143. res_list = []
  144. for i in blog.comment:
  145. res_list.append({
  146. "auth": i.auth.id,
  147. "update_time": datetime.timestamp(i.update_time),
  148. "id": i.id,
  149. })
  150. res["comment"] = res_list
  151. return jsonify(res)
  152. @api.route("/comment/<int:comment_id>")
  153. @http_auth.login_required
  154. @api_role_required("ReadComment", "api get comment")
  155. def api_get_comment(comment_id: int):
  156. comment = Comment(comment_id)
  157. return {
  158. "status": 200,
  159. "blog": {
  160. "auth": comment.auth.id,
  161. "update_time": datetime.timestamp(comment.update_time),
  162. "content": comment.content,
  163. "id": comment.id,
  164. }
  165. }
  166. @api.route("/msg_list/<int:page>")
  167. @http_auth.login_required
  168. @api_role_required("ReadMsg", "api get msg list")
  169. def api_get_not_secret_msg_list(page: int):
  170. msg_list = Message.get_message_list(20, (page - 1) * 20, False)
  171. res = {"status": 200}
  172. res_list = []
  173. for i in msg_list:
  174. res_list.append({
  175. "secret": i.secret,
  176. "auth": i.auth.id,
  177. "update_time": datetime.timestamp(i.update_time),
  178. "id": i.id,
  179. })
  180. res["blog"] = res_list
  181. return jsonify(res)
  182. @api.route("/s_msg_list/<int:page>")
  183. @http_auth.login_required
  184. @api_role_required("ReadMsg", "api get all msg secret list")
  185. @api_role_required("ReadSecretMsg", "api get all secret list")
  186. def api_get_secret_msg_list(page: int):
  187. msg_list = Message.get_message_list(20, (page - 1) * 20, request.args.get("secret", 1, type=int) != 0)
  188. res = {"status": 200}
  189. res_list = []
  190. for i in msg_list:
  191. res_list.append({
  192. "secret": i.secret,
  193. "auth": i.auth.id,
  194. "update_time": datetime.timestamp(i.update_time),
  195. "id": i.id,
  196. })
  197. res["blog"] = res_list
  198. return jsonify(res)
  199. @api.route("/msg/<int:msg_id>")
  200. @http_auth.login_required
  201. @api_role_required("ReadMsg", "api get msg")
  202. def api_get_msg(msg_id: int):
  203. msg = Message(msg_id)
  204. if msg.secret:
  205. abort(404)
  206. return {
  207. "status": 200,
  208. "blog": {
  209. "auth": msg.auth.id,
  210. "update_time": datetime.timestamp(msg.update_time),
  211. "content": msg.content,
  212. "id": msg.id,
  213. }
  214. }
  215. @api.route("/s_msg/<int:msg_id>")
  216. @http_auth.login_required
  217. @api_role_required("ReadMsg", "api get secret msg")
  218. @api_role_required("ReadSecretMsg", "api get secret msg")
  219. def api_get_secret_msg(msg_id: int):
  220. msg = Message(msg_id)
  221. return {
  222. "status": 200,
  223. "blog": {
  224. "auth": msg.auth.id,
  225. "update_time": datetime.timestamp(msg.update_time),
  226. "content": msg.content,
  227. "id": msg.id,
  228. }
  229. }
  230. @api.route("/user/<int:user_id>")
  231. @http_auth.login_required
  232. @api_role_required("ReadUserInfo", "api get user info")
  233. def api_get_user(user_id: int):
  234. user = User(user_id, is_id=True)
  235. return {
  236. "status": 200,
  237. "blog": {
  238. "role": user.role,
  239. "email": user.email,
  240. "id": user.id,
  241. }
  242. }