59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
from __future__ import annotations
|
||
|
||
import logging
|
||
from typing import Any
|
||
|
||
from app.integrations.seeyon import SeeyonClient
|
||
from app.jobs.base import BaseJob
|
||
|
||
|
||
logger = logging.getLogger("connecthub.extensions.sync_oa_to_didi")
|
||
|
||
|
||
def _mask_token(token: str) -> str:
|
||
token = token or ""
|
||
if len(token) <= 12:
|
||
return "***"
|
||
return f"{token[:6]}***{token[-4:]}"
|
||
|
||
|
||
class SyncOAToDidiTokenJob(BaseJob):
|
||
"""
|
||
示例 Job:演示致远 OA 的 token 获取与日志记录(不做任何业务同步)。
|
||
|
||
public_cfg:
|
||
- base_url: "https://oa.example.com"
|
||
|
||
secret_cfg (解密后):
|
||
- rest_user
|
||
- rest_password
|
||
- loginName (可选)
|
||
"""
|
||
|
||
job_id = "sync_oa_to_didi.token_demo"
|
||
|
||
def run(self, params: dict[str, Any], secrets: dict[str, Any]) -> dict[str, Any]:
|
||
base_url = str(params.get("base_url") or "").strip()
|
||
if not base_url:
|
||
raise ValueError("public_cfg.base_url is required")
|
||
|
||
rest_user = str(secrets.get("rest_user") or "").strip()
|
||
rest_password = str(secrets.get("rest_password") or "").strip()
|
||
login_name = secrets.get("loginName")
|
||
login_name = str(login_name).strip() if login_name else None
|
||
|
||
if not rest_user or not rest_password:
|
||
raise ValueError("secret_cfg.rest_user and secret_cfg.rest_password are required")
|
||
|
||
client = SeeyonClient(base_url=base_url, rest_user=rest_user, rest_password=rest_password, loginName=login_name)
|
||
try:
|
||
token = client.authenticate()
|
||
finally:
|
||
client.close()
|
||
|
||
masked = _mask_token(token)
|
||
logger.info("Seeyon token acquired (masked) token=%s loginName=%s base_url=%s", masked, login_name, base_url)
|
||
return {"token_masked": masked, "loginName": login_name or "", "base_url": base_url}
|
||
|
||
|