from tools import * from Utils.Config import * from Utils.Lib import * gdrive=flask.Blueprint("gdrive", __name__, subdomain="gdrive", static_folder = JoinPath(FlaskTempLate, "gdrive"), static_url_path="/") GDrivePath = JoinPath(TempLate, "gdrive/VDISK") @gdrive.route("/") def GdriveIndex(): return flask.render_template("/gdrive/index.html") @gdrive.route("/index.html") def GdriveIndexHtml(): return flask.redirect(flask.url_for("MC.MCIndex")) @gdrive.route("/API/info.api") def GdriveInFo(): if not (r:=SQLGDrive.selectashead(NSQL.MOD.ALL, FROM="vdisk", WHERE=("UserUUID=%s", Get16toBytes(GetELTUserUUID())), _limit=1)): SQLGDrive.insert("vdisk", UserUUID=Get16toBytes(GetELTUserUUID()), UserVDiskTotal=1024*1024*1024, UserVersion="Free") # 1GB hahaha. r=SQLGDrive.selectashead(NSQL.MOD.ALL, FROM="vdisk", WHERE=("UserUUID=%s", Get16toBytes(GetELTUserUUID())), _limit=1) r=r[0] return {"code": 0, "UserName": GetELTUserName(), "UserVDiskTotal": r["UserVDiskTotal"], "UserVersion": r["UserVersion"] } @gdrive.route("/API/GetVDiskTheStorageSpaceSize.api") def GdriveGetVDiskTheStorageSpaceSize(): if not (r:=SQLGDrive.selectashead(NSQL.MOD.ALL, FROM="vdisk", WHERE=("UserUUID=%s", Get16toBytes(GetELTUserUUID())), _limit=1)): SQLGDrive.insert("vdisk", UserUUID=Get16toBytes(GetELTUserUUID()), UserVDiskTotal=1024*1024*1024, UserVersion="Free") # 1GB hahaha. r=SQLGDrive.selectashead(NSQL.MOD.ALL, FROM="vdisk", WHERE=("UserUUID=%s", Get16toBytes(GetELTUserUUID())), _limit=1) r=r[0] u=SQLGDrive.selectashead(NSQL.MOD.ALL, FROM="vfile", WHERE=("UserUUID=%s", Get16toBytes(GetELTUserUUID()))) un=0 for i in u: if i["FileSize"]: un+=i["FileSize"] return {"code": 0, "UserVDiskTotal": r["UserVDiskTotal"], "UserVDiskUsed": un} @gdrive.route("/API/GetFileList.api", methods=["POST"]) def GDriveGetFileList(): FileUUID=flask.request.form.get("FileUUID") FileTypeParent=flask.request.form.get("FileTypeParent") try: FileTypeParent=int(FileTypeParent) except: return {"code": 1} if FileUUID == "0": FileUUID*=32 if not Get16toBytes(FileUUID, True): return {"code": 1} ELTUserUUID=Get16toBytes(GetELTUserUUID()) p=SQLGDrive.selectashead(NSQL.MOD.ALL, FROM="vfile", WHERE=("UserUUID=%s AND FileUUID=%s AND FileType=0", (ELTUserUUID, Get16toBytes(FileUUID))), _limit=1) if FileUUID != "0"*32 and not p: return {"code": 1} if not (r:=SQLGDrive.selectashead(NSQL.MOD.ALL, FROM="vfile", WHERE=("UserUUID=%s AND FileParentUUID=%s", (ELTUserUUID, p[0]["FileParentUUID"] if FileTypeParent and FileUUID != "0"*32 else Get16toBytes(FileUUID))))): return {"code": 0, "FileList": [], "FileUUID": GetBytesto16(p[0]["FileParentUUID"]) if FileTypeParent and FileUUID != "0"*32 else FileUUID} _=[] for i in r: _.append({ "FileUUID": GetBytesto16(i["FileUUID"]), "FileName": i["FileName"], "FileType": i["FileType"], "FileSize": i["FileSize"], "FileCreateTime": i["FileCreateTime"].strftime("%Y-%m-%d %H:%M:%S"), "FileLastChangeTime": i["FileLastChangeTime"].strftime("%Y-%m-%d %H:%M:%S") }) return {"code": 0, "FileList": _, "FileUUID": GetBytesto16(p[0]["FileParentUUID"]) if FileTypeParent and FileUUID != "0"*32 else FileUUID} @gdrive.route("/API/UpdateFile.api", methods=["POST"]) def GDriveUpdateFile(): FileParentUUID=flask.request.form.get("FileParentUUID") file=flask.request.files.get("file") if not NonLegalChar(file.filename): return {"code": 1, "msg": "FileName 存在违法字符"} if FileParentUUID == "0": FileParentUUID*=32 if not Get16toBytes(FileParentUUID, True): return {"code": 1, "msg": "FileParentUUID 校验失败"} if file.content_length > 1024*1024*1024: return {"code": 1, "msg": "文件不能大于 1GB,请分割文件"} if FileParentUUID != "0"*32 and not SQLGDrive.istrue(FROM="vfile", WHERE=("UserUUID=%s AND FileUUID=%s AND FileType=0", (Get16toBytes(GetELTUserUUID()), Get16toBytes(FileParentUUID)))): return {"code": 1, "msg": "父文件不存在"} if SQLGDrive.istrue(FROM="vfile", WHERE=("UserUUID=%s AND FileName=%s", (Get16toBytes(GetELTUserUUID()), file.filename))): return {"code": 1, "msg": "文件已存在"} f=file.stream.read() FileUUID=GUUID().replace("-", "") FilePeViewImageUUID=GUUID().replace("-", "") try: i=Image.open(io.BytesIO(f)) i.save(os.path.join(GDrivePath, FilePeViewImageUUID), "webp", quality=80) except: i=None openw(os.path.join(GDrivePath, FileUUID), f, 2) SQLGDrive.insert("vfile", UserUUID=Get16toBytes(GetELTUserUUID()), FileUUID=Get16toBytes(FileUUID), FileParentUUID=Get16toBytes(FileParentUUID), FileName=file.filename, FileSize=len(f), FileType=1, FileShareing=0, FileCreateTime=TimeFormatInt(), FileLastChangeTime=TimeFormatInt(), FilePeViewImageUUID=i) return {"code": 0} @gdrive.route("/API/CreateFolder.api", methods=["POST"]) def GDriveCreateFolder(): FileParentUUID=flask.request.form.get("FileParentUUID") FileName=flask.request.form.get("FileName") if not NonLegalChar(FileName): return {"code": 1, "msg": "FileName 存在违法字符"} if FileParentUUID == "0": FileParentUUID*=32 if not Get16toBytes(FileParentUUID, True): return {"code": 1, "msg": "FileParentUUID 校验失败"} if FileParentUUID != "0"*32 and not SQLGDrive.istrue(FROM="vfile", WHERE=("UserUUID=%s AND FileUUID=%s AND FileType=0", (Get16toBytes(GetELTUserUUID()), Get16toBytes(FileParentUUID)))): return {"code": 1, "msg": "父文件不存在"} if SQLGDrive.istrue(FROM="vfile", WHERE=("UserUUID=%s AND FileName=%s", (Get16toBytes(GetELTUserUUID()), FileName))): return {"code": 1, "msg": "文件已存在"} FileUUID=GUUID() SQLGDrive.insert("vfile", UserUUID=Get16toBytes(GetELTUserUUID()), FileUUID=Get16toBytes(FileUUID), FileParentUUID=Get16toBytes(FileParentUUID), FileName=FileName, FileSize=0, FileType=0, FileShareing=0, FileCreateTime=TimeFormatInt(), FileLastChangeTime=TimeFormatInt(), FilePeViewImageUUID=None) return {"code": 0} def ThreadRemoveFile(UUID): try: os.remove(os.path.join(GDrivePath, UUID)) except: pass @gdrive.route("/API/DeleteFile.api", methods=["POST"]) def GDriveDeleteFile(): FileUUID=flask.request.form.get("FileUUID") if not Get16toBytes(FileUUID, True): return {"code": 1, "msg": "FileParentUUID 校验失败"} if not SQLGDrive.istrue(FROM="vfile", WHERE=("UserUUID=%s AND FileUUID=%s AND FileType=1", (Get16toBytes(GetELTUserUUID()), Get16toBytes(FileUUID)))): return {"code": 1, "msg": "文件不存在"} Thread(target=ThreadRemoveFile, args=(FileUUID,)).start() SQLGDrive.delete(FROM="vfile", WHERE=("UserUUID=%s AND FileUUID=%s AND FileType=1", (Get16toBytes(GetELTUserUUID()), Get16toBytes(FileUUID)))) return {"code": 0} @gdrive.before_request def GdriveBeforeRequest(): #return flask.render_template("Manage/workonit.html") allowsu=["txt", "png", "jpg", "gif", "js", "css", "eot", "svg", "tff", "woff", "woff2"] if flask.request.url.split(".")[-1].lower() not in allowsu and not Is_ELTUser(): return flask.redirect(flask.url_for("MainLoginHTML")) App.register_blueprint(gdrive)