wd-smebiz-client/mods/rate/client/company_user/router.py

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)