from tools import * from Utils.Config import * from Utils.Lib import * Document = flask.Blueprint("Document", __name__, static_folder = JoinPath(FlaskTempLate, "Document"), static_url_path="/", subdomain="doc") # 文档首页 @Document.route("/") def DocumentIndex(): return flask.render_template("/Document/index.html") @Document.route("/index.html") def DocumentIndexHtml(): return flask.redirect(flask.url_for("Document.DocumentIndex")) # 文档展示页 @Document.route("/") def DocumentShow(DocUUID, DocSerieUUID=None): return ProcessTemplate("/Document/template.html") # ------------------------------ # 仅保留有用的工具函数 # ------------------------------ def GetStrMD5(s): return hashlib.md5(s.encode("utf-8")).hexdigest() # ------------------------------ # API 接口 # ------------------------------ @Document.route("/API//") def DocumentShowAPI(DocUUID=None, DocSerieUUID=None): Doc = None DocSerie = None if not DocUUID or not DocSerieUUID: return flask.jsonify({"DocTitle": "错误", "DocContent": "存在空项"}) if not Is_UUID(DocUUID) or not Is_UUID(DocSerieUUID): return flask.jsonify({"DocTitle": "错误", "DocContent": "UUID 不正确"}) Doc = CommunityDocument.query.filter(CommunityDocument.DocUUID == UUIDObj(DocUUID)).first() if not Doc: return "此表单提供的文章不存在" if not DocSerieUUID: DocSerieUUID = UUIDObj(Doc.DocSerirUUID) DocSerie = CommunitySeries.query.filter(CommunitySeries.DocSerieUUID == UUIDObj(DocSerieUUID)).first() if not DocSerie: return "此表单提供的系列不存在" DocPermission = Doc.DocPermission if Doc.DocPermission else 0 if Doc.DocPwd and GetStrMD5(flask.request.args.get("Pwd", "")) != Doc.DocPwd.hex(): return flask.jsonify({ "DocTitle": f"{DocSerie.DocSerieName} - {Doc.DocTitle}", "DocContent": Doc.DocPwdDesc, "DocPermission": DocPermission, "DocDecrypt": False }) return flask.jsonify({ "DocTitle": f"{DocSerie.DocSerieName} - {Doc.DocTitle}", "DocContent": Doc.DocContent, "DocPermission": DocPermission, "DocDecrypt": True }) @Document.route("/API/GetSerieDirectory/") def DocumentGetSerieDirectory(DocSDUUID=None): if not DocSDUUID: return flask.jsonify({"code": 1, "msg": "!UUID"}) if not Is_UUID(DocSDUUID): return flask.jsonify({"code": 1, "msg": "UUID NOT IS UUID"}) docs = [] IsSingleDoc = False docs = CommunityDocument.query.filter(CommunityDocument.DocSerieUUID == DocSDUUID).all() if not docs: doc = CommunityDocument.query.filter(CommunityDocument.DocUUID == DocSDUUID).first() if not doc: return flask.jsonify({"code": 1, "msg": "NOT FOUND UUID"}) IsSingleDoc = True docs = CommunityDocument.query.filter(CommunityDocument.DocSerieUUID == doc.DocSerieUUID).all() serie = CommunitySeries.query.filter(CommunitySeries.DocSerieUUID == docs[0].DocSerieUUID).first() if not serie: return flask.jsonify({"code": 1, "msg": "NOT FOUND SERIE"}) Sections = [ {"id": doc.DocUUID.hex(), "title": doc.DocTitle} for doc in docs if doc.DocTitle != "__index" ] return flask.jsonify({ "title": serie.DocSerieName, "chapters": [{ "id": f"{serie.DocSerieUUID.hex()}_index", "title": serie.DocSerieName, "sections": Sections }], "document": IsSingleDoc }) @Document.route("/API/GetDoc/") def DocumentGetDoc(UUID: str=None): if not UUID: return {"code": 1, "msg": "!UUID"} _u = UUIDObj(UUID) if not _u.ok: return {"code": 1, "msg": "!UUID"} Doc: CommunityDocument = CommunityDocument.query.filter(CommunityDocument.DocUUID == _u).first() if Doc.DocPwd and GetStrMD5(flask.request.args.get("Pwd", "")) != Doc.DocPwd.hex(): return { "DocContent": Doc.DocPwdDesc, "DocPermission": bool(Doc.DocPermission), "DocDecrypt": False } return { "DocContent": Doc.DocContent, "DocPermission": bool(Doc.DocPermission), "DocDecrypt": True }