diff --git a/Config/common.ini b/Config/common.ini index 2c5c5f3..d1420d7 100644 --- a/Config/common.ini +++ b/Config/common.ini @@ -15,7 +15,9 @@ sender = fecribd@fecr.com.cn [auth] jwt_key = MADASDZXC255f +admin_user_jwt_key = R43124TWEVC7785456 company_user_jwt_key = AQDF123ER331IOQWM12MFFAS +institution_user_jwt_key = SAXCASD15124WRTWET [mongo] host = 127.0.0.1 diff --git a/Context/common.py b/Context/common.py index 851a61b..eb35080 100644 --- a/Context/common.py +++ b/Context/common.py @@ -27,6 +27,12 @@ class InstitutionUserTokenDataModel(BaseModel): phone: Optional[str] +class AdminUserTokenDataModel(BaseModel): + id: Optional[str] + email: Optional[str] + phone: Optional[str] + + # 日志 uvicorn_log = getLogger('uvicorn') @@ -60,10 +66,12 @@ image_captcha_verify = ImageCaptchaVerify(redis_pool) # 权限验证工具类 auth_util = AuthUtil[TokenDataModel](secret_key=conf['auth']['jwt_key'], tokenDataModel=TokenDataModel) +admin_user_auth_util = AuthUtil[AdminUserTokenDataModel](secret_key=conf['auth']['admin_user_jwt_key'], tokenDataModel=AdminUserTokenDataModel) company_user_auth_util = AuthUtil[CompanyUserTokenDataModel](secret_key=conf['auth']['company_user_jwt_key'], tokenDataModel=CompanyUserTokenDataModel) -institution_user_auth_util = AuthUtil[InstitutionUserTokenDataModel](secret_key=conf['auth']['company_user_jwt_key'], - tokenDataModel=InstitutionUserTokenDataModel) +institution_user_auth_util = AuthUtil[InstitutionUserTokenDataModel]( + secret_key=conf['auth']['institution_user_jwt_key'], + tokenDataModel=InstitutionUserTokenDataModel) phone_msg_send = PhoneMsgSend(conf['hw_msg']['url'], conf['hw_msg']['app_key'], diff --git a/Mods/User/InstitutionUser/Router.py b/Mods/User/InstitutionUser/Router.py index 69adec7..5f551f1 100644 --- a/Mods/User/InstitutionUser/Router.py +++ b/Mods/User/InstitutionUser/Router.py @@ -2,7 +2,7 @@ from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from Context.common import common_db, conf, email_code_verify, institution_user_auth_util, tianyancha_api, \ - InstitutionUserTokenDataModel + InstitutionUserTokenDataModel, AdminUserTokenDataModel, admin_user_auth_util from Utils.PasswdUtils import get_encrypt_password, decode_b64_pwd from Utils.SqlAlchemyUtils import QueryParams, query_common from Utils.ValidateUtil import Validate @@ -10,8 +10,8 @@ from Utils.VerifyCodeUtils import EmailVerifyType from . import Schemas from . import Crud from .Models import InstitutionUser -from ..UploadFile import Crud as UploadFileCrud -from Utils.OcrUtils import ocr_business_license +# from ..UploadFile import Crud as UploadFileCrud +# from Utils.OcrUtils import ocr_business_license router = APIRouter(tags=["协会用户"], prefix="/institution_user") @@ -74,33 +74,33 @@ def func(body: Schemas.GetEmailVerifyCode): return {'state': 1, "msg": "邮箱验证码已发送至邮箱,请查看"} -@router.post("/register", summary="注册协会用户") -def func(req: Schemas.InstitutionUserRegisterReq, 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_code_verify.check_code(req.email, req.email_verified_code, EmailVerifyType.register) - if not checked: - raise HTTPException(detail='邮箱验证码错误', status_code=303) - file = UploadFileCrud.file_get(db, req.license_file_md) - image_url = conf['app']['host'] + '/wd_bj_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.institution_user_get_by_institution_name(db, company_name) - if item: - raise HTTPException(detail="公司已经被注册", status_code=303) - passwd_hashed = get_encrypt_password(org_passwd) - add_res = Crud.institution_user_add(db, - Schemas.InstitutionUserAddInfo(company_name=company_name, email=req.email, - passwd=passwd_hashed, - verified=True)) - return {'msg': "注册成功", 'state': 1} +# @router.post("/register", summary="注册协会用户") +# def func(req: Schemas.InstitutionUserRegisterReq, 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_code_verify.check_code(req.email, req.email_verified_code, EmailVerifyType.register) +# if not checked: +# raise HTTPException(detail='邮箱验证码错误', status_code=303) +# file = UploadFileCrud.file_get(db, req.license_file_md) +# image_url = conf['app']['host'] + '/wd_bj_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.institution_user_get_by_institution_name(db, company_name) +# if item: +# raise HTTPException(detail="公司已经被注册", status_code=303) +# passwd_hashed = get_encrypt_password(org_passwd) +# add_res = Crud.institution_user_add(db, +# Schemas.InstitutionUserAddInfo(company_name=company_name, email=req.email, +# passwd=passwd_hashed, +# verified=True)) +# return {'msg': "注册成功", 'state': 1} @router.post('/get_user_info', summary='获取用户信息', response_model=Schemas.GetUserInfoRes) @@ -114,25 +114,29 @@ def func(token_data: InstitutionUserTokenDataModel = Depends(institution_user_au @router.post("/institution_user/add", summary="添加协会用户", response_model=Schemas.InstitutionUserAddRes) -def institution_user_add(req: Schemas.InstitutionUserAddReq, db: Session = Depends(common_db.get_db)): +def institution_user_add(req: Schemas.InstitutionUserAddReq, db: Session = Depends(common_db.get_db), + token_data: AdminUserTokenDataModel = Depends(admin_user_auth_util.token_data_depend)): item = Crud.institution_user_add(db, req) return Schemas.InstitutionUserAddRes(**item.to_dict()) @router.post("/institution_user/delete", summary="删除协会用户") -def institution_user_delete(req: Schemas.InstitutionUserDeleteReq, db: Session = Depends(common_db.get_db)): +def institution_user_delete(req: Schemas.InstitutionUserDeleteReq, db: Session = Depends(common_db.get_db), + token_data: AdminUserTokenDataModel = Depends(admin_user_auth_util.token_data_depend)): Crud.institution_user_delete(db, req.id) return "删除成功" @router.post("/institution_user/update", summary="更新协会用户", response_model=Schemas.InstitutionUserUpdateRes) -def institution_user_update(req: Schemas.InstitutionUserUpdateReq, db: Session = Depends(common_db.get_db)): +def institution_user_update(req: Schemas.InstitutionUserUpdateReq, db: Session = Depends(common_db.get_db), + token_data: AdminUserTokenDataModel = Depends(admin_user_auth_util.token_data_depend)): item = Crud.institution_user_update(db, req) return Schemas.InstitutionUserUpdateRes(**item.to_dict()) @router.post("/institution_user/get", summary="获取协会用户", response_model=Schemas.InstitutionUserGetRes) -def institution_user_get(req: Schemas.InstitutionUserGetReq, db: Session = Depends(common_db.get_db)): +def institution_user_get(req: Schemas.InstitutionUserGetReq, db: Session = Depends(common_db.get_db), + token_data: AdminUserTokenDataModel = Depends(admin_user_auth_util.token_data_depend)): item = Crud.institution_user_get(db, req.id) if not item: raise HTTPException(detail="未查询到信息", status_code=404) @@ -140,7 +144,8 @@ def institution_user_get(req: Schemas.InstitutionUserGetReq, db: Session = Depen @router.post("/institution_user/query", summary="查询协会用户", response_model=Schemas.InstitutionUserQueryRes) -def institution_user_query(req: Schemas.InstitutionUserQueryReq, db: Session = Depends(common_db.get_db)): +def institution_user_query(req: Schemas.InstitutionUserQueryReq, db: Session = Depends(common_db.get_db), + token_data: AdminUserTokenDataModel = Depends(admin_user_auth_util.token_data_depend)): count, query = Crud.institution_user_query(db, req) items = [Schemas.InstitutionUserInfo(**item.to_dict()) for item in query] return Schemas.InstitutionUserQueryRes(count=count, items=items) @@ -148,7 +153,9 @@ def institution_user_query(req: Schemas.InstitutionUserQueryReq, db: Session = D @router.post("/institution_user/query_common", summary="通用查询协会用户", response_model=Schemas.InstitutionUserQueryRes) -def institution_user_query_common(req: QueryParams, db: Session = Depends(common_db.get_db)): +def institution_user_query_common(req: QueryParams, db: Session = Depends(common_db.get_db), + token_data: AdminUserTokenDataModel = Depends( + admin_user_auth_util.token_data_depend)): count, query = query_common(db, InstitutionUser, req) items = [Schemas.InstitutionUserInfo(**item.to_dict()) for item in query] return Schemas.InstitutionUserQueryRes(count=count, items=items) diff --git a/Mods/User/Router.py b/Mods/User/Router.py index a9c5918..675aeb9 100644 --- a/Mods/User/Router.py +++ b/Mods/User/Router.py @@ -1,6 +1,8 @@ from fastapi import APIRouter from .CompanyUser import Router as CompanyUserRouter +from .InstitutionUser import Router as InstitutionUserRouter from .UploadFile import Router as UploadFileRouter router = APIRouter(prefix="/user") router.include_router(CompanyUserRouter.router) router.include_router(UploadFileRouter.router) +router.include_router(InstitutionUserRouter.router)