services/api/app/controllers/user_sessions_controller.rb
# login - Just bounce to /auth/joshid. The only purpose of this function is
# to save the return_to parameter (if it exists; see the application
# controller). /auth/joshid bypasses the application controller.
Just bounce to /auth/joshid. The only purpose of this function is
to save the return_to parameter (if it exists; see the application
controller). /auth/joshid bypasses the application controller.
Just bounce to / auth / joshid . The only purpose of this function is to save the return_to parameter ( if it exists ; see the application controller ) . / auth / joshid bypasses the application controller .
def login
    if params[:remote] !~ /^[0-9a-z]{5}$/ && !params[:remote].nil?
      return send_error 'Invalid remote cluster id', status: 400
    end
    if current_user and params[:return_to]
       FIXME: if current_user has never authorized this app before,
       ask for confirmation here!
      return send_api_token_to(params[:return_to], current_user, params[:remote])
    end
    p = []
    p << "auth_provider={CGI.escape(params[:auth_provider])}" if params[:auth_provider]
    if !Rails.configuration.Login.LoginCluster.empty? and Rails.configuration.Login.LoginCluster != Rails.configuration.ClusterID
      host = ApiClientAuthorization.remote_host(uuid_prefix: Rails.configuration.Login.LoginCluster)
      if not host
        raise "LoginCluster {Rails.configuration.Login.LoginCluster} missing from RemoteClusters"
      end
      scheme = "https"
      cluster = Rails.configuration.RemoteClusters[Rails.configuration.Login.LoginCluster]
      if cluster and cluster['Scheme'] and !cluster['Scheme'].empty?
        scheme = cluster['Scheme']
      end
      login_cluster = "{scheme}://{host}"
      p << "remote={CGI.escape(params[:remote])}" if params[:remote]
      p << "return_to={CGI.escape(params[:return_to])}" if params[:return_to]
      redirect_to "{login_cluster}/login?{p.join('&')}"
    else
      if params[:return_to]
         Encode remote param inside callback's return_to, so that we'll get it on
         create() after login.
        remote_param = params[:remote].nil? ? '' : params[:remote]
        p << "return_to={CGI.escape(remote_param + ',' + params[:return_to])}"
      end
      redirect_to "/auth/joshid?{p.join('&')}"
    end
  end
def login if params [ :remote ] !~ / ^[0-9a-z]{5}$ / && ! params [ :remote ] . nil? return send_error 'Invalid remote cluster id' , status : 400 end if current_user and params [ :return_to ] return send_api_token_to ( params [ :return_to ] , current_user , params [ :remote ] ) end p = [ ] p << "auth_provider=#{CGI.escape(params[:auth_provider])}" if params [ :auth_provider ] if ! Rails . configuration . Login . LoginCluster . empty? and Rails . configuration . Login . LoginCluster != Rails . configuration . ClusterID host = ApiClientAuthorization . remote_host ( uuid_prefix : Rails . configuration . Login . LoginCluster ) if not host raise "LoginCluster #{Rails.configuration.Login.LoginCluster} missing from RemoteClusters" end scheme = "https" cluster = Rails . configuration . RemoteClusters [ Rails . configuration . Login . LoginCluster ] if cluster and cluster [ 'Scheme' ] and ! cluster [ 'Scheme' ] . empty? scheme = cluster [ 'Scheme' ] end login_cluster = "#{scheme}://#{host}" p << "remote=#{CGI.escape(params[:remote])}" if params [ :remote ] p << "return_to=#{CGI.escape(params[:return_to])}" if params [ :return_to ] redirect_to "#{login_cluster}/login?#{p.join('&')}" else if params [ :return_to ] remote_param = params [ :remote ] . nil? ? '' : params [ :remote ] p << "return_to=#{CGI.escape(remote_param + ',' + params[:return_to])}" end redirect_to "/auth/joshid?#{p.join('&')}" end end
login - Just bounce to /auth/joshid.
login - Just bounce to / auth / joshid .
# Already logged in; just need to send a token to the requesting # API client. # # FIXME: if current_user has never authorized this app before, # ask for confirmation here! # Encode remote param inside callback's return_to, so that we'll get it on # create() after login.