From 283feea175e27099b74808f372e4504ad674dde6 Mon Sep 17 00:00:00 2001 From: Dan Milne Date: Sun, 30 Nov 2025 23:13:25 +1100 Subject: [PATCH] Update depenencies, bump versoin --- Dockerfile | 2 + Gemfile | 6 +- Gemfile.lock | 92 ++++++++++----------- README.md | 4 +- app/views/admin/applications/_form.html.erb | 64 ++++++++------ config/initializers/version.rb | 2 +- 6 files changed, 96 insertions(+), 74 deletions(-) diff --git a/Dockerfile b/Dockerfile index b9d3948..e997c41 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,6 +11,8 @@ ARG RUBY_VERSION=3.4.6 FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base +LABEL org.opencontainers.image.source https://github.com/dkam/clinch + # Rails app lives here WORKDIR /rails diff --git a/Gemfile b/Gemfile index 6504235..9a14236 100644 --- a/Gemfile +++ b/Gemfile @@ -35,11 +35,11 @@ gem "jwt", "~> 3.1" gem "webauthn", "~> 3.0" # Public Suffix List for domain parsing -gem "public_suffix", "~> 6.0" +gem "public_suffix", "~> 7.0" # Error tracking and performance monitoring (optional, configured via SENTRY_DSN) -gem "sentry-ruby", "~> 5.18" -gem "sentry-rails", "~> 5.18" +gem "sentry-ruby", "~> 6.2" +gem "sentry-rails", "~> 6.2" # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem "tzinfo-data", platforms: %i[ windows jruby ] diff --git a/Gemfile.lock b/Gemfile.lock index 1facf4a..ea37ad0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -75,8 +75,8 @@ GEM securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) uri (>= 0.13.1) - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) + addressable (2.8.8) + public_suffix (>= 2.0.2, < 8.0) android_key_attestation (0.3.0) ast (2.4.3) base64 (0.3.0) @@ -85,13 +85,13 @@ GEM bigdecimal (3.3.1) bindata (2.5.1) bindex (0.8.1) - bootsnap (1.18.6) + bootsnap (1.19.0) msgpack (~> 1.2) - brakeman (7.1.0) + brakeman (7.1.1) racc builder (3.3.0) - bundler-audit (0.9.2) - bundler (>= 1.2.0, < 3) + bundler-audit (0.9.3) + bundler (>= 1.2.0) thor (~> 1.0) capybara (3.40.0) addressable @@ -107,7 +107,7 @@ GEM logger (~> 1.5) chunky_png (1.4.0) concurrent-ruby (1.3.5) - connection_pool (2.5.4) + connection_pool (2.5.5) cose (1.3.1) cbor (~> 0.5.9) openssl-signature_algorithm (~> 1.0) @@ -119,7 +119,7 @@ GEM dotenv (3.1.8) drb (2.2.3) ed25519 (1.4.0) - erb (5.1.3) + erb (6.0.0) erubi (1.13.1) ffi (1.17.2-aarch64-linux-gnu) ffi (1.17.2-aarch64-linux-musl) @@ -147,10 +147,10 @@ GEM jbuilder (2.14.1) actionview (>= 7.0.0) activesupport (>= 7.0.0) - json (2.15.2) + json (2.16.0) jwt (3.1.2) base64 - kamal (2.8.1) + kamal (2.9.0) activesupport (>= 7.0) base64 (~> 0.2) bcrypt_pbkdf (~> 1.0) @@ -184,7 +184,7 @@ GEM mini_magick (5.3.1) logger mini_mime (1.1.5) - minitest (5.26.0) + minitest (5.26.2) msgpack (1.8.0) net-imap (0.5.12) date @@ -220,7 +220,7 @@ GEM openssl (> 2.0) ostruct (0.6.3) parallel (1.27.0) - parser (3.3.9.0) + parser (3.3.10.0) ast (~> 2.4.1) racc pp (0.6.3) @@ -234,7 +234,7 @@ GEM psych (5.2.6) date stringio - public_suffix (6.0.2) + public_suffix (7.0.0) puma (7.1.0) nio4r (~> 2.0) racc (1.8.1) @@ -278,20 +278,20 @@ GEM zeitwerk (~> 2.6) rainbow (3.1.1) rake (13.3.1) - rdoc (6.15.1) + rdoc (6.16.1) erb psych (>= 4.0.0) tsort regexp_parser (2.11.3) - reline (0.6.2) + reline (0.6.3) io-console (~> 0.5) rexml (3.4.4) rotp (6.3.0) - rqrcode (3.1.0) + rqrcode (3.1.1) chunky_png (~> 1.0) rqrcode_core (~> 2.0) - rqrcode_core (2.0.0) - rubocop (1.81.6) + rqrcode_core (2.0.1) + rubocop (1.81.7) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -302,14 +302,14 @@ GEM rubocop-ast (>= 1.47.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.47.1) + rubocop-ast (1.48.0) parser (>= 3.3.7.2) prism (~> 1.4) rubocop-performance (1.26.1) lint_roller (~> 1.1) rubocop (>= 1.75.0, < 2.0) rubocop-ast (>= 1.47.1, < 2.0) - rubocop-rails (2.33.4) + rubocop-rails (2.34.2) activesupport (>= 4.2.0) lint_roller (~> 1.1) rack (>= 1.1) @@ -323,7 +323,7 @@ GEM ruby-vips (2.2.5) ffi (~> 1.12) logger - rubyzip (3.2.1) + rubyzip (3.2.2) safety_net_attestation (0.5.0) jwt (>= 2.0, < 4.0) securerandom (0.4.1) @@ -333,10 +333,10 @@ GEM rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 4.0) websocket (~> 1.0) - sentry-rails (5.28.0) - railties (>= 5.0) - sentry-ruby (~> 5.28.0) - sentry-ruby (5.28.0) + sentry-rails (6.2.0) + railties (>= 5.2.0) + sentry-ruby (~> 6.2.0) + sentry-ruby (6.2.0) bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) solid_cable (3.0.12) @@ -344,17 +344,17 @@ GEM activejob (>= 7.2) activerecord (>= 7.2) railties (>= 7.2) - solid_cache (1.0.8) + solid_cache (1.0.10) activejob (>= 7.2) activerecord (>= 7.2) railties (>= 7.2) - sqlite3 (2.7.4-aarch64-linux-gnu) - sqlite3 (2.7.4-aarch64-linux-musl) - sqlite3 (2.7.4-arm-linux-gnu) - sqlite3 (2.7.4-arm-linux-musl) - sqlite3 (2.7.4-arm64-darwin) - sqlite3 (2.7.4-x86_64-linux-gnu) - sqlite3 (2.7.4-x86_64-linux-musl) + sqlite3 (2.8.1-aarch64-linux-gnu) + sqlite3 (2.8.1-aarch64-linux-musl) + sqlite3 (2.8.1-arm-linux-gnu) + sqlite3 (2.8.1-arm-linux-musl) + sqlite3 (2.8.1-arm64-darwin) + sqlite3 (2.8.1-x86_64-linux-gnu) + sqlite3 (2.8.1-x86_64-linux-musl) sshkit (1.24.0) base64 logger @@ -364,16 +364,16 @@ GEM ostruct stimulus-rails (1.3.4) railties (>= 6.0.0) - stringio (3.1.7) - tailwindcss-rails (4.3.0) + stringio (3.1.8) + tailwindcss-rails (4.4.0) railties (>= 7.0.0) tailwindcss-ruby (~> 4.0) - tailwindcss-ruby (4.1.13) - tailwindcss-ruby (4.1.13-aarch64-linux-gnu) - tailwindcss-ruby (4.1.13-aarch64-linux-musl) - tailwindcss-ruby (4.1.13-arm64-darwin) - tailwindcss-ruby (4.1.13-x86_64-linux-gnu) - tailwindcss-ruby (4.1.13-x86_64-linux-musl) + tailwindcss-ruby (4.1.16) + tailwindcss-ruby (4.1.16-aarch64-linux-gnu) + tailwindcss-ruby (4.1.16-aarch64-linux-musl) + tailwindcss-ruby (4.1.16-arm64-darwin) + tailwindcss-ruby (4.1.16-x86_64-linux-gnu) + tailwindcss-ruby (4.1.16-x86_64-linux-musl) thor (1.4.0) thruster (0.1.16) thruster (0.1.16-aarch64-linux) @@ -385,7 +385,7 @@ GEM openssl (> 2.0) openssl-signature_algorithm (~> 1.0) tsort (0.2.0) - turbo-rails (2.0.17) + turbo-rails (2.0.20) actionpack (>= 7.1.0) railties (>= 7.1.0) tzinfo (2.0.6) @@ -393,7 +393,7 @@ GEM unicode-display_width (3.2.0) unicode-emoji (~> 4.1) unicode-emoji (4.1.0) - uri (1.1.0) + uri (1.1.1) useragent (0.16.11) web-console (4.2.1) actionview (>= 6.0.0) @@ -442,15 +442,15 @@ DEPENDENCIES kamal letter_opener propshaft - public_suffix (~> 6.0) + public_suffix (~> 7.0) puma (>= 5.0) rails (~> 8.1.1) rotp (~> 6.3) rqrcode (~> 3.1) rubocop-rails-omakase selenium-webdriver - sentry-rails (~> 5.18) - sentry-ruby (~> 5.18) + sentry-rails (~> 6.2) + sentry-ruby (~> 6.2) solid_cable solid_cache sqlite3 (>= 2.1) diff --git a/README.md b/README.md index b39a369..d09eef7 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,12 @@ I've completed all planned features: * Forward Auth configured and working * OIDC provider with auto discovery, refresh tokens, and token revocation * Configurable token expiry per application (access, refresh, ID tokens) +* Backchannel Logout +* Per-application logout / revoke * Invite users by email, assign to groups * Self managed password reset by email * Use Groups to assign Applications ( Family group can access Kavita, Developers can access Gitea ) -* Configurable Group and User custom claims for OIDC token +* Configurable Group, User & App+User custom claims for OIDC token * Display all Applications available to the user on their Dashboard * Display all logged in sessions and OIDC logged in sessions diff --git a/app/views/admin/applications/_form.html.erb b/app/views/admin/applications/_form.html.erb index c65f988..9d62c8a 100644 --- a/app/views/admin/applications/_form.html.erb +++ b/app/views/admin/applications/_form.html.erb @@ -18,34 +18,47 @@
- <%= form.label :icon, "Application Icon", class: "block text-sm font-medium text-gray-700" %> - <% begin %> - <% if application.icon.attached? && application.persisted? && application.icon.blob&.persisted? %> -
- <%= image_tag application.icon, class: "h-16 w-16 rounded-lg object-cover border border-gray-200", alt: "Current icon" %> -
-

