126 lines
6.5 KiB
Python
126 lines
6.5 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.orm import Session
|
|
from context.common import email_verify_code, company_user_auth_util, CompanyUserTokenDataModel
|
|
from utils.passwd_utils import get_encrypt_password, decode_b64_pwd
|
|
from utils.validate_utils import Validate
|
|
from utils.verify_code_utils import EmailVerifyType
|
|
from . import schemas
|
|
from ...models import CompanyUser
|
|
from ...common import get_db
|
|
|
|
router = APIRouter(tags=["企业用户接口"], prefix='/company_user')
|
|
|
|
|
|
@router.post('/login_by_email', summary='用户邮箱登录接口',
|
|
response_model=schemas.LoginByEmailRes)
|
|
def login_by_email(req: schemas.LoginByEmailReq,
|
|
db: Session = Depends(get_db)):
|
|
checked = email_verify_code.check_code(req.email, req.code, EmailVerifyType.login)
|
|
if not checked:
|
|
raise HTTPException(detail="邮箱验证码错误", status_code=303)
|
|
user = db.query(CompanyUser).filter(CompanyUser.email == req.email).first()
|
|
if not user:
|
|
raise HTTPException(detail="该账户未注册", status_code=303)
|
|
user_data = user.to_dict()
|
|
token_data = company_user_auth_util.tokenDataModel(**user_data)
|
|
token = company_user_auth_util.create_token(token_data)
|
|
return schemas.LoginByEmailRes(token=token)
|
|
|
|
|
|
@router.post('/refresh_token', summary='用户token刷新接口',
|
|
response_model=schemas.RefreshTokenRes)
|
|
def login_by_email(db: Session = Depends(get_db),
|
|
token_data: CompanyUserTokenDataModel = Depends(company_user_auth_util.token_data_depend),
|
|
):
|
|
user = db.query(CompanyUser).filter(CompanyUser.id == token_data.id).first()
|
|
if not user:
|
|
raise HTTPException(detail="该账户未注册", status_code=303)
|
|
user_data = user.to_dict()
|
|
token_data = company_user_auth_util.tokenDataModel(**user_data)
|
|
token = company_user_auth_util.create_token(token_data)
|
|
return schemas.LoginByEmailRes(token=token)
|
|
|
|
|
|
@router.post('/login_by_passwd', summary='用户邮箱密码登录接口',
|
|
response_model=schemas.LoginByPasswdRes)
|
|
def login_by_passwd(req: schemas.LoginByPasswdReq,
|
|
db: Session = Depends(get_db)):
|
|
# checked = email_verify_code.check_code(req.email, req.code, EmailVerifyType.login)
|
|
# org_passwd = decode_b64_pwd(req.passwd)
|
|
org_passwd = req.passwd
|
|
hashed_passwd = get_encrypt_password(org_passwd)
|
|
user = db.query(CompanyUser).filter(CompanyUser.email == req.email and CompanyUser.company == hashed_passwd).first()
|
|
if not user:
|
|
raise HTTPException(detail="邮箱或密码错误", status_code=303)
|
|
user_data = user.to_dict()
|
|
company_name = user.company.name if user.company else ''
|
|
token_data = company_user_auth_util.tokenDataModel(**user_data, company_name=company_name)
|
|
token = company_user_auth_util.create_token(token_data)
|
|
return schemas.LoginByEmailRes(token=token)
|
|
|
|
|
|
@router.post("/get_email_login_verify_code", summary="用户邮箱登录验证码获取接口")
|
|
def get_email_login_verify_code(body: schemas.GetEmailVerifyCode):
|
|
try:
|
|
email = body.email
|
|
if not Validate.email(email):
|
|
raise HTTPException(detail="错误的邮箱格式", status_code=403)
|
|
email_verify_code.send_code(email, EmailVerifyType.login)
|
|
except Exception as e:
|
|
print(e)
|
|
raise HTTPException(detail="邮箱验证码发送失败", status_code=403)
|
|
return {'state': 1, "msg": "邮箱验证码已发送至邮箱,请查看"}
|
|
|
|
|
|
# @router.post("/company_user/get_email_register_verify_code", summary="获取注册邮箱验证码")
|
|
# def get_email_register_verify_code(body: schemas.GetEmailVerifyCode):
|
|
# try:
|
|
# email = body.email
|
|
# if not Validate.email(email):
|
|
# raise HTTPException(detail="错误的邮箱格式", status_code=403)
|
|
# email_verify_code.send_code(email, EmailVerifyType.register)
|
|
# except Exception as e:
|
|
# print(e)
|
|
# raise HTTPException(detail="邮箱验证码发送失败", status_code=403)
|
|
# return {'state': 1, "msg": "邮箱验证码已发送至邮箱,请查看"}
|
|
#
|
|
#
|
|
# @router.post("/company_user/register", summary="注册企业用户")
|
|
# def company_user_register(req: schemas.CompanyUserRegisterReq, db: Session = Depends(common_db.get_db)):
|
|
# org_passwd = decode_b64_pwd(req.passwd)
|
|
# if not Validate.password(org_passwd):
|
|
# raise HTTPException(detail="密码格式不规范", status_code=303)
|
|
# checked = email_verify_code.check_code(req.email, req.email_verified_code, EmailVerifyType.register)
|
|
# if not checked:
|
|
# raise HTTPException(detail='邮箱验证码错误', status_code=303)
|
|
# file = FormFileCrud.file_get(db, req.license_file_md)
|
|
# image_url = conf['app']['host'] + f"/{conf['app']['sys_name']}/static/" + "/".join(file.file_url.split('/')[2:])
|
|
# license_res = ocr_business_license(image_url)
|
|
# license_check_res, _ = tianyancha_api.get('企业三要素', {'code': license_res.credit, 'name': license_res.name,
|
|
# 'legalPersonName': license_res.owner})
|
|
# if not (license_check_res and license_check_res['result'] == 1):
|
|
# if license_check_res:
|
|
# raise HTTPException(detail=license_check_res['remark'], status_code=303)
|
|
# raise HTTPException(detail="营业执照信息验证失败", status_code=303)
|
|
# company_name = license_res.name
|
|
# item = crud.company_user_get_by_company_name(db, company_name)
|
|
# if item:
|
|
# raise HTTPException(detail="公司已经被注册", status_code=303)
|
|
# passwd_hashed = get_encrypt_password(org_passwd)
|
|
# add_res = crud.company_user_add(db,
|
|
# schemas.CompanyUserAddInfo(company_name=company_name, email=req.email,
|
|
# passwd=passwd_hashed,
|
|
# credit=license_res.credit,
|
|
# verified=True))
|
|
# return {'msg': "注册成功", 'state': 1}
|
|
|
|
|
|
@router.post('/get_user_info', summary='用户信息获取接口', response_model=schemas.GetUserInfoRes)
|
|
def get_user_info(token_data: CompanyUserTokenDataModel = Depends(company_user_auth_util.token_data_depend),
|
|
db: Session = Depends(get_db)):
|
|
user = db.query(CompanyUser).filter(token_data.id == CompanyUser.id).first()
|
|
user_data = user.to_dict()
|
|
if not user:
|
|
raise HTTPException(detail="无用户", status_code=403)
|
|
return schemas.GetUserInfoRes(**user_data, company_name=user.company.name)
|