Add OMNIAUTH_ONLY environment variable to enforce externa log-in (#17288)
* Remove support for OAUTH_REDIRECT_AT_SIGN_IN Fixes #15959 Introduced in #6540, OAUTH_REDIRECT_AT_SIGN_IN allowed skipping the log-in form to instead redirect to the external OmniAuth login provider. However, it did not prevent the log-in form on /about introduced by #10232 from appearing, and completely broke with the introduction of #15228. As I restoring that previous log-in flow without introducing a security vulnerability may require extensive care and knowledge of how OmniAuth works, this commit removes support for OAUTH_REDIRECT_AT_SIGN_IN instead for the time being. * Add OMNIAUTH_ONLY environment variable to enforce external log-in only * Disable user registration when OMNIAUTH_ONLY is set to true * Replace log-in links When OMNIAUTH_ONLY is set with exactly one OmniAuth provider
This commit is contained in:
parent
cfa583fa71
commit
bddd9ba36d
9 changed files with 71 additions and 28 deletions
|
@ -50,13 +50,37 @@ module ApplicationHelper
|
|||
end
|
||||
|
||||
def available_sign_up_path
|
||||
if closed_registrations?
|
||||
if closed_registrations? || omniauth_only?
|
||||
'https://joinmastodon.org/#getting-started'
|
||||
else
|
||||
new_user_registration_path
|
||||
end
|
||||
end
|
||||
|
||||
def omniauth_only?
|
||||
ENV['OMNIAUTH_ONLY'] == 'true'
|
||||
end
|
||||
|
||||
def link_to_login(name = nil, html_options = nil, &block)
|
||||
target = new_user_session_path
|
||||
|
||||
if omniauth_only? && Devise.mappings[:user].omniauthable? && User.omniauth_providers.size == 1
|
||||
target = omniauth_authorize_path(:user, User.omniauth_providers[0])
|
||||
html_options ||= {}
|
||||
html_options[:method] = :post
|
||||
end
|
||||
|
||||
if block_given?
|
||||
link_to(target, html_options, &block)
|
||||
else
|
||||
link_to(name, target, html_options)
|
||||
end
|
||||
end
|
||||
|
||||
def provider_sign_in_link(provider)
|
||||
link_to I18n.t("auth.providers.#{provider}", default: provider.to_s.chomp('_oauth2').capitalize), omniauth_authorize_path(:user, provider), class: "button button-#{provider}", method: :post
|
||||
end
|
||||
|
||||
def open_deletion?
|
||||
Setting.open_deletion
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue