Files
SMANAGE/backup/_flask_backup/TempLateModule/Document.py
T

128 lines
4.3 KiB
Python

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("/<DocUUID>")
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/<DocSerieUUID>/<DocUUID>")
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/<DocSDUUID>")
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/<UUID>")
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
}