yavsc/src/Yavsc.Org/Views/Client
Paul Schneider e76259cca2 Richer Client/Details view for admin triage
The previous Details view was a sketch: a handful of fields, a
half-broken <dt>/<dd> pairing around FrontChannelLogoutUri, and
nothing about token lifetimes, security flags, or collection sizes.
For an admin trying to understand what a given OIDC client actually
does (and why a login flow fails), that meant bouncing between the
list page and the edit page to read off half a dozen scalars.

The new view surfaces the same property surface as Edit.cshtml, but
read-only:

- Two-column layout: Identity + Security on the left, Tokens + Logout
  on the right. Security flags render as a Bootstrap 3 label
  (green/grey) so an admin can spot at a glance whether PKCE, consent,
  offline access, etc. are on or off.
- Lifetimes are formatted in human units (5 min, 2 h, 30 d) instead of
  raw seconds. Zero / unset is rendered as 'default' or '—' to avoid
  the silent-zero footgun.
- Enum-valued columns (AccessTokenType, RefreshTokenUsage,
  RefreshTokenExpiration) are rendered as their integer value since
  that's the on-disk representation in IdentityServer8.
- The Collections list is mirrored from Edit.cshtml so every nested
  editor (scopes, grant types, redirect URIs, CORS origins, IdP
  restrictions, claims, properties, secrets) is one click away.
- Secrets get a structured table: type, description, created/expiration
  timestamps, and a status badge (active / expires soon / expired /
  no expiry). Secret values are never displayed — only the freshly
  generated one, via the existing RegenerateSecret flow — and the
  note is repeated here so the table can't be misread.
- Footer promoted from inline links to a button bar (Edit, Regenerate
  secret, Back to List) for clearer call-to-action.

The ClientSecret property surface was confirmed by decompiling
IdentityServer8.EntityFramework.Storage 8.0.5: Expiration is
DateTime? (null = no expiry), Created is DateTime (default UtcNow).
No MinValue sentinel — previous draft's handling was wrong and has
been replaced by a single DateOrDash(DateTime?) helper.
2026-06-25 20:57:56 +01:00
..
_EditableStringList.cshtml yavsc-org: OAuth2 client admin editor overhaul — per-collection pages + missing fields 2026-06-21 16:53:34 +01:00
Create.cshtml refact and login 2026-03-09 02:07:42 +00:00
Delete.cshtml refact and login 2026-03-09 02:07:42 +00:00
Details.cshtml Richer Client/Details view for admin triage 2026-06-25 20:57:56 +01:00
Edit.cshtml yavsc-org: OAuth2 client admin editor overhaul — per-collection pages + missing fields 2026-06-21 16:53:34 +01:00
EditClaims.cshtml yavsc-org: OAuth2 client admin editor overhaul — per-collection pages + missing fields 2026-06-21 16:53:34 +01:00
EditCorsOrigins.cshtml yavsc-org: OAuth2 client admin editor overhaul — per-collection pages + missing fields 2026-06-21 16:53:34 +01:00
EditGrantTypes.cshtml yavsc-org: OAuth2 client admin editor overhaul — per-collection pages + missing fields 2026-06-21 16:53:34 +01:00
EditIdPRestrictions.cshtml yavsc-org: OAuth2 client admin editor overhaul — per-collection pages + missing fields 2026-06-21 16:53:34 +01:00
EditPostLogoutRedirectUris.cshtml yavsc-org: OAuth2 client admin editor overhaul — per-collection pages + missing fields 2026-06-21 16:53:34 +01:00
EditProperties.cshtml yavsc-org: OAuth2 client admin editor overhaul — per-collection pages + missing fields 2026-06-21 16:53:34 +01:00
EditRedirectUris.cshtml yavsc-org: OAuth2 client admin editor overhaul — per-collection pages + missing fields 2026-06-21 16:53:34 +01:00
EditScopes.cshtml yavsc-org: OAuth2 client admin editor overhaul — per-collection pages + missing fields 2026-06-21 16:53:34 +01:00
EditSecrets.cshtml yavsc-org: OAuth2 client admin editor overhaul — per-collection pages + missing fields 2026-06-21 16:53:34 +01:00
Index.cshtml APi Scopes 2026-03-16 23:16:12 +00:00
RegenerateSecret.cshtml Regenerate the secret 2026-06-19 01:36:08 +01:00
ShowSecret.cshtml Regenerate the secret 2026-06-19 01:36:08 +01:00