Current icon

-

<%= number_to_human_size(application.icon.blob.byte_size) %>

+
+ <%= form.label :icon, "Application Icon", class: "block text-sm font-medium text-gray-700" %> + + + + + Browse icons at dashboardicons.com + +
+ <% if application.icon.attached? && application.persisted? %> + <% begin %> + <%# Only show icon if we can successfully get its URL (blob is persisted) %> + <% if application.icon.blob&.persisted? && application.icon.blob.key.present? %> +
+ <%= image_tag application.icon, class: "h-16 w-16 rounded-lg object-cover border border-gray-200", alt: "Current icon" %> +
+

Current icon

+

<%= number_to_human_size(application.icon.blob.byte_size) %>

+
-
- <% end %> - <% rescue ArgumentError => e %> - <%# Handle case where icon attachment exists but can't generate signed_id %> - <% if e.message.include?("Cannot get a signed_id for a new record") %> -
-

Icon uploaded

-

File will be processed shortly

-
- <% else %> - <%# Re-raise if it's a different error %> - <% raise e %> + <% end %> + <% rescue ArgumentError => e %> + <%# Handle case where icon attachment exists but can't generate signed_id %> + <% if e.message.include?("Cannot get a signed_id for a new record") %> +
+

Icon uploaded

+

File will be processed shortly

+
+ <% else %> + <%# Re-raise if it's a different error %> + <% raise e %> + <% end %> <% end %> <% end %> -
+
+ data-image-paste-target="dropzone" + data-action="dragover->file-drop#dragover dragleave->file-drop#dragleave drop->file-drop#drop paste->image-paste#handlePaste" + tabindex="0">
@@ -56,11 +69,16 @@ <%= form.file_field :icon, accept: "image/png,image/jpg,image/jpeg,image/gif,image/svg+xml", class: "sr-only", - data: { file_drop_target: "input", action: "change->file-drop#handleFiles" } %> + data: { + file_drop_target: "input", + image_paste_target: "input", + action: "change->file-drop#handleFiles" + } %>

or drag and drop

PNG, JPG, GIF, or SVG up to 2MB

+

💡 Tip: Click here and press Ctrl+V (or Cmd+V) to paste an image from your clipboard