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

123 lines
7.3 KiB
Python

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)