Class: CASClient::ValidationResponse

Inherits:
Object
  • Object
show all
Includes:
XmlResponse
Defined in:
lib/casclient/responses.rb

Overview

Represents a response from the CAS server to a ‘validate’ request (i.e. after validating a service/proxy ticket).

Instance Attribute Summary collapse

Attributes included from XmlResponse

#failure_code, #failure_message, #parse_datetime, #xml

Instance Method Summary collapse

Methods included from XmlResponse

#check_and_parse_xml, #to_s

Constructor Details

#initialize(raw_text) ⇒ ValidationResponse

Returns a new instance of ValidationResponse.



34
35
36
# File 'lib/casclient/responses.rb', line 34

def initialize(raw_text)
  parse(raw_text)
end

Instance Attribute Details

#extra_attributesObject (readonly)

Returns the value of attribute extra_attributes.



32
33
34
# File 'lib/casclient/responses.rb', line 32

def extra_attributes
  @extra_attributes
end

#pgt_iouObject (readonly)

Returns the value of attribute pgt_iou.



32
33
34
# File 'lib/casclient/responses.rb', line 32

def pgt_iou
  @pgt_iou
end

#protocolObject (readonly)

Returns the value of attribute protocol.



32
33
34
# File 'lib/casclient/responses.rb', line 32

def protocol
  @protocol
end

#proxiesObject (readonly)

Returns the value of attribute proxies.



32
33
34
# File 'lib/casclient/responses.rb', line 32

def proxies
  @proxies
end

#userObject (readonly)

Returns the value of attribute user.



32
33
34
# File 'lib/casclient/responses.rb', line 32

def user
  @user
end

Instance Method Details

#is_failure?Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/casclient/responses.rb', line 94

def is_failure?
  @valid == false || (protocol > 1.0 && xml.name == "authenticationFailure" )
end

#is_success?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/casclient/responses.rb', line 90

def is_success?
  @valid == true || (protocol > 1.0 && xml.name == "authenticationSuccess")
end

#parse(raw_text) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/casclient/responses.rb', line 38

def parse(raw_text)
  raise BadResponseException, 
    "CAS response is empty/blank." if raw_text.blank?
  @parse_datetime = Time.now
  
  if raw_text =~ /^(yes|no)\n(.*?)\n$/m
    @protocol = 1.0
    @valid = $~[1] == 'yes'
    @user = $~[2]
    return
  end
  
  @xml = check_and_parse_xml(raw_text)
  
  # if we got this far then we've got a valid XML response, so we're doing CAS 2.0
  @protocol = 2.0
  
  if is_success?
    @user = @xml.elements["cas:user"].text.strip if @xml.elements["cas:user"]
    @pgt_iou =  @xml.elements["cas:proxyGrantingTicket"].text.strip if @xml.elements["cas:proxyGrantingTicket"]
    
    proxy_els = @xml.elements.to_a('//cas:authenticationSuccess/cas:proxies/cas:proxy')
    if proxy_els.size > 0
      @proxies = []
      proxy_els.each do |el|
        @proxies << el.text
      end
    end
    
    @extra_attributes = {}
    @xml.elements.to_a('//cas:authenticationSuccess/*').each do |el|
      @extra_attributes.merge!(Hash.from_xml(el.to_s)) unless el.prefix == 'cas'
    end
    
    # unserialize extra attributes
    @extra_attributes.each do |k, v|
      if v.blank?
        @extra_attributes[k] = nil
      else
        @extra_attributes[k] = YAML.load(v)
      end
    end
  elsif is_failure?
    @failure_code = @xml.elements['//cas:authenticationFailure'].attributes['code']
    @failure_message = @xml.elements['//cas:authenticationFailure'].text.strip
  else
    # this should never happen, since the response should already have been recognized as invalid
    raise BadResponseException, "BAD CAS RESPONSE:\n#{raw_text.inspect}\n\nXML DOC:\n#{doc.inspect}"
  end
  
end