class OmniAuth::Strategies::NwbBis

Public Instance Methods

auth_hash(user_info) click to toggle source
# File lib/omniauth-nwbbis.rb, line 55
def auth_hash(user_info)
    # TODO fail if no email is given
    hash = AuthHash.new(:provider => name, :uid => CGI.unescape(user_info.fetch("a:EMail", "")))

    puts user_info

    first_name = CGI.unescape(user_info.fetch("a:Vorname", ""))
    last_name  = CGI.unescape(user_info.fetch("a:Name", ""))

    hash.info = {
        :name  => "#{first_name} #{last_name}",
        :email => CGI.unescape(user_info.fetch("a:EMail", ""))
    }

    hash
end
bis_credentials() click to toggle source
# File lib/omniauth-nwbbis.rb, line 72
def bis_credentials
    {:bis_user => options.bis_user,
     :bis_password => options.bis_password}
end
callback_phase() click to toggle source
# File lib/omniauth-nwbbis.rb, line 26
def callback_phase
    secdata = request.params["secdata"]

    # Decrypt secdata
    logon_id = decrypt_logon_id(secdata)

    if logon_id.length >= 0
        # Check Login Status
        logon_status = get_logon_status(logon_id)

        login_type = logon_status.fetch("a:LoginTyp", "Unbekannt")
        username = logon_status.fetch("a:Benutzername", nil)

        if login_type == "Login" and not username.nil?
            user_info = get_user_info(username)

            env['omniauth.auth'] = auth_hash(user_info)
            call_app!

            # Create Auth Hash
        else
            # Redirect to NWB Login
            response = Rack::Response.new
            response.redirect "#{options.login_url}#{options.callback_param}" 
            response.finish
        end
    end
end
decrypt_logon_id(secdata) click to toggle source
# File lib/omniauth-nwbbis.rb, line 77
def decrypt_logon_id(secdata)
    xml_body = BisXmlDecryptLogonId.new(secdata).result()
    envelope = BisXmlEnvelope.new(xml_body, bis_credentials).result()

    logon_id = ""

    res = BisClient.execute("http://tempuri.org/INWBService/EntschluesselLogonID", envelope)

    if res.success?
        MultiXml.parser = :ox
        xml = MultiXml.parse(res.body)

        if xml != nil
            logon_id = xml.fetch("s:Envelope", {}).fetch("s:Body", {}).fetch("EntschluesselLogonIDResponse", {}).fetch("EntschluesselLogonIDResult", "")
        end
    end

    logon_id
end
get_logon_status(logon_id) click to toggle source
# File lib/omniauth-nwbbis.rb, line 97
def get_logon_status(logon_id)
    xml_body = BisXmlGetLogonStatus.new(logon_id).result()
    envelope = BisXmlEnvelope.new(xml_body, bis_credentials).result()

    logon_status = {} 

    res = BisClient.execute("http://tempuri.org/INWBService/GibLogonStatus", envelope)

    if res.success?
        MultiXml.parser = :ox
        xml = MultiXml.parse(res.body)

        if xml != nil
            logon_status = xml.fetch("s:Envelope", {}).fetch("s:Body", {}).fetch("GibLogonStatusResponse", {}).fetch("GibLogonStatusResult", "")
        end
    end

    logon_status
end
get_user_info(username) click to toggle source
# File lib/omniauth-nwbbis.rb, line 117
def get_user_info(username)
    xml_body = BisXmlGetUserInfo.new(username).result()
    envelope = BisXmlEnvelope.new(xml_body, bis_credentials).result()

    user_info = {} 

    res = BisClient.execute("http://tempuri.org/INWBService/GibBenutzer", envelope)

    if res.success?
        MultiXml.parser = :ox
        xml = MultiXml.parse(res.body)

        if xml != nil
            user_info = xml.fetch("s:Envelope", {}).fetch("s:Body", {}).fetch("GibBenutzerResponse", {}).fetch("GibBenutzerResult", "")
        end
    end

    user_info 
end
request_phase() click to toggle source
# File lib/omniauth-nwbbis.rb, line 20
def request_phase
    response = Rack::Response.new
    response.redirect "#{options.login_info_url}#{options.callback_param}"
    response.finish
end