123 lines
7.3 KiB
Python
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) |