class WebAgent::Cookie
def self.parse(str, url)
def self.parse(str, url) cookie = new cookie.parse(str, url) cookie end
def deprecated(old, new)
def deprecated(old, new) warning("WebAgent::Cookie is deprecated and will be replaced with HTTP::Cookie in the near future. Please use Cookie##{new} instead of Cookie##{old} for the replacement.") end
def discard?
def discard? @discard end
def domain
def domain warning('Cookie#domain returns dot-less domain name now. Use Cookie#dot_domain if you need "." at the beginning.') self.original_domain end
def domain_orig?
def domain_orig? @domain_orig end
def flag
def flag deprecated('flag', 'secure, for_domain, etc.') HTTPClient::WebAgentSaver.flag(self) 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? deprecated('http_only?', 'httponly?') self.httponly? 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| if (elem.scan(/"/).length % 2) == 0 if old_elem old_elem << sep << elem else ret << elem old_elem = nil end else if old_elem old_elem << sep << elem ret << old_elem old_elem = nil else old_elem = elem.dup end end } 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')) ) return false else return 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 !~ /([^=]*)(\=(.*))?/ return ## raise ArgumentError 'invalid cookie value' end @name = $1.strip @value = normalize_cookie_value($3) cookie_elem.each{|pair| key, value = pair.split(/=/, 2) ## value may nil key.strip! value = normalize_cookie_value(value) case key.downcase when 'domain' @domain = value when 'expires' @expires = nil begin @expires = Time.parse(value).gmtime if value rescue ArgumentError end when 'path' @path = value when 'secure' @secure = true ## value may nil, but must 'true'. when 'httponly' @http_only = true ## value may nil, but must 'true'. else warn("Unknown key: #{key} = #{value}") end } 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 url
def url deprecated('url', 'origin') self.origin end
def url=(url)
def url=(url) deprecated('url=', 'origin=') self.origin = url end
def use?
def use? @use end