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)