discourse/lib/auth/cas_authenticator.rb

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