144 lines
6.9 KiB
Python
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 |