Bug updating OIDC apps. Update readme
This commit is contained in:
20
README.md
20
README.md
@@ -3,9 +3,25 @@
|
|||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> This software is experiemental. If you'd like to try it out, find bugs, security flaws and improvements, please do.
|
> This software is experiemental. If you'd like to try it out, find bugs, security flaws and improvements, please do.
|
||||||
|
|
||||||
**A lightweight, self-hosted identity & SSO portal**
|
**A lightweight, self-hosted identity & SSO / IpD portal**
|
||||||
|
|
||||||
Clinch gives you one place to manage users and lets any web app authenticate against it without maintaining its own user table.
|
Clinch gives you one place to manage users and lets any web app authenticate against it without maintaining its own user table.
|
||||||
|
|
||||||
|
I've completed all planned features:
|
||||||
|
|
||||||
|
* Create Admin user on first login
|
||||||
|
* TOTP ( QR Code ) 2FA, with backup codes ( encrypted at rest )
|
||||||
|
* Passkey generation and login, with detection of Passkey during login
|
||||||
|
* Forward Auth configured and working
|
||||||
|
* OIDC provider with auto discovery working
|
||||||
|
* 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
|
||||||
|
* Display all Applications available to the user on their Dashboard
|
||||||
|
* Display all logged in sessions and OIDC logged in sessions
|
||||||
|
|
||||||
|
What remains now is ensure test coverage,
|
||||||
|
|
||||||
## Why Clinch?
|
## Why Clinch?
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class Application < ApplicationRecord
|
|||||||
validates :app_type, presence: true,
|
validates :app_type, presence: true,
|
||||||
inclusion: { in: %w[oidc forward_auth] }
|
inclusion: { in: %w[oidc forward_auth] }
|
||||||
validates :client_id, uniqueness: { allow_nil: true }
|
validates :client_id, uniqueness: { allow_nil: true }
|
||||||
validates :client_secret, presence: true, if: :oidc?
|
validates :client_secret, presence: true, if: -> { oidc? && client_secret_changed? }
|
||||||
validates :domain_pattern, presence: true, uniqueness: { case_sensitive: false }, if: :forward_auth?
|
validates :domain_pattern, presence: true, uniqueness: { case_sensitive: false }, if: :forward_auth?
|
||||||
validates :landing_url, format: { with: URI::regexp(%w[http https]), allow_nil: true, message: "must be a valid URL" }
|
validates :landing_url, format: { with: URI::regexp(%w[http https]), allow_nil: true, message: "must be a valid URL" }
|
||||||
|
|
||||||
|
|||||||
45
app/views/totp/regenerate_backup_codes.html.erb
Normal file
45
app/views/totp/regenerate_backup_codes.html.erb
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<div class="max-w-2xl mx-auto">
|
||||||
|
<div class="mb-8">
|
||||||
|
<h1 class="text-3xl font-bold text-gray-900">Regenerate Backup Codes</h1>
|
||||||
|
<p class="mt-2 text-sm text-gray-600">
|
||||||
|
This will invalidate all existing backup codes and generate new ones.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-white shadow sm:rounded-lg">
|
||||||
|
<div class="px-4 py-5 sm:p-6">
|
||||||
|
<div class="rounded-md bg-yellow-50 p-4 mb-6">
|
||||||
|
<div class="flex">
|
||||||
|
<svg class="h-5 w-5 text-yellow-400 mr-3 flex-shrink-0" viewBox="0 0 20 20" fill="currentColor">
|
||||||
|
<path fill-rule="evenodd" d="M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd" />
|
||||||
|
</svg>
|
||||||
|
<div class="text-sm text-yellow-800">
|
||||||
|
<p class="font-medium">Important Security Notice</p>
|
||||||
|
<p class="mt-1">All your current backup codes will become invalid after this action. Make sure you're ready to save the new codes.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= form_with(url: create_new_backup_codes_totp_path, method: :post, class: "space-y-6") do |form| %>
|
||||||
|
<div>
|
||||||
|
<%= form.label :password, "Enter your password to confirm", class: "block text-sm font-medium text-gray-700" %>
|
||||||
|
<div class="mt-1">
|
||||||
|
<%= form.password_field :password, required: true,
|
||||||
|
class: "block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 placeholder-gray-400 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-blue-500 sm:text-sm" %>
|
||||||
|
</div>
|
||||||
|
<p class="mt-2 text-sm text-gray-500">
|
||||||
|
This is required to verify your identity before regenerating backup codes.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex gap-3">
|
||||||
|
<%= form.submit "Generate New Backup Codes",
|
||||||
|
class: "inline-flex justify-center rounded-md border border-transparent bg-blue-600 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2" %>
|
||||||
|
|
||||||
|
<%= link_to "Cancel", profile_path,
|
||||||
|
class: "inline-flex justify-center rounded-md border border-gray-300 bg-white py-2 px-4 text-sm font-medium text-gray-700 shadow-sm hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2" %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
Reference in New Issue
Block a user