|
|
@ -1,15 +1,25 @@
|
|
|
|
class SsoLoginBoxController < SessionsController
|
|
|
|
class SsoLoginBoxController < SessionsController
|
|
|
|
require 'openssl'
|
|
|
|
require 'openssl'
|
|
|
|
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
|
|
|
|
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
|
|
|
|
|
|
|
|
def self.logout #Token Revocation
|
|
|
|
|
|
|
|
session = OrbitHelper.request.session
|
|
|
|
|
|
|
|
if session[:sso_token]
|
|
|
|
|
|
|
|
token_connection = Faraday.new 'https://cas.ccu.edu.tw/oauth2.0/revoke'
|
|
|
|
|
|
|
|
token_response = token_connection.post do |request|
|
|
|
|
|
|
|
|
request.params['token'] = session[:sso_token]
|
|
|
|
|
|
|
|
request.params['token_type_hint'] = 'access_token'
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
def oauth2_auth_page
|
|
|
|
def oauth2_auth_page
|
|
|
|
session[:referer_url] = params[:referer_url]
|
|
|
|
session[:referer_url] = params[:referer_url]
|
|
|
|
redirect_to "https://nu04.ccu.edu.tw/oauth2.0/authorize?response_type=#{ENV['RESPONSE_TYPE']}&client_id=#{ENV['APP_ID']}&redirect_uri=#{ENV['REDIRECT_URI']}"
|
|
|
|
redirect_to "https://cas.ccu.edu.tw/oauth2.0/authorize?response_type=#{ENV['RESPONSE_TYPE']}&client_id=#{ENV['APP_ID']}&redirect_uri=#{ENV['REDIRECT_URI']}"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
def oauth2_sign_in
|
|
|
|
def oauth2_sign_in
|
|
|
|
# receive code from ntnu
|
|
|
|
# receive code from ntnu
|
|
|
|
code = params[:code]
|
|
|
|
code = params[:code]
|
|
|
|
# request token by code
|
|
|
|
# request token by code
|
|
|
|
token_connection = Faraday.new 'https://nu04.ccu.edu.tw/oauth2.0/accessToken'
|
|
|
|
token_connection = Faraday.new 'https://cas.ccu.edu.tw/oauth2.0/accessToken'
|
|
|
|
token_response = token_connection.post do |request|
|
|
|
|
token_response = token_connection.post do |request|
|
|
|
|
request.params['grant_type'] = 'authorization_code'
|
|
|
|
request.params['grant_type'] = 'authorization_code'
|
|
|
|
request.params['client_id'] = ENV['APP_ID']
|
|
|
|
request.params['client_id'] = ENV['APP_ID']
|
|
|
@ -22,13 +32,14 @@ class SsoLoginBoxController < SessionsController
|
|
|
|
# render :html => {:code => code,:token => token, :response => token_response.body}
|
|
|
|
# render :html => {:code => code,:token => token, :response => token_response.body}
|
|
|
|
|
|
|
|
|
|
|
|
# request user id by token
|
|
|
|
# request user id by token
|
|
|
|
account_connection = Faraday.new 'https://nu04.ccu.edu.tw/oauth2.0/profile'
|
|
|
|
account_connection = Faraday.new 'https://cas.ccu.edu.tw/oauth2.0/profile'
|
|
|
|
account_response = account_connection.get do |request|
|
|
|
|
account_response = account_connection.get do |request|
|
|
|
|
request.params['access_token'] = token
|
|
|
|
request.params['access_token'] = token
|
|
|
|
end
|
|
|
|
end
|
|
|
|
user_name = JSON.parse(account_response.body)['id']
|
|
|
|
user_name = JSON.parse(account_response.body)['id']
|
|
|
|
user = User.find_by(user_name: user_name) rescue nil
|
|
|
|
user = User.find_by(user_name: user_name) rescue nil
|
|
|
|
if !user.nil?
|
|
|
|
if !user.nil?
|
|
|
|
|
|
|
|
session[:sso_token] = token
|
|
|
|
session[:user_id] = user.id
|
|
|
|
session[:user_id] = user.id
|
|
|
|
session[:login_referer] = nil
|
|
|
|
session[:login_referer] = nil
|
|
|
|
if session[:referer_url].present?
|
|
|
|
if session[:referer_url].present?
|
|
|
|