Feature history of this fork, by PR merge date.
#1 (#1)
- features: Aliyun OSS temporary-credential vending (static AK/SK or STS least-privilege, scoped per table/path), with per-user authorization via RFC 8693 token exchange against an external JWKS.
- bugfix: —
#2 (#2)
- features: Expose Prometheus metrics at
/metrics(per-route request counts via Armeria + micrometer). - bugfix: —
#3 (#3)
- features: UI — External Data management (external locations & credentials, with a real credential-vending Validate probe), SCIM user management, permission grant/revoke, and creating tables bound to external locations.
- bugfix: —
#4 (#4)
- features: UI — simplified
read/createpermission model with auto-completedUSE_CATALOG/USE_SCHEMAgrants, per-user access views, and permission-aware button gating. - bugfix: —
#5 (#5)
- features: Standalone UI server (
ui/server.js): serves the built UI and proxies the REST API with a server-side bearer token, so no CRA dev server is needed. - bugfix: —
#6 (#6)
- features: Trusted issuers hot-derived from the external JWKS file (onboard a new signer by appending its public key — no restart), plus user email validation on
createUser. - bugfix: Map unknown-signing-key errors (
JwkException) to 401 instead of a bare 500, and map Aliyun assume-role failures to 4xx by error code (e.g.AccessDenied) instead of a blanket 500.
#10 (#10)
- features: UI — grant access straight from the table and user lists (row-level
⋯ → Grant access, plusAccess detailsfor a user), backed by a read-onlyauth/capabilitiesendpoint so the UI knows whether the caller is a metastore admin instead of guessing. - bugfix: —
#12 (#12)
- features: —
- bugfix:
deploy-uc.shno longer refuses to start whenUC_ALLOWED_ISSUERSis empty, which is the documented default (trusted issuers come from the external JWKS file).
#17 (#17)
- features: UI sign-in, per user. Three entry points, each at an address of its own:
/loginwith Sign in with Microsoft (Entra ID, through an OAuth flow the server hosts end to end, so the client secret never reaches the browser),/login/adminfor the administrator password, and/login/tokenfor an access token the server issued. The application is no longer an entry point and the UI server injects nothing; what a signed-in person sees is filtered by their grants. On the server: the static JWKS file and OIDC discovery now coexist (routed by whether the issuer is registered in the file), the caller resolves through an ordered claim chain (email,preferred_username,upn,sub), discovery is cached per issuer and bounded, and Entra's{tenantid}issuer template is matched segment-wise.deploy-uc.shderives the audience and issuer from the Microsoft settings and starts the UI with the server. - bugfix: The session cookie is now one a browser keeps --
Secureonly when the browser is on HTTPS, andSameSite=Laxrather thanStrict, which was withheld on the cross-site navigation back from the identity provider. The URL transcoder passes a redirect back instead of following it (it relayed the provider's error page as a 400) and ends a bodyless response on its headers instead of leaving the caller waiting. A refused authorization code now names the provider's error code, which separates an expired client secret from a mismatched redirect URI.