Files
SMANAGE/_flask_backup/TempLateModule/GErp/GERP.py
T
2026-06-16 11:55:14 +08:00

144 lines
6.9 KiB
Python

from tools import *
from Utils.Config import *
from Utils.Lib import *
from Utils.Models import *
from Utils.UGMLib import *
import AppBridge
import flask_wtf
import wtforms
import wtforms.validators
GERP = flask.Blueprint("GERP", __name__, static_folder = JoinPath(FlaskTempLate, "GERP"), template_folder = JoinPath(FlaskTempLate, "GERP"), static_url_path = "/", subdomain="gerp")
AppBridge.Others["GERP"] = GERP
AIClient = OpenAI(api_key = "sk-8a48b938f3444488ac22653d05254916", base_url = "https://api.deepseek.com")
def GERPProcessTemplate(HtmlFile, **k):
html = openr(JoinPath(TempLate, "GERP", HtmlFile))
_Base = openr(JoinPath(TempLate, "GERP","_Base"))
return _Base.replace("{{ MAIN }}", html)
@GERP.route("/")
def GERPIndex():
ELTUser: GERPUser = flask.g.ELTUser
return flask.render_template_string(GERPProcessTemplate("/index.html"),
UserName=StrMinus(ELTUser.UserName, 15),
UserPersonalSignature=StrMinus(ELTUser.UserPersonalSignature, 15),
UserEmail=StrMinus(ELTUser.UserEmail, 15),
#UserPermission=float(ELTUser.UserPermission),
#UserJob=ELTUser.UserJob
)
@GERP.route("/index.html")
def GERPIndexHtml():
return flask.redirect(flask.url_for("GERP.GERPIndex"))
@GERP.after_request
def GERPHtmlAfterIndex(r: flask.Response):
if os.path.isfile(JoinPath(FlaskTempLate, "Gerp", flask.request.path[1:])) and flask.request.path.split(".")[-1].lower() == "html": # and ".".join(flask.request.path.split(".")[:-1]).count("/") != 1:
# return flask.make_response(flask.render_template_string(GERPProcessTemplate(flask.request.path[1:], DefaultUse = False)))
return flask.make_response(GERPProcessTemplate(flask.request.path[1:], DefaultUse = False))
if r.status_code != 404: return r
if os.path.isfile(JoinPath(FlaskTempLate, "Gerp", flask.request.path[1:], "index.html")):
# return flask.make_response(flask.render_template_string(GERPProcessTemplate(flask.request.path[1:] + "/index.html")))
return flask.make_response(GERPProcessTemplate(flask.request.path[1:] + "/index.html"))
return r
@GERP.route("/assets/css/theme.css")
def GERPThemeCSS():
User: GERPUser = flask.g.ELTUser
return flask.Response(openr(JoinPath(TempLate, f"GERP/assets/css/Theme{User.UserTheme}.css")), mimetype="text/css")
@GERP.route("/User/ChangePasswd.html")
def UserChangePasswd():
return flask.render_template("/GERP/User/ChangePasswd.html")
@GERP.route("/User/checkin.html")
def UserCheckInPage():
return flask.render_template("GERP/User/checkin.html")
@GERP.route("/API/CheckInStatus.api")
def UserCheckInStatusAPI():
_ = GetELTUser().UserLastCheckInDate
if not _: return flask.jsonify({"code": 0, "checkin": False})
if _.date() == datetime.datetime.today().date(): return flask.jsonify({"code": 0, "checkin": True})
return flask.jsonify({"code": 0, "checkin": False})
class CheckInForm(FlaskForm):
csrf_token = HiddenField(validators=[DataRequired()])
@GERP.route("/API/CheckIn.api", methods=["POST"])
#@PreRequirements(2.0)
def UserCheckInAPI():
checkin=CheckInForm()
if not checkin.validate_on_submit():
return flask.jsonify({"code": 1, "msg": i18n.CheckInError})
try: validate_csrf(checkin.csrf_token.data)
except: return flask.jsonify({"code": 1, "msg": i18n.CheckInError})
_ = GetELTUser().UserLastCheckInDate
if hasattr(_, "date") and _ and _.date() == datetime.datetime.today().date():
return flask.jsonify({"code": 1, "msg": i18n.AlreadyCheckIn})
GetELTUser().UserLastCheckInDate = TimeFormatInt()
ELTUserUUID = GetELTUserUUID()
GC = -1
if (r:=GetMCMarketByGVSDSUUID(ELTUserUUID)):
GC = random.randint(0,500)
SQLMinecraft.update(FROM="server_market_balances", WHERE=("uuid=%s", r[0]["uuid"]), amount=r[0]["amount"] + GC)
SQLUsers.insert("checkin", UserUUID=Get16toBytes(ELTUserUUID), WeekFirstTime=GetWeekStartDate(), CheckInTime=TimeFormatStr())
return flask.jsonify({"code": 0, "GC": GC})
@GERP.route("/API/GetNewCheckIn.api")
#@PreRequirements(2.0)
def UserGetNewCheckIn():
_r=[]
for i in SQLUsers.selectashead(NSQL.MOD.ALL, FROM="checkin", WHERE="1=1", _limit=16*3, WITH="ORDER BY CheckInTime DESC"):
if not (_u:=SQLUsers.selectashead(NSQL.MOD.ALL, FROM="User", WHERE=("UserUUID=%s", i["UserUUID"]))):
_r.append({"name":i18n.Cancelled, "avatar":"/assets/img/UserDefaultImg.png", "signin_time": i["CheckInTime"].strftime("%Y-%m-%d %H:%M:%S"), "firstweek_time": i["WeekFirstTime"].strftime("%Y-%m-%d")})
continue
_u=_u[0]
_r.append({"name":_u["UserName"], "avatar":f"https://ugm.gvsds.com/GetArgsUserAvatar.api?UserUUID={GetBytesto16(_u["UserUUID"])}", "signin_time": i["CheckInTime"].strftime("%Y-%m-%d %H:%M:%S"), "firstweek_time": i["WeekFirstTime"].strftime("%Y-%m-%d")})
return {"code": 0, "data": _r}
@GERP.route("/API/GetTheme.api")
def GERPGetTheme():
return {"code": GetELTUser().UserTheme}
@GERP.route("/API/GetPhotoViewPort.api")
def GERPGetPhotoViewPort():
return {"code": GetELTUser().UserPhotoViewPort}
@GERP.route("/API/SetTheme.api", methods=["POST"])
def GERPSetTheme():
Theme=flask.request.form.get("Theme")
if not Theme: return {"code": 1, "msg": i18n.NoParameter("Theme")}
if not os.path.isfile(os.path.join(TempLate, f"GERP/css/theme{str(Theme)}.css")): return {"code": 0, "msg": i18n.NoFound("ThemeCSS")}
GetELTUser().UserTheme = int(Theme)
db.session.commit()
return {"code": 0, "msg": i18n.OperateSuccess}
@GERP.route("/API/SetPhotoViewPort.api", methods=["POST"])
def GERPSetPhotoViewPort():
PhotoViewPort=flask.request.form.get("PhotoViewPort")
if not PhotoViewPort: return {"code": 1, "msg": i18n.NoParameter("PhotoViewPort")}
if PhotoViewPort not in ["0", "1"]: return {"code": 1, "msg": i18n.ModeError}
GetELTUser().UserPhotoViewPort = int(PhotoViewPort)
db.session.commit()
return {"code": 0, "msg": i18n.OperateSuccess}
@GERP.before_request
def GERPBeforeRequest():
AllowSuffix = ["txt", "png", "jpg", "gif", "js", "css", "eot", "svg", "tff", "woff", "woff2"]
ELTUser = None
if flask.request.url.split(".")[-1].lower() not in AllowSuffix and not (ELTUser := UGM.GetELTUser()):
if flask.request.path.startswith("/API/"):
return flask.jsonify({"code": 401, "msg": "ELT已失效,请重新登录"}), 401
return flask.redirect(flask.url_for("MainLoginHTML"))
ELTUser = UGM.GetELTUser() if not ELTUser else ELTUser
flask.g.ELTUser = ELTUser
if ELTUser and (not ELTUser.UserEmailVerify and not flask.request.path.startswith("/API/AccountActivation/")):
return flask.render_template("/GERP/AccountActivation/AccountActivation.html")
# App.jinja_env.globals.update