{
  "url": "https://api.github.com/repos/ZL154/JellyfinSecurity/releases/340757667",
  "assets_url": "https://api.github.com/repos/ZL154/JellyfinSecurity/releases/340757667/assets",
  "upload_url": "https://uploads.github.com/repos/ZL154/JellyfinSecurity/releases/340757667/assets{?name,label}",
  "html_url": "https://github.com/ZL154/JellyfinSecurity/releases/tag/v2.5.12",
  "id": 340757667,
  "author": {
    "login": "github-actions[bot]",
    "id": 41898282,
    "node_id": "MDM6Qm90NDE4OTgyODI=",
    "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
    "gravatar_id": "",
    "url": "https://api.github.com/users/github-actions%5Bbot%5D",
    "html_url": "https://github.com/apps/github-actions",
    "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
    "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
    "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
    "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
    "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
    "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
    "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
    "type": "Bot",
    "user_view_type": "public",
    "site_admin": false
  },
  "node_id": "RE_kwDOSBsskM4UT4yj",
  "tag_name": "v2.5.12",
  "target_commitish": "main",
  "name": "v2.5.12",
  "draft": false,
  "immutable": false,
  "prerelease": false,
  "created_at": "2026-06-17T12:42:29Z",
  "updated_at": "2026-06-17T13:00:10Z",
  "published_at": "2026-06-17T12:43:38Z",
  "assets": [
    {
      "url": "https://api.github.com/repos/ZL154/JellyfinSecurity/releases/assets/450213381",
      "id": 450213381,
      "node_id": "RA_kwDOSBsskM4a1bYF",
      "name": "Jellyfin.Plugin.TwoFactorAuthv2.5.12.0.md5",
      "label": "",
      "uploader": {
        "login": "github-actions[bot]",
        "id": 41898282,
        "node_id": "MDM6Qm90NDE4OTgyODI=",
        "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/github-actions%5Bbot%5D",
        "html_url": "https://github.com/apps/github-actions",
        "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
        "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
        "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
        "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
        "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
        "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
        "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/octet-stream",
      "state": "uploaded",
      "size": 33,
      "digest": "sha256:d88882470dad58a79a8257c20e2da90efc8ab28f9d7f07af03d4c71b78dceb8d",
      "download_count": 1,
      "created_at": "2026-06-17T12:43:39Z",
      "updated_at": "2026-06-17T12:43:39Z",
      "browser_download_url": "https://github.com/ZL154/JellyfinSecurity/releases/download/v2.5.12/Jellyfin.Plugin.TwoFactorAuthv2.5.12.0.md5"
    },
    {
      "url": "https://api.github.com/repos/ZL154/JellyfinSecurity/releases/assets/450213384",
      "id": 450213384,
      "node_id": "RA_kwDOSBsskM4a1bYI",
      "name": "Jellyfin.Plugin.TwoFactorAuthv2.5.12.0.sha256",
      "label": "",
      "uploader": {
        "login": "github-actions[bot]",
        "id": 41898282,
        "node_id": "MDM6Qm90NDE4OTgyODI=",
        "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/github-actions%5Bbot%5D",
        "html_url": "https://github.com/apps/github-actions",
        "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
        "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
        "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
        "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
        "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
        "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
        "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/octet-stream",
      "state": "uploaded",
      "size": 109,
      "digest": "sha256:cdb6ba1c3b502ae912e672b08c2e0cd711505e33d080cd1c386767ebba6d7792",
      "download_count": 0,
      "created_at": "2026-06-17T12:43:39Z",
      "updated_at": "2026-06-17T12:43:39Z",
      "browser_download_url": "https://github.com/ZL154/JellyfinSecurity/releases/download/v2.5.12/Jellyfin.Plugin.TwoFactorAuthv2.5.12.0.sha256"
    },
    {
      "url": "https://api.github.com/repos/ZL154/JellyfinSecurity/releases/assets/450213380",
      "id": 450213380,
      "node_id": "RA_kwDOSBsskM4a1bYE",
      "name": "Jellyfin.Plugin.TwoFactorAuthv2.5.12.0.zip",
      "label": "",
      "uploader": {
        "login": "github-actions[bot]",
        "id": 41898282,
        "node_id": "MDM6Qm90NDE4OTgyODI=",
        "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/github-actions%5Bbot%5D",
        "html_url": "https://github.com/apps/github-actions",
        "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
        "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
        "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
        "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
        "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
        "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
        "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/zip",
      "state": "uploaded",
      "size": 23583116,
      "digest": "sha256:ec58bf4633ebd988919b668c2455ee50a09c5015c00b0c86b0441c752e16ccc5",
      "download_count": 149,
      "created_at": "2026-06-17T12:43:39Z",
      "updated_at": "2026-06-17T12:43:40Z",
      "browser_download_url": "https://github.com/ZL154/JellyfinSecurity/releases/download/v2.5.12/Jellyfin.Plugin.TwoFactorAuthv2.5.12.0.zip"
    },
    {
      "url": "https://api.github.com/repos/ZL154/JellyfinSecurity/releases/assets/450213387",
      "id": 450213387,
      "node_id": "RA_kwDOSBsskM4a1bYL",
      "name": "Jellyfin.Plugin.TwoFactorAuthv2.5.12.0.zip.intoto.jsonl",
      "label": "",
      "uploader": {
        "login": "github-actions[bot]",
        "id": 41898282,
        "node_id": "MDM6Qm90NDE4OTgyODI=",
        "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/github-actions%5Bbot%5D",
        "html_url": "https://github.com/apps/github-actions",
        "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
        "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
        "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
        "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
        "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
        "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
        "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/octet-stream",
      "state": "uploaded",
      "size": 10980,
      "digest": "sha256:29f61bd7412551e29d51a5cdb4e46ca1144787c672dd16ef8cafebb04e836b0b",
      "download_count": 0,
      "created_at": "2026-06-17T12:43:39Z",
      "updated_at": "2026-06-17T12:43:39Z",
      "browser_download_url": "https://github.com/ZL154/JellyfinSecurity/releases/download/v2.5.12/Jellyfin.Plugin.TwoFactorAuthv2.5.12.0.zip.intoto.jsonl"
    },
    {
      "url": "https://api.github.com/repos/ZL154/JellyfinSecurity/releases/assets/450213383",
      "id": 450213383,
      "node_id": "RA_kwDOSBsskM4a1bYH",
      "name": "Jellyfin.Plugin.TwoFactorAuthv2.5.12.0.zip.pem",
      "label": "",
      "uploader": {
        "login": "github-actions[bot]",
        "id": 41898282,
        "node_id": "MDM6Qm90NDE4OTgyODI=",
        "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/github-actions%5Bbot%5D",
        "html_url": "https://github.com/apps/github-actions",
        "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
        "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
        "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
        "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
        "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
        "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
        "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/x-x509-ca-cert",
      "state": "uploaded",
      "size": 3396,
      "digest": "sha256:2d919c63c8dc81505ec31c2d0f4c5863eb21ad2143114ebf5a0bbae819c8d7bd",
      "download_count": 0,
      "created_at": "2026-06-17T12:43:39Z",
      "updated_at": "2026-06-17T12:43:39Z",
      "browser_download_url": "https://github.com/ZL154/JellyfinSecurity/releases/download/v2.5.12/Jellyfin.Plugin.TwoFactorAuthv2.5.12.0.zip.pem"
    },
    {
      "url": "https://api.github.com/repos/ZL154/JellyfinSecurity/releases/assets/450213382",
      "id": 450213382,
      "node_id": "RA_kwDOSBsskM4a1bYG",
      "name": "Jellyfin.Plugin.TwoFactorAuthv2.5.12.0.zip.sig",
      "label": "",
      "uploader": {
        "login": "github-actions[bot]",
        "id": 41898282,
        "node_id": "MDM6Qm90NDE4OTgyODI=",
        "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/github-actions%5Bbot%5D",
        "html_url": "https://github.com/apps/github-actions",
        "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
        "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
        "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
        "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
        "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
        "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
        "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/pgp-signature",
      "state": "uploaded",
      "size": 96,
      "digest": "sha256:76ab78fe85f41f0122d10db4aecf32bfeded3cf1e11fc7d60d6c7327dcd66e3e",
      "download_count": 0,
      "created_at": "2026-06-17T12:43:39Z",
      "updated_at": "2026-06-17T12:43:39Z",
      "browser_download_url": "https://github.com/ZL154/JellyfinSecurity/releases/download/v2.5.12/Jellyfin.Plugin.TwoFactorAuthv2.5.12.0.zip.sig"
    }
  ],
  "tarball_url": "https://api.github.com/repos/ZL154/JellyfinSecurity/tarball/v2.5.12",
  "zipball_url": "https://api.github.com/repos/ZL154/JellyfinSecurity/zipball/v2.5.12",
  "body": "## v2.5.12 \u2014 UI translated everywhere, passwordless 2FA login, Admins-Only fix\n\nA localization + bug-fix release. In-place upgrade from any 2.5.x \u2014 no schema or data migration.\n\n### New\n\n- **Fully translated login & setup UI (#79).** The login page, the 2FA setup page, the admin config UI, and the injected \"Two-Factor Auth\" sidebar entry now all follow Jellyfin's display language \u2014 auto-detected and remembered across restarts \u2014 across all 8 languages (en / de / es / fr / it / ja / pt / zh). The shared scripts are now served on cache-immune paths, so a CDN (e.g. Cloudflare) can no longer freeze the translations behind a `*.js` edge-cache rule.\n- **Hide Jellyfin's built-in \"Forgot password?\" link (#80).** An optional sub-toggle under email recovery removes Jellyfin's native recovery link so users see only the plugin's flow. Defaults on when recovery is enabled; turn it off to keep both.\n\n### Fixed\n\n- **Passwordless 2FA login (#82).** Users whose password is disabled can now sign in through the 2FA login portal with a blank password, matching Jellyfin's standard login page. Both the login page and the server endpoint were over-requiring a password; the server still enforces the real password policy for users who actually have one.\n- **Admins-Only enforcement no longer blocks non-admins (#81).** With enforcement scope set to **Admins Only**, a non-admin without 2FA signing in through the standard portal used to hang on \"Server Unavailable.\" The session safety-check now verifies administrator status and exempts non-admins \u2014 and fails safe (enforces) if a user can't be resolved, so an admin is never accidentally let past.\n- **Android Google sign-in fallback (#64).** When an embedded app WebView trips Google's \"Use secure browsers\" policy (`Error 403: disallowed_useragent`), the in-app sign-in dialog now reliably routes you to **\"Copy sign-in link\" \u2192 open in Chrome**, which always opens a real browser.\n- **Clearer email-claim diagnostics (#80).** When IdP email auto-fill doesn't populate, the log now explains why (auto-fill disabled, no email in the claims \u2014 check the `email` scope / claim name \u2014 or an email already set).\n\n### Dependencies\n\n- **QuestPDF pinned to 2026.5.0** \u2014 a newer build produced a broken recovery-codes PDF.\n- Analyzer and test-only dependency bumps merged; **Microsoft.IdentityModel auto-bumps blocked** (8.19.x breaks OIDC token validation).\n\n### Notes\n\n- Supports Jellyfin 10.11.x (10.11.9 and newer).\n- 266/266 tests pass on .NET 9. Sigstore-signed + SLSA build-provenance attested.\n"
}