1 # frozen_string_literal: true
4 extend ActiveSupport::Concern
9 # Read @preferred_auth_provider and @client_app_name from oauth2 authorization request's referer
10 def parse_oauth_referer(referer)
11 referer_query = URI(referer).query if referer
12 return unless referer_query
14 ref_params = CGI.parse referer_query
15 preferred = ref_params["preferred_auth_provider"].first
16 @preferred_auth_provider = preferred if preferred && Settings.key?(:"#{preferred}_auth_id")
17 @client_app_name = Oauth2Application.where(:uid => ref_params["client_id"].first).pick(:name)
19 @hide_signup = ref_params["allow_signup"].first == "false"
23 # return the URL to use for authentication
24 def auth_url(provider, referer = nil)
25 params = { :provider => provider }
28 params[:origin] = request.path
30 params[:origin] = "#{request.path}?referer=#{CGI.escape(referer)}"
31 params[:referer] = referer
38 # process a successful login
39 def successful_login(user, referer = nil)
40 session[:user] = user.id
41 session[:fingerprint] = user.fingerprint
42 session_expires_after 28.days if session[:remember_me]
44 cookies.delete :_osm_anonymous_notes_count
46 target = referer || url_for(:controller => :site, :action => :index)
48 # The user is logged in, so decide where to send them:
50 # - If they haven't seen the contributor terms, send them there.
51 # - If they have a block on them, show them that.
52 # - If they were referred to the login, send them back there.
53 # - Otherwise, send them to the home page.
55 redirect_to account_terms_path(:referer => target)
56 elsif user.blocked_on_view
57 redirect_to user.blocked_on_view, :referer => target
62 session.delete(:remember_me)
66 # process a failed login
67 def failed_login(message, username, referer = nil)
68 flash[:error] = message
70 redirect_to :controller => "sessions", :action => "new", :referer => referer,
71 :username => username, :remember_me => session[:remember_me]
73 session.delete(:remember_me)
78 def unconfirmed_login(user, referer = nil)
79 session[:pending_user] = user.id
81 redirect_to :controller => "confirmations", :action => "confirm",
82 :display_name => user.display_name, :referer => referer
84 session.delete(:remember_me)