1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
require 'uri'
require 'openid/yadis/constants'
require 'openid/yadis/discovery'
require 'openid/extras'
require 'openid/util'
module OpenID
module DiscoverData
include TestDataMixin
include Util
TESTLIST = [
# success, input_name, id_name, result_name
[true, "equiv", "equiv", "xrds"],
[true, "header", "header", "xrds"],
[true, "lowercase_header", "lowercase_header", "xrds"],
[true, "xrds", "xrds", "xrds"],
[true, "xrds_ctparam", "xrds_ctparam", "xrds_ctparam"],
[true, "xrds_ctcase", "xrds_ctcase", "xrds_ctcase"],
[false, "xrds_html", "xrds_html", "xrds_html"],
[true, "redir_equiv", "equiv", "xrds"],
[true, "redir_header", "header", "xrds"],
[true, "redir_xrds", "xrds", "xrds"],
[false, "redir_xrds_html", "xrds_html", "xrds_html"],
[true, "redir_redir_equiv", "equiv", "xrds"],
[false, "404_server_response", nil, nil],
[false, "404_with_header", nil, nil],
[false, "404_with_meta", nil, nil],
[false, "201_server_response", nil, nil],
[false, "500_server_response", nil, nil],
]
@@example_xrds_file = 'example-xrds.xml'
@@default_test_file = 'test1-discover.txt'
@@discover_tests = {}
def readTests(filename)
data = read_data_file(filename, false)
tests = {}
data.split("\f\n", -1).each { |case_|
name, content = case_.split("\n", 2)
tests[name] = content
}
return tests
end
def getData(filename, name)
if !@@discover_tests.member?(filename)
@@discover_tests[filename] = readTests(filename)
end
file_tests = @@discover_tests[filename]
return file_tests[name]
end
def fillTemplate(test_name, template, base_url, example_xrds)
mapping = [
['URL_BASE/', base_url],
['<XRDS Content>', example_xrds],
['YADIS_HEADER', Yadis::YADIS_HEADER_NAME],
['NAME', test_name],
]
mapping.each { |k, v|
template = template.gsub(/#{k}/, v)
}
return template
end
def generateSample(test_name, base_url,
example_xrds=nil,
filename=@@default_test_file)
if example_xrds.nil?
example_xrds = read_data_file(@@example_xrds_file, false)
end
begin
template = getData(filename, test_name)
rescue Errno::ENOENT
raise ArgumentError(filename)
end
return fillTemplate(test_name, template, base_url, example_xrds)
end
def generateResult(base_url, input_name, id_name, result_name, success)
uri = URI::parse(base_url)
input_url = (uri + input_name).to_s
# If the name is None then we expect the protocol to fail, which
# we represent by None
if id_name.nil?
Util.assert(result_name.nil?)
return input_url, DiscoveryFailure
end
result = generateSample(result_name, base_url)
headers, content = result.split("\n\n", 2)
header_lines = headers.split("\n")
ctype = nil
header_lines.each { |header_line|
if header_line.starts_with?('Content-Type:')
_, ctype = header_line.split(':', 2)
ctype = ctype.strip()
break
else
ctype = nil
end
}
id_url = (uri + id_name).to_s
result = Yadis::DiscoveryResult.new(input_url)
result.normalized_uri = id_url
if success
result.xrds_uri = (uri + result_name).to_s
end
result.content_type = ctype
result.response_text = content
return [input_url, result]
end
end
end
|