|
@@ -34,7 +34,7 @@ from jose import JWTError, jwt
|
|
|
from fastapi_jwt_auth import AuthJWT
|
|
|
from fastapi_jwt_auth.exceptions import AuthJWTException
|
|
|
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
|
|
|
-import models
|
|
|
+import util.models
|
|
|
import pymysql
|
|
|
import mailer
|
|
|
from moviepy.editor import VideoFileClip
|
|
@@ -180,7 +180,7 @@ async def user_profile(token: str = Depends(oauth2_scheme)):
|
|
|
return str_return
|
|
|
|
|
|
@app.post('/edit_profile')
|
|
|
-async def edit_profile(userModel : models.UserProfile ,token: str = Depends(oauth2_scheme)):
|
|
|
+async def edit_profile(userModel : util.models.UserProfile ,token: str = Depends(oauth2_scheme)):
|
|
|
db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
|
|
|
print(token)
|
|
|
user_id = get_user_id(token)
|
|
@@ -244,7 +244,7 @@ async def access_token(form_data: OAuth2PasswordRequestForm = Depends(), Authori
|
|
|
@app.post("/register_old")
|
|
|
async def register_old(request: Request):
|
|
|
db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
|
|
|
- user = models.User(**await request.form())
|
|
|
+ user = util.models.User(**await request.form())
|
|
|
user_obj = first(db.query('SELECT * FROM users where username ="'+str(user.username)+'"'))
|
|
|
if user_obj == None:
|
|
|
id = user_register(user)
|
|
@@ -261,7 +261,7 @@ async def register_old(request: Request):
|
|
|
return {'msg':{'eng':user.username+' is duplicated user name try another','zh':user.username+'重複,請更改'}}
|
|
|
|
|
|
@app.post("/register")
|
|
|
-async def register(request: models.register_req):
|
|
|
+async def register(request: util.models.register_req):
|
|
|
db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
|
|
|
user_obj = first(db.query('SELECT * FROM users where username ="'+str(request.username)+'"'))
|
|
|
|
|
@@ -277,13 +277,33 @@ async def register(request: models.register_req):
|
|
|
else:
|
|
|
return {'msg':{'eng':user.username+' is duplicated user name try another','zh':user.username+'重複,請更改'}}
|
|
|
|
|
|
-
|
|
|
@app.get('/logout')
|
|
|
def logout(request: Request, Authorize: AuthJWT = Depends()):
|
|
|
Authorize.jwt_required()
|
|
|
Authorize.unset_jwt_cookies()
|
|
|
return {"msg": "ok"}
|
|
|
|
|
|
+@app.post('/get_role')
|
|
|
+async def get_role(token: str = Depends(oauth2_scheme)):
|
|
|
+ db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
|
|
|
+ user_id = util.user.get_user_id(token)
|
|
|
+ roles = util.user.get_user_role(user_id)
|
|
|
+ return roles
|
|
|
+
|
|
|
+@app.post('/create_role')
|
|
|
+async def get_role(token: str = Depends(oauth2_scheme)):
|
|
|
+ db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
|
|
|
+ user_id = get_user_id(token)
|
|
|
+
|
|
|
+ return user_id
|
|
|
+
|
|
|
+@app.post('/get_avatar_by_role')
|
|
|
+async def get_role(token: str = Depends(oauth2_scheme)):
|
|
|
+ db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
|
|
|
+ user_id = get_user_id(token)
|
|
|
+
|
|
|
+ return user_id
|
|
|
+
|
|
|
@app.get('/verify_email')
|
|
|
async def verify_email(code):
|
|
|
db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
|
|
@@ -322,7 +342,7 @@ async def send_reset_pwd(user_id,email):
|
|
|
return {'msg':'ok'}
|
|
|
|
|
|
@app.post('/reset_pwd')
|
|
|
-async def reset_password(req :models.reset_pwd):
|
|
|
+async def reset_password(req :util.models.reset_pwd):
|
|
|
db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
|
|
|
print(req.code)
|
|
|
veri_obj = next(iter(db.query('SELECT * FROM reset_pw_code where code ="'+str(req.code)+'"')))
|
|
@@ -340,7 +360,7 @@ async def avatar():
|
|
|
return FileResponse('static/gen_avatar.html')
|
|
|
|
|
|
@app.post("/swapFace")
|
|
|
-async def swapFace(req:models.swap_req):
|
|
|
+async def swapFace(req:util.models.swap_req):
|
|
|
if 'http' not in req.imgurl:
|
|
|
req.imgurl= 'http://'+req.imgurl
|
|
|
try:
|
|
@@ -389,7 +409,7 @@ async def upload_pttx(file: UploadFile = File(...)):
|
|
|
|
|
|
|
|
|
@app.post("/make_anchor_video_gSlide")
|
|
|
-async def make_anchor_video_gSlide(req:models.gSlide_req,token: str = Depends(oauth2_scheme)):
|
|
|
+async def make_anchor_video_gSlide(req:util.models.gSlide_req,token: str = Depends(oauth2_scheme)):
|
|
|
if req.url_type == 0:
|
|
|
name, text_content, image_urls = gSlide.parse_slide_url(req.slide_url,eng=False)
|
|
|
else :
|
|
@@ -419,7 +439,7 @@ async def make_anchor_video_gSlide(req:models.gSlide_req,token: str = Depends(oa
|
|
|
except:
|
|
|
return {'msg':{'eng':req.imgurl+'cant be proccessed','zh':"無法辨別圖片網址"+req.imgurl}}
|
|
|
user_id = get_user_id(token)
|
|
|
- proto_req = models.request_normal()
|
|
|
+ proto_req = util.models.request_normal()
|
|
|
proto_req.text_content = text_content
|
|
|
proto_req.name = name
|
|
|
proto_req.image_urls = image_urls
|
|
@@ -431,7 +451,7 @@ async def make_anchor_video_gSlide(req:models.gSlide_req,token: str = Depends(oa
|
|
|
return {"msg":"ok"}
|
|
|
|
|
|
@app.post("/make_anchor_video_long")
|
|
|
-async def make_anchor_video_long(req:models.request,token: str = Depends(oauth2_scheme)):
|
|
|
+async def make_anchor_video_long(req:util.models.request,token: str = Depends(oauth2_scheme)):
|
|
|
left_tag = [m.start() for m in re.finditer('{', req.text_content[0])]
|
|
|
if len(req.image_urls) != len(left_tag):
|
|
|
return {'msg':{'eng':'number of subtitles and images(videos) should be the same','zh':'副標題數量、圖片(影片)數量以及台詞數量必須一致'}}
|
|
@@ -460,14 +480,16 @@ async def make_anchor_video_long(req:models.request,token: str = Depends(oauth2_
|
|
|
video_id = save_history(req,name_hash,user_id)
|
|
|
x = threading.Thread(target=gen_video_long_queue, args=(name_hash,req.name, req.text_content, req.image_urls,int(req.avatar),req.multiLang,video_id,user_id))
|
|
|
x.start()
|
|
|
+ returnMsg = ''
|
|
|
if first(db.query('SELECT COUNT(1) FROM video_queue'))['COUNT(1)'] >= 3:
|
|
|
- return {'msg':{'eng':'There are many videos have been processing, please wait.','zh':'目前有多部影片處理中,煩請耐心等候'}}
|
|
|
+ returnMsg = {'msg':{'eng':'There are many videos have been processing, please wait.','zh':'目前有多部影片處理中,煩請耐心等候'}}
|
|
|
else:
|
|
|
- return {'msg'{'eng':'Processing video requires a few minutes, please wait for notification','zh':'影片處理需要數分鐘,請等待通知'}}
|
|
|
- return {"msg":"ok"}
|
|
|
+ returnMsg = {'msg':{'eng':'Processing video requires a few minutes, please wait for notification','zh':'影片處理需要數分鐘,請等待通知'}}
|
|
|
+ return returnMsg
|
|
|
+
|
|
|
|
|
|
@app.post("/make_anchor_video")
|
|
|
-async def make_anchor_video(req:models.request,token: str = Depends(oauth2_scheme)):
|
|
|
+async def make_anchor_video(req:util.models.request,token: str = Depends(oauth2_scheme)):
|
|
|
if len(req.image_urls) != len(req.text_content):
|
|
|
return {'msg':{'eng':'number of subtitles and images(videos) should be the same','zh':'副標題數量、圖片(影片)數量以及台詞數量必須一致'}}
|
|
|
for idx in range(len(req.image_urls)):
|
|
@@ -498,11 +520,11 @@ async def make_anchor_video(req:models.request,token: str = Depends(oauth2_schem
|
|
|
if first(db.query('SELECT COUNT(1) FROM video_queue'))['COUNT(1)'] >= 3:
|
|
|
return {'msg':{'eng':'There are many videos have been processing, please wait.','zh':'目前有多部影片處理中,煩請耐心等候'}}
|
|
|
else:
|
|
|
- return {'msg'{'eng':'Processing video requires a few minutes, please wait for notification','zh':'影片處理需要數分鐘,請等待通知'}}
|
|
|
+ return {'msg':{'eng':'Processing video requires a few minutes, please wait for notification','zh':'影片處理需要數分鐘,請等待通知'}}
|
|
|
return {'msg':'ok'}
|
|
|
|
|
|
@app.post("/make_anchor_video_eng")
|
|
|
-async def make_anchor_video_eng(req:models.request_eng,token: str = Depends(oauth2_scheme)):
|
|
|
+async def make_anchor_video_eng(req:util.models.request_eng,token: str = Depends(oauth2_scheme)):
|
|
|
if len(req.image_urls) != len(req.sub_titles) or len(req.sub_titles) != len(req.text_content):
|
|
|
return {'msg':{'eng':'number of subtitles and images(videos) should be the same','zh':'副標題數量、圖片(影片)數量以及台詞數量必須一致'}}
|
|
|
for idx in range(len(req.image_urls)):
|
|
@@ -525,11 +547,11 @@ async def make_anchor_video_eng(req:models.request_eng,token: str = Depends(oaut
|
|
|
if first(db.query('SELECT COUNT(1) FROM video_queue'))['COUNT(1)'] >= 3:
|
|
|
return {'msg':{'eng':'There are many videos have been processing, please wait.','zh':'目前有多部影片處理中,煩請耐心等候'}}
|
|
|
else:
|
|
|
- return {'msg'{'eng':'Processing video requires a few minutes, please wait for notification','zh':'影片處理需要數分鐘,請等待通知'}}
|
|
|
+ return {'msg':{'eng':'Processing video requires a few minutes, please wait for notification','zh':'影片處理需要數分鐘,請等待通知'}}
|
|
|
return {"msg":"ok"}
|
|
|
|
|
|
@app.post("/save_draft")
|
|
|
-async def save_draft(req:models.video_draft,token: str = Depends(oauth2_scheme)):
|
|
|
+async def save_draft(req:util.models.video_draft,token: str = Depends(oauth2_scheme)):
|
|
|
db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
|
|
|
user_id = get_user_id(token)
|
|
|
|
|
@@ -566,7 +588,7 @@ async def draft_list(token: str = Depends(oauth2_scheme)):
|
|
|
return logs
|
|
|
|
|
|
@app.post('/del_draft')
|
|
|
-async def del_draft(id_obj:models.id_obj,token: str = Depends(oauth2_scheme)):
|
|
|
+async def del_draft(id_obj:util.models.id_obj,token: str = Depends(oauth2_scheme)):
|
|
|
db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
|
|
|
user_id = get_user_id(token)
|
|
|
statement = 'SELECT * FROM draft WHERE user_id="'+str(user_id)+'" and id ="'+str(id_obj.id)+'"'
|
|
@@ -610,7 +632,7 @@ async def history_input(token: str = Depends(oauth2_scheme)):
|
|
|
|
|
|
@AuthJWT.load_config
|
|
|
def get_config():
|
|
|
- return models.Settings()
|
|
|
+ return util.models.Settings()
|
|
|
|
|
|
@app.exception_handler(AuthJWTException)
|
|
|
def authjwt_exception_handler(request: Request, exc: AuthJWTException):
|
|
@@ -631,7 +653,7 @@ def get_user_id(token):
|
|
|
username: str = payload.get("sub")
|
|
|
if username is None:
|
|
|
raise credentials_exception
|
|
|
- token_data = models.TokenData(username=username)
|
|
|
+ token_data = util.models.TokenData(username=username)
|
|
|
except JWTError:
|
|
|
raise credentials_exception
|
|
|
user = get_user(username=token_data.username)
|
|
@@ -653,7 +675,7 @@ def get_user(username: str):
|
|
|
return False
|
|
|
user_dict = next(
|
|
|
iter(db.query('SELECT * FROM AI_anchor.users where username ="'+username+'"')))
|
|
|
- user = models.User(**user_dict)
|
|
|
+ user = util.models.User(**user_dict)
|
|
|
return user
|
|
|
|
|
|
def user_register(user):
|
|
@@ -672,7 +694,7 @@ def authenticate_user(username: str, password: str):
|
|
|
if not check_user_exists(username): # if user don't exist
|
|
|
return False
|
|
|
user_dict = next(iter(db.query('SELECT * FROM AI_anchor.users where username ="'+username+'"')))
|
|
|
- user = models.User(**user_dict)
|
|
|
+ user = util.models.User(**user_dict)
|
|
|
if not verify_password(password, user.password):
|
|
|
return False
|
|
|
return user
|