From fd36fb246b9ab9f2c1d6ad1d93d2d59fa7bb446b Mon Sep 17 00:00:00 2001 From: Pascal Linxweiler Date: Mon, 13 Jul 2026 13:57:25 +0200 Subject: [PATCH] fix: target Jellyfin 10.11 / net9.0 Server 10.11 moved PermissionKind to Jellyfin.Database.Implementations.Enums, SetPermission to a Jellyfin.Data extension, and ChangePassword now takes a user id. Plugin built against 10.10 failed to load silently. Co-Authored-By: Claude Fable 5 --- .../Api/OidcAuthController.cs | 5 +++-- .../Jellyfin.Plugin.OidcAuth.csproj | 8 ++++---- README.md | 2 +- build.yaml | 6 +++--- ...auth_1.0.0.0.zip => oidc-auth_1.0.1.0.zip} | Bin 94681 -> 94840 bytes manifest.json | 12 ++++++------ 6 files changed, 17 insertions(+), 16 deletions(-) rename dist/{oidc-auth_1.0.0.0.zip => oidc-auth_1.0.1.0.zip} (85%) diff --git a/Jellyfin.Plugin.OidcAuth/Api/OidcAuthController.cs b/Jellyfin.Plugin.OidcAuth/Api/OidcAuthController.cs index e954f37..f748701 100644 --- a/Jellyfin.Plugin.OidcAuth/Api/OidcAuthController.cs +++ b/Jellyfin.Plugin.OidcAuth/Api/OidcAuthController.cs @@ -4,7 +4,8 @@ using System.Linq; using System.Text.Json; using System.Threading.Tasks; using IdentityModel.OidcClient; -using Jellyfin.Data.Enums; +using Jellyfin.Data; +using Jellyfin.Database.Implementations.Enums; using Jellyfin.Plugin.OidcAuth.Configuration; using MediaBrowser.Controller.Authentication; using MediaBrowser.Controller.Library; @@ -126,7 +127,7 @@ public class OidcAuthController : ControllerBase // Without a password Jellyfin accepts a blank password for this user // from any client. Users can set their own later in the web profile. await _userManager.ChangePassword( - user, + user.Id, Convert.ToBase64String(System.Security.Cryptography.RandomNumberGenerator.GetBytes(32))) .ConfigureAwait(false); } diff --git a/Jellyfin.Plugin.OidcAuth/Jellyfin.Plugin.OidcAuth.csproj b/Jellyfin.Plugin.OidcAuth/Jellyfin.Plugin.OidcAuth.csproj index 39d525a..e47b883 100644 --- a/Jellyfin.Plugin.OidcAuth/Jellyfin.Plugin.OidcAuth.csproj +++ b/Jellyfin.Plugin.OidcAuth/Jellyfin.Plugin.OidcAuth.csproj @@ -1,17 +1,17 @@ - net8.0 + net9.0 Jellyfin.Plugin.OidcAuth - 1.0.0.0 - 1.0.0.0 + 1.0.1.0 + 1.0.1.0 enable disable true - + diff --git a/README.md b/README.md index b106f9d..53ac657 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ Copy these files from `artifacts/` into a new folder in Jellyfin's plugin direct - `IdentityModel.OidcClient.dll` - `IdentityModel.dll` -Requires Jellyfin 10.10.x. +Requires Jellyfin 10.11.x. ## Configure diff --git a/build.yaml b/build.yaml index a6c868d..df2c90d 100644 --- a/build.yaml +++ b/build.yaml @@ -1,9 +1,9 @@ --- name: "OIDC Auth" guid: "96badb44-9940-4ff0-befc-5f987159152c" -version: "1.0.0.0" -targetAbi: "10.10.0.0" -framework: "net8.0" +version: "1.0.1.0" +targetAbi: "10.11.0.0" +framework: "net9.0" owner: "pascallinxweiler" overview: "Log in to Jellyfin with an OpenID Connect provider" description: > diff --git a/dist/oidc-auth_1.0.0.0.zip b/dist/oidc-auth_1.0.1.0.zip similarity index 85% rename from dist/oidc-auth_1.0.0.0.zip rename to dist/oidc-auth_1.0.1.0.zip index 077b29423b0f5e43e50815f5c2fa68850da6ae7f..02b9fad49bb4e9d0666f3cec87e2cbc4978407a1 100644 GIT binary patch delta 13092 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 delta 12932 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 li!(Se