skillhub/web
XiaoSeS f29ac241fc feat(auth): add Feishu as a public login provider
Adds Feishu (Lark) as a public sign-in option: it authenticates a
SkillHub platform account and nothing more. No Organization membership,
no directory sync, no Namespace grants.

Feishu deviates from standard OAuth in two ways this handles:
its userinfo response is wrapped in a {code, msg, data} envelope, and it
reports errors with HTTP 200. FeishuOAuth2UserService unwraps that
envelope into flat attributes; FeishuClaimsExtractor maps them to the
shared OAuthClaims, so account decisions still run through the unified
identity core added in R1-A.

Subject and email semantics, which decide whether a login can reach an
existing account:

- open_id is the only subject. union_id stays in extra rather than
  acting as a fallback: a subject that can change between logins would
  split one person across two platform accounts. Promoting union_id
  later needs an explicit alias migration.
- A blank or missing open_id fails the login instead of binding the
  literal string "null".
- emailVerified is always false. Feishu emails are imported by an
  organization admin and never confirmed with the user, so they carry no
  verification signal and cannot be used to join an existing account.

Operational bounds: the userinfo call has connect and read timeouts so an
unresponsive Feishu endpoint cannot hold a login thread, and the
OAuth2Error description carries only the provider error code, because an
upstream message can quote the request URI and with it the access token.
Like the GitHub and GitLab extractors, the claims extractor logs nothing.

The login button follows the existing config-driven catalog: with no
client id configured, /api/v1/auth/methods does not list Feishu and no
button renders. No frontend code change is needed; the icon resolves by
provider name.

Adapted from the implementation in #696 by @yhd4711499, re-extracted onto
current main with the subject, logging and timeout changes above.

Part of R1-A2 (public Provider adapters) per
openspec/changes/enterprise-identity-platform/rollout-plan.md.

Co-authored-by: yhd4711499 <yhd4711499@users.noreply.github.com>
Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com>
2026-09-21 10:18:37 +08:00
..
docker-entrypoint.d fix(skill): harden SkillHub CLI guide bootstrap (#842) 2026-09-09 20:25:50 +08:00
e2e fix(web): prevent mobile landing overflow 2026-09-13 14:34:10 +08:00
public feat(auth): add Feishu as a public login provider 2026-09-21 10:18:37 +08:00
src feat(skills): let skill owners yank a published version (#866) 2026-09-17 18:48:05 +08:00
.browserslistrc fix(web): restore compatibility with Chromium 83 (Debian 10) 2026-05-09 13:55:50 +08:00
.dockerignore feat(ops): improve Dockerfile caching, add dockerignore, docker profile, Makefile help 2026-03-12 17:50:34 +08:00
.eslintrc.cjs refactor: address code review findings from 2026-03-22 2026-03-23 13:48:23 +08:00
base-path-config.test.ts feat(skill): add first-party SkillHub CLI guide 2026-09-09 09:24:21 +08:00
base-path-config.ts feat(skill): add first-party SkillHub CLI guide 2026-09-09 09:24:21 +08:00
components.json feat(web): implement login page, dashboard, and API token management 2026-03-12 00:13:50 +08:00
Dockerfile feat: add initial RISC-V image support (#725) 2026-08-24 16:37:34 +08:00
index.html fix(web): self-host Inter and JetBrains Mono fonts (#753) 2026-08-25 13:49:08 +08:00
LANDING_PAGE_REDESIGN.md feat(web): redesign homepage with modern landing page 2026-03-12 22:27:58 +08:00
nginx.conf.template fix(skill): harden SkillHub CLI guide bootstrap (#842) 2026-09-09 20:25:50 +08:00
package.json chore(deps): patch web security advisories 2026-09-13 14:34:10 +08:00
playwright.config.ts fix(skill): harden SkillHub CLI guide bootstrap (#842) 2026-09-09 20:25:50 +08:00
playwright.smoke.config.ts test(e2e,ci): migrate web e2e to real API and add PR e2e workflow (#198) 2026-04-01 14:41:23 +08:00
pnpm-lock.yaml chore(deps): patch web security advisories 2026-09-13 14:34:10 +08:00
postcss.config.js feat(web): implement login page, dashboard, and API token management 2026-03-12 00:13:50 +08:00
PREVIEW.md docs: add landing page preview guide 2026-03-12 22:28:31 +08:00
runtime-config.js.template Add extensible auth compatibility layer for private SSO 2026-03-13 18:00:22 +08:00
tailwind.config.ts feat(web): unify landing, dashboard, and paginated lists (#825) 2026-09-09 18:31:18 +08:00
TODO.md fix(web): fix i18n language switching and add translations 2026-03-13 13:42:57 +08:00
tsconfig.json fix(web): isolate ambient types (ISSUE-92) 2026-07-29 10:44:49 +08:00
vite.config.ts fix(skill): harden SkillHub CLI guide bootstrap (#842) 2026-09-09 20:25:50 +08:00