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

281 lines
18 KiB
Python

from tools import *
from Utils.Config import *
from Utils.Lib import *
MC = flask.Blueprint("mc", __name__, subdomain="mc", static_folder = JoinPath(FlaskTempLate, "mc"), static_url_path = "/")
@MC.route("/")
def MCIndex():
return flask.render_template("/mc/index.html")
@MC.route("/index.html")
def MCIndexHtml():
return flask.redirect("/")
def VerifyEasyauthPassword(plain_password, easyauth_hash):
hashed_bytes = easyauth_hash.encode('utf-8')
password_bytes = plain_password.encode('utf-8')
return bcrypt.checkpw(password_bytes, hashed_bytes)
CCCRB=flask.Blueprint("CCCRB", __name__, subdomain="3crb", static_folder=JoinPath(FlaskTempLate, "CCCRB"), static_url_path="/")
@CCCRB.route("/")
def CCCRBIndex():
return flask.render_template("/CCCRB/index.html")
@CCCRB.route("/index.html")
def CCCRBIndexHtml():
return flask.redirect(flask.url_for("CCCRB.CCCRBIndex"))
@CCCRB.route("/API/LotteryTicket.api")
def CCCRBLotteryTicket():
if not Is_ELTUser(): return {"status": 1, "msg": "Not ELTUser"}
ELTUserUUID=GetELTUserUUID()
if not ELTUserUUID: return {"status": 1, "msg": "!Login"}
if not (ru:=SQLMinecraft.selectashead(NSQL.MOD.ALL, FROM="server_market_balances", WHERE=("UserUUID=%s", Get16toBytes(ELTUserUUID)), _limit=1)): return {"status": 1, "error": 0, "msg": "No Wallet"}
pass
@CCCRB.route("/API/NewEnterPrise.api", methods=["POST"])
def CCCRBNewEnterprise():
if not Is_ELTUser(): return {"status": 1, "msg": "Not ELTUser"}
ELTUserUUID=GetELTUserUUID()
if not ELTUserUUID: return {"status": 1, "msg": "!Login"}
if not (ru:=SQLMinecraft.selectashead(NSQL.MOD.ALL, FROM="server_market_balances", WHERE=("UserUUID=%s", Get16toBytes(ELTUserUUID)), _limit=1)): return {"status": 1, "error": 0, "msg": "No Wallet"}
JSON=flask.request.get_json()
if not JSON: return {"status": 1, "msg": "No JSON"}
EnterpriseUUID=JSON.get("EnterpriseUUID")
EnterpriseFatherUUID=JSON.get("EnterpriseFatherUUID")
Enterprise3C=JSON.get("Enterprise3C")
EnterpriseName=JSON.get("EnterpriseName")
EnterpriseType=JSON.get("EnterpriseType")
EnterpriseStatus=JSON.get("EnterpriseStatus")
EnterpriseJuridicalPerson=JSON.get("EnterpriseJuridicalPerson").split(",")
EnterpriseRegisteredCapital=JSON.get("EnterpriseRegisteredCapital")
EnterpriseCapitalGC=JSON.get("EnterpriseCapitalGC")
EnterpriseTelephone=JSON.get("EnterpriseTelephone")
EnterpriseEmail=JSON.get("EnterpriseEmail")
EnterpriseWebsite=JSON.get("EnterpriseWebsite")
EnterpriseAddres=JSON.get("EnterpriseAddres")
EnterpriseDesc=JSON.get("EnterpriseDesc")
EnterpriseAdministrativeDivisions=JSON.get("EnterpriseAdministrativeDivisions")
EnterpriseBusinessScope=JSON.get("EnterpriseBusinessScope").split(",")
Mode = 1 # Change (0 = Register, 1 = Change)
if EnterpriseFatherUUID == "30": EnterpriseFatherUUID=None
if EnterpriseFatherUUID and not Get16toBytes(EnterpriseFatherUUID, True): return {"status": 1, "msg": "EnterpriseFatherUUID not is UUID"}
if not EnterpriseName: return {"status": 1, "msg": "EnterpriseName is empty"}
if not EnterpriseType: return {"status": 1, "msg": "EnterpriseType is empty"}
if not EnterpriseStatus: return {"status": 1, "msg": "EnterpriseStatus is empty"}
if not EnterpriseJuridicalPerson: return {"status": 1, "msg": "EnterpriseJuridicalPerson is empty"}
if not EnterpriseRegisteredCapital: return {"status": 1, "msg": "EnterpriseRegisteredCapital is empty"}
if not EnterpriseCapitalGC: return {"status": 1, "msg": "EnterpriseCapitalGC is empty"}
if EnterpriseTelephone and not re.match(r"^1[3-9]\d{9}$", EnterpriseTelephone): return {"status": 1, "msg": "EnterpriseTelephone is not phone"}
if EnterpriseEmail and not re.match(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$", EnterpriseEmail): return {"status": 1, "msg": "EnterpriseEmail is not email"}
if EnterpriseWebsite and not re.match(r"^https?://[^\s/$.?#].[^\s]*$", EnterpriseWebsite): return {"status": 1, "msg": "EnterpriseWebsite is not url"}
if not EnterpriseAddres: return {"status": 1, "msg": "EnterpriseAddres is empty"}
if not EnterpriseDesc: return {"status": 1, "msg": "EnterpriseDesc is empty"}
if not EnterpriseAdministrativeDivisions: return {"status": 1, "msg": "EnterpriseAdministrativeDivisions is empty"}
if not EnterpriseBusinessScope: return {"status": 1, "msg": "EnterpriseBusinessScope is empty"}
if EnterpriseType not in ["0", "1"]: return {"status": 1, "msg": "EnterpriseType is not 0 or 1"}
EnterpriseType=int(EnterpriseType)
if EnterpriseStatus not in ["0", "1", "2", "3", "4"]: return {"status": 1, "msg": "EnterpriseStatus is not 0 or 1 or 2 or 3 or 4"}
EnterpriseStatus=int(EnterpriseStatus)
EnterpriseJuridicalPersonUUIDs=[]
if len(EnterpriseJuridicalPerson) > 10: return {"status": 1, "msg": "EnterpriseJuridicalPerson is more than 10"}
if not all(((EnterpriseJuridicalPersonUUIDs.append(u), u)[1] if (u := GetUserUUID(i)) else None) for i in EnterpriseJuridicalPerson): return {"status": 1, "msg": "EnterpriseJuridicalPerson contains invalid user"}
if not all(SQLMinecraft.istrue(FROM="server_market_balances", WHERE=("UserUUID=%s", Get16toBytes(i))) for i in EnterpriseJuridicalPersonUUIDs): return {"status": 1, "msg": "one of the EnterpriseJuridicalPerson is no wallet"}
try: EnterpriseRegisteredCapital=int(EnterpriseRegisteredCapital)
except: return {"status": 1, "msg": "EnterpriseRegisteredCapital is not int"}
if EnterpriseRegisteredCapital < 10: return {"status": 1, "msg": "EnterpriseRegisteredCapital is less than 10"}
if not EnterpriseUUID and ru[0]["amount"] < 500000: return {"status": 1, "msg": "EnterpriseRegisteredCapital (Your amount) is less than 500000"}
if EnterpriseCapitalGC not in ["GC", "CNY", "USD"]: return {"status": 1, "msg": "EnterpriseCapitalGC is not GC or CNY or USD"}
if not re.match(r"^\d+ \d+ \d+ (minecraft:overworld|minecraft:the_end|minecraft:the_nether)$", EnterpriseAddres): return {"status": 1, "msg": "EnterpriseAddres is not format"}
if len(EnterpriseName) > 30: return {"status": 1, "msg": "EnterpriseName is more than 30"}
if EnterpriseTelephone and len(EnterpriseTelephone) != 11: return {"status": 1, "msg": "EnterpriseTelephone is not 11"}
if EnterpriseEmail and len(EnterpriseEmail) > 50: return {"status": 1, "msg": "EnterpriseEmail is more than 50"}
if EnterpriseWebsite and len(EnterpriseWebsite) > 200: return {"status": 1, "msg": "EnterpriseWebsite is more than 200"}
if len(EnterpriseAddres) > 200: return {"status": 1, "msg": "EnterpriseAddres is more than 200"}
if len(EnterpriseDesc) > 10240: return {"status": 1, "msg": "EnterpriseDesc is more than 10KB"}
if len(EnterpriseAdministrativeDivisions) > 10240: return {"status": 1, "msg": "EnterpriseAdministrativeDivisions is more than 10KB"}
if len("".join(EnterpriseBusinessScope)) > 10240: return {"status": 1, "msg": "EnterpriseBusinessScope is more than 10KB"}
if len(EnterpriseBusinessScope) > 100: return {"status": 1, "msg": "EnterpriseBusinessScope is more than 100"}
if not EnterpriseUUID: EnterpriseUUID=GUUID()
u=None
if not SQLMinecraft.istrue(FROM="enterprise", WHERE=("EnterpriseUUID=%s", Get16toBytes(EnterpriseUUID))):
Mode=0
if not Enterprise3C: return {"status": 1, "msg": "Enterprise3C is empty"}
if not Get16toBytes(Enterprise3C, True): return {"status": 1, "msg": "Enterprise3C not is UUID"}
if not SQLMinecraft.istrue(FROM="enterprise3c", WHERE=("EnterpriseCreateCertificationCode=%s", Get16toBytes(Enterprise3C))): return {"status": 1, "msg": "Enterprise3C is exist"}
if SQLMinecraft.istrue(FROM="enterprise", WHERE=("EnterpriseName=%s", EnterpriseName)): return {"status": 1, "msg": "EnterpriseName is exist"}
if EnterpriseFatherUUID and not SQLMinecraft.istrue(FROM="enterprise", WHERE=("EnterpriseFatherUUID=%s", EnterpriseFatherUUID)): return {"status": 1, "msg": "EnterpriseFatherUUID is exist"}
if len(SQLMinecraft.selectashead(NSQL.MOD.ALL, FROM="enterprise_user", WHERE=("EnterpriseUUID=%s AND UserUUID=%s", (Get16toBytes(EnterpriseUUID), Get16toBytes(ELTUserUUID))))) > 20: return {"status": 1, "msg": "There Are Too Many Enterprises Owned By Legal Persons"}
else:
if not (u:=SQLMinecraft.selectashead(NSQL.MOD.ALL, FROM="enterprise_user", WHERE=("EnterpriseUUID=%s AND UserUUID=%s AND EnterpriseUserType IN (0, 1)", (Get16toBytes(EnterpriseUUID), Get16toBytes(ELTUserUUID))), _limit=1)): return {"status": 1, "msg": "You are not the legal person"}
if u and u[0]["EnterpriseUserType"] == 0:
if EnterpriseJuridicalPerson[0] != GetELTUserName(): return {"status": 1, "msg": "EnterpriseJuridicalPerson first is not you"}
SQLMinecraft.delete(FROM="enterprise_user", WHERE=("EnterpriseUUID=%s", Get16toBytes(EnterpriseUUID)))
# SQLMinecraft.delete(FROM="enterprise3c", WHERE=("EnterpriseCreateCertificationCode=%s", Get16toBytes(Enterprise3C))) DEBUG !!!
[SQLMinecraft.insert("enterprise_user",
EnterpriseUUID=Get16toBytes(EnterpriseUUID),
UserUUID=Get16toBytes(GetUserUUID(person)),
EnterpriseUserType=0 if idx == 0 else 1) for idx, person in enumerate(EnterpriseJuridicalPerson)]
(SQLMinecraft.update if Mode else SQLMinecraft.insert)(**({"WHERE": ("EnterpriseUUID=%s", Get16toBytes(EnterpriseUUID))} if Mode else {"EnterpriseCreateCertificationCode": Get16toBytes(Enterprise3C)}),
FROM="enterprise",
EnterpriseUUID=Get16toBytes(EnterpriseUUID),
EnterpriseFatherUUID=Get16toBytes(EnterpriseFatherUUID),
EnterpriseName=EnterpriseName,
EnterpriseType=EnterpriseType,
EnterpriseStatus=EnterpriseStatus,
EnterpriseRegisteredCapital=EnterpriseRegisteredCapital,
EnterpriseCreateTime=TimeFormatInt(),
EnterpriseCapitalGC=EnterpriseCapitalGC,
EnterpriseTelephone=EnterpriseTelephone,
EnterpriseEmail=EnterpriseEmail,
EnterpriseWebsite=EnterpriseWebsite,
EnterpriseAddres=EnterpriseAddres,
EnterpriseDesc=EnterpriseDesc,
EnterpriseAdministrativeDivisions=EnterpriseAdministrativeDivisions,
EnterpriseBusinessScope=json.dumps(EnterpriseBusinessScope, ensure_ascii=False),
EnterpriseBusinessPeriod="-1")
return {"status": 0, "msg": "NewEnterprise"}
@CCCRB.route("/API/DeregistrationEnterprise.api", methods=["POST"])
def DeregistrationEnterprise():
JSON=flask.request.get_json()
EnterpriseUUID=JSON.get("EnterpriseUUID")
ELTUserUUID=GetELTUserUUID()
if not ELTUserUUID: return {"status": 1, "msg": "!Login"}
if not EnterpriseUUID: return {"status": 1, "msg": "EnterpriseUUID is empty"}
if not Get16toBytes(EnterpriseUUID, True): return {"status": 1, "msg": "EnterpriseUUID not is UUID"}
if not (ru:=SQLMinecraft.selectashead(NSQL.MOD.ALL, FROM="server_market_balances", WHERE=("UserUUID=%s", Get16toBytes(ELTUserUUID)), _limit=1)): return {"status": 1, "error": 0, "msg": "No Wallet"}
if not SQLMinecraft.istrue(FROM="enterprise", WHERE=("EnterpriseUUID=%s", Get16toBytes(EnterpriseUUID))): return {"status": 1, "msg": "EnterpriseUUID is not exist"}
if not SQLMinecraft.selectashead(NSQL.MOD.ALL, FROM="enterprise_user", WHERE=("EnterpriseUUID=%s AND UserUUID=%s AND EnterpriseUserType IN (0, 1)", (Get16toBytes(EnterpriseUUID), Get16toBytes(ELTUserUUID)))): return {"status": 1, "msg": "You are not the owner of the enterprise"}
SQLMinecraft.update(FROM="enterprise", WHERE=("EnterpriseUUID=%s", Get16toBytes(EnterpriseUUID)), EnterpriseStatus=2)
return {"status": 0}
CreateECentralCourt=flask.Blueprint("CreateECentralCourt", __name__, subdomain="3c",static_folder=TempLate + "/CreateECentralCourt",static_url_path="/")
@CreateECentralCourt.route("/index.html")
def CreateECentralCourtIndexHtml():
return flask.redirect(flask.url_for("CreateECentralCourt.CreateECentralCourtIndex"))
@CreateECentralCourt.route("/")
def CreateECentralCourtIndex():
return flask.render_template("/CreateECentralCourt/index.html")
@CreateECentralCourt.route("/API/case.api")
def CreateECentralCourtCase():
if not (r:=SQLMinecraft.selectashead(NSQL.MOD.ALL, FROM="case", WHERE="CaseOpen=1")): return {"status": 0, "data": []}
_=[]
for i in r:
_.append({
"CaseUUID": GetBytesto16(i["CaseUUID"]),
"CaseName": i["CaseName"],
"CaseType": i["CaseType"],
"CasePlaintiffUUID": GetBytesto16(i["CasePlaintiffUUID"]),
"CaseDefendantPlayerUUID": GetBytesto16(i["CaseDefendantPlayerUUID"]),
"CaseDefendantEnterpriseUUID": GetBytesto16(i["CaseDefendantEnterpriseUUID"]),
"CaseDescription": i["CaseDescription"],
"CaseDemand": i["CaseDemand"],
"CaseEvidence": i["CaseEvidence"],
"CaseDDemand": i["CaseDDemand"],
"CaseDEvidence": i["CaseDEvidence"]
})
return {"status": 0, "data": _}
@CreateECentralCourt.route("/API/mycase.api")
def CreateECentralCourtMyCase():
ELTUserUUID=GetELTUserUUID()
if not (r:=SQLMinecraft.selectashead(NSQL.MOD.ALL, FROM="case", WHERE=("CasePlaintiffUUID=%s", Get16toBytes(ELTUserUUID)))): return {"status": 0, "data": []}
_=[]
for i in r:
_.append({
"CaseUUID": GetBytesto16(i["CaseUUID"]),
"CaseName": i["CaseName"],
"CaseType": i["CaseType"],
"CasePlaintiffUUID": GetBytesto16(i["CasePlaintiffUUID"]),
"CaseDefendantPlayerUUID": GetBytesto16(i["CaseDefendantPlayerUUID"]),
"CaseDefendantEnterpriseUUID": GetBytesto16(i["CaseDefendantEnterpriseUUID"]),
"CaseOpen": i["CaseOpen"],
"CaseDescription": i["CaseDescription"],
"CaseDemand": i["CaseDemand"],
"CaseEvidence": i["CaseEvidence"],
"CaseDDemand": i["CaseDDemand"],
"CaseDEvidence": i["CaseDEvidence"]
})
return {"status": 0, "data": _}
@CreateECentralCourt.route("/API/dcase.api")
def CreateECentralCourtDCase():
if not (r:=SQLMinecraft.selectashead(NSQL.MOD.ALL, FROM="case", WHERE="CaseOpen=-1")): return {"status": 0, "data": []}
_=[]
for i in r:
_.append({
"CaseUUID": GetBytesto16(i["CaseUUID"]),
"CaseName": i["CaseName"],
"CaseType": i["CaseType"],
"CasePlaintiffUUID": GetBytesto16(i["CasePlaintiffUUID"]),
"CaseDefendantPlayerUUID": GetBytesto16(i["CaseDefendantPlayerUUID"]),
"CaseDefendantEnterpriseUUID": GetBytesto16(i["CaseDefendantEnterpriseUUID"]),
"CaseOpen": i["CaseOpen"],
"CaseDescription": i["CaseDescription"],
"CaseDemand": i["CaseDemand"],
"CaseEvidence": i["CaseEvidence"],
"CaseDDemand": i["CaseDDemand"],
"CaseDEvidence": i["CaseDEvidence"]
})
return {"status": 0, "data": _}
@CreateECentralCourt.route("/API/NewCase.api", methods=["POST"])
def CreateECentralCourtNewCase():
CaseName=flask.request.form.get("CaseName")
CaseType=flask.request.form.get("CaseType")
CasePlaintiffUUID=flask.request.form.get("CasePlaintiffUUID")
CaseDefendantPlayerUUID=flask.request.form.get("CaseDefendantPlayerUUID")
CaseDefendantEnterpriseUUID=flask.request.form.get("CaseDefendantEnterpriseUUID")
CaseDescription=flask.request.form.get("CaseDescription")
CaseDemand=flask.request.form.get("CaseDemand")
CaseEvidence=flask.request.form.get("CaseEvidence")
@MC.route("/API/UserBind.api", methods=["POST"])
def UserBindAPI():
j = flask.request.get_json()
if "PlayerName" not in j: return {"status": 1, "msg": "键 PlayerName 不存在"}
if "PlayerPasswd" not in j: return {"status": 1, "msg": "键 PlayerPasswd 不存在"}
PlayerName = j["PlayerName"]
PlayerPasswd = j["PlayerPasswd"]
if not PlayerName: return {"status": 1, "msg": "键 PlayerName 不存在"}
if not PlayerPasswd: return {"status": 1, "msg": "键 PlayerPasswd 不存在"}
# if Is_User(PlayerName): return {"status": 1, "msg": "键 PlayerName 对应的工作室账户名称已存在"}
if not (u:=GetELTUserUUID()): return {"status": 1, "msg": "无法获取 ELT 用户 UUID"}
if not NonLegalChar(PlayerName): return {"status": 1, "msg": "键 PlayerName 不符合工作室账户命名要求"}
if not (r:=GetMCUserByPlayerName(PlayerName)): return {"status": 1, "msg": "键 PlayerName 对应的数据不存在"}
if r[0]["UserUUID"]: return {"status": 1, "msg": "键 PlayerName 对应的账户已绑定。"}
if not r[0]["data"]: return {"status": 1, "msg": "键 PlayerName 对应的账户未激活。"}
if not r[0]["data"]["password"]: return {"status": 1, "msg": "键 PlayerName 对应的账户从未登录。"}
if not VerifyEasyauthPassword(PlayerPasswd, r[0]["data"]["password"]): return {"status": 1, "msg": "键 PlayerPasswd 验证错误"}
if GetMCMarketByGVSDSUUID(u): return {"status": 1, "msg": "键 UserUUID 对应的账户已绑定。"}
if not SQLMinecraft.selectashead(NSQL.MOD.ALL, FROM="server_market_balances", WHERE=("uuid = %s", Get16toBytes(r[0]["uuid"]))): return {"status": 1, "msg": "键 PlayerName 对应的账户未绑定市场。"}
SQLMinecraft.update(FROM="server_market_balances", WHERE=("uuid = %s", Get16toBytes(r[0]["uuid"])), UserUUID=Get16toBytes(u))
SQLMinecraft.update(FROM="easyauth", WHERE=("username_lower = %s", PlayerName), UserUUID=Get16toBytes(u))
return {"status": 0, "redirect": "https://manage.gvsds.com"}