48 lines
1.0 KiB
Ruby
48 lines
1.0 KiB
Ruby
class Auth::CasAuthenticator < Auth::Authenticator
|
|
|
|
def name
|
|
'cas'
|
|
end
|
|
|
|
def after_authenticate(auth_token)
|
|
result = Auth::Result.new
|
|
|
|
email = auth_token[:info][:email] if auth_token[:info]
|
|
email ||= if SiteSetting.cas_domainname.present?
|
|
"#{auth_token[:extra][:user]}@#{SiteSetting.cas_domainname}"
|
|
else
|
|
auth_token[:extra][:user]
|
|
end
|
|
|
|
result.email = email
|
|
result.email_valid = true
|
|
|
|
result.username = username = auth_token[:extra][:user]
|
|
|
|
result.name = name = if auth_token[:info] && auth_token[:info][:name]
|
|
auth_token[:info][:name]
|
|
else
|
|
auth_token["uid"]
|
|
end
|
|
|
|
cas_user_id = auth_token["uid"]
|
|
|
|
result.extra_data = {
|
|
cas_user_id: cas_user_id
|
|
}
|
|
|
|
user_info = CasUserInfo.where(:cas_user_id => cas_user_id ).first
|
|
|
|
result.user = user_info.try(:user)
|
|
result.user ||= User.where(email: email).first
|
|
# TODO, create CAS record ?
|
|
|
|
result
|
|
end
|
|
|
|
def register_middleware(omniauth)
|
|
omniauth.provider :cas,
|
|
:host => SiteSetting.cas_hostname
|
|
end
|
|
end
|