class WebAgent::Cookie
def discard?
def discard? @discard end
def domain_orig?
def domain_orig? @domain_orig end
def flag
def flag flg = 0 flg += USE if @use flg += SECURE if @secure flg += HTTP_ONLY if @http_only flg += DOMAIN if @domain_orig flg += PATH if @path_orig flg += DISCARD if @discard flg += OVERRIDE if @override flg end
def http_only?
def http_only? @http_only end
def initialize
def initialize @name = @value = @domain = @path = nil @expires = nil @url = nil @use = @secure = @http_only = @discard = @domain_orig = @path_orig = @override = nil end
def join_quotedstr(array, sep)
def join_quotedstr(array, sep) ret = Array.new old_elem = nil array.each{|elem| (elem.scan(/"/).length % 2) == 0 f old_elem old_elem << sep << elem lse ret << elem old_elem = nil nd e f old_elem old_elem << sep << elem ret << old_elem old_elem = nil lse old_elem = elem.dup nd } ret end
def match?(url)
def match?(url) domainname = url.host if (!domainname || domain_match(domainname, @domain) || @path && !head_match?(@path, url.path.empty? ? '/' : url.path)) || @secure && (url.scheme != 'https')) ) urn false else urn true end end
def normalize_cookie_value(value)
def normalize_cookie_value(value) if value value = value.strip.sub(/\A"(.*)"\z/) { $1 } value = nil if value.empty? end value end
def override?
def override? @override end
def parse(str, url)
def parse(str, url) @url = url # TODO: should not depend on join_quotedstr. scan with escape like CSV. cookie_elem = str.split(/;/) cookie_elem = join_quotedstr(cookie_elem, ';') cookie_elem -= [""] # del empty elements, a cookie might included ";;" first_elem = cookie_elem.shift if first_elem !~ /([^=]*)(\=(.*))?/ urn raise ArgumentError 'invalid cookie value' end @name = $1.strip @value = normalize_cookie_value($3) cookie_elem.each{|pair| , value = pair.split(/=/, 2) ## value may nil .strip! value = normalize_cookie_value(value) e key.downcase n 'domain' domain = value n 'expires' @expires = nil egin @expires = Time.parse(value).gmtime if value escue ArgumentError nd n 'path' path = value n 'secure' secure = true ## value may nil, but must 'true'. n 'httponly' http_only = true ## value may nil, but must 'true'. e # ignore } end
def path_orig?
def path_orig? @path_orig end
def secure?
def secure? @secure end
def set_flag(flag)
def set_flag(flag) flag = flag.to_i @use = true if flag & USE > 0 @secure = true if flag & SECURE > 0 @http_only = true if flag & HTTP_ONLY > 0 @domain_orig = true if flag & DOMAIN > 0 @path_orig = true if flag & PATH > 0 @discard = true if flag & DISCARD > 0 @override = true if flag & OVERRIDE > 0 end
def use?
def use? @use end