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"}