281 lines
18 KiB
Python
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"}
|
|
|