128 lines
4.3 KiB
Python
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
|
|
} |