|
@@ -513,6 +513,30 @@ OAUTH_GROUPS_CLAIM = PersistentConfig(
|
|
|
os.environ.get("OAUTH_GROUPS_CLAIM", os.environ.get("OAUTH_GROUP_CLAIM", "groups")),
|
|
|
)
|
|
|
|
|
|
+FEISHU_CLIENT_ID = PersistentConfig(
|
|
|
+ "FEISHU_CLIENT_ID",
|
|
|
+ "oauth.feishu.client_id",
|
|
|
+ os.environ.get("FEISHU_CLIENT_ID", ""),
|
|
|
+)
|
|
|
+
|
|
|
+FEISHU_CLIENT_SECRET = PersistentConfig(
|
|
|
+ "FEISHU_CLIENT_SECRET",
|
|
|
+ "oauth.feishu.client_secret",
|
|
|
+ os.environ.get("FEISHU_CLIENT_SECRET", ""),
|
|
|
+)
|
|
|
+
|
|
|
+FEISHU_OAUTH_SCOPE = PersistentConfig(
|
|
|
+ "FEISHU_OAUTH_SCOPE",
|
|
|
+ "oauth.feishu.scope",
|
|
|
+ os.environ.get("FEISHU_OAUTH_SCOPE", "contact:user.base:readonly"),
|
|
|
+)
|
|
|
+
|
|
|
+FEISHU_REDIRECT_URI = PersistentConfig(
|
|
|
+ "FEISHU_REDIRECT_URI",
|
|
|
+ "oauth.feishu.redirect_uri",
|
|
|
+ os.environ.get("FEISHU_REDIRECT_URI", ""),
|
|
|
+)
|
|
|
+
|
|
|
ENABLE_OAUTH_ROLE_MANAGEMENT = PersistentConfig(
|
|
|
"ENABLE_OAUTH_ROLE_MANAGEMENT",
|
|
|
"oauth.enable_role_mapping",
|
|
@@ -705,6 +729,32 @@ def load_oauth_providers():
|
|
|
"register": oidc_oauth_register,
|
|
|
}
|
|
|
|
|
|
+ if FEISHU_CLIENT_ID.value and FEISHU_CLIENT_SECRET.value:
|
|
|
+ def feishu_oauth_register(client: OAuth):
|
|
|
+ client.register(
|
|
|
+ name="feishu",
|
|
|
+ client_id=FEISHU_CLIENT_ID.value,
|
|
|
+ client_secret=FEISHU_CLIENT_SECRET.value,
|
|
|
+ access_token_url="https://open.feishu.cn/open-apis/authen/v2/oauth/token",
|
|
|
+ authorize_url="https://accounts.feishu.cn/open-apis/authen/v1/authorize",
|
|
|
+ api_base_url="https://open.feishu.cn/open-apis",
|
|
|
+ userinfo_endpoint="https://open.feishu.cn/open-apis/authen/v1/user_info",
|
|
|
+ client_kwargs={
|
|
|
+ "scope": FEISHU_OAUTH_SCOPE.value,
|
|
|
+ **(
|
|
|
+ {"timeout": int(OAUTH_TIMEOUT.value)}
|
|
|
+ if OAUTH_TIMEOUT.value
|
|
|
+ else {}
|
|
|
+ ),
|
|
|
+ },
|
|
|
+ redirect_uri=FEISHU_REDIRECT_URI.value,
|
|
|
+ )
|
|
|
+
|
|
|
+ OAUTH_PROVIDERS["feishu"] = {
|
|
|
+ "register": feishu_oauth_register,
|
|
|
+ "sub_claim": "user_id",
|
|
|
+ }
|
|
|
+
|
|
|
configured_providers = []
|
|
|
if GOOGLE_CLIENT_ID.value:
|
|
|
configured_providers.append("Google")
|
|
@@ -712,6 +762,8 @@ def load_oauth_providers():
|
|
|
configured_providers.append("Microsoft")
|
|
|
if GITHUB_CLIENT_ID.value:
|
|
|
configured_providers.append("GitHub")
|
|
|
+ if FEISHU_CLIENT_ID.value:
|
|
|
+ configured_providers.append("Feishu")
|
|
|
|
|
|
if configured_providers and not OPENID_PROVIDER_URL.value:
|
|
|
provider_list = ", ".join(configured_providers)
|