entp-ruby-openid 2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. data/CHANGELOG +215 -0
  2. data/INSTALL +47 -0
  3. data/LICENSE +210 -0
  4. data/NOTICE +2 -0
  5. data/README +85 -0
  6. data/UPGRADE +127 -0
  7. data/admin/runtests.rb +45 -0
  8. data/examples/README +32 -0
  9. data/examples/active_record_openid_store/README +58 -0
  10. data/examples/active_record_openid_store/XXX_add_open_id_store_to_db.rb +24 -0
  11. data/examples/active_record_openid_store/XXX_upgrade_open_id_store.rb +26 -0
  12. data/examples/active_record_openid_store/init.rb +8 -0
  13. data/examples/active_record_openid_store/lib/association.rb +10 -0
  14. data/examples/active_record_openid_store/lib/nonce.rb +3 -0
  15. data/examples/active_record_openid_store/lib/open_id_setting.rb +4 -0
  16. data/examples/active_record_openid_store/lib/openid_ar_store.rb +57 -0
  17. data/examples/active_record_openid_store/test/store_test.rb +212 -0
  18. data/examples/discover +49 -0
  19. data/examples/rails_openid/README +153 -0
  20. data/examples/rails_openid/Rakefile +10 -0
  21. data/examples/rails_openid/app/controllers/application.rb +4 -0
  22. data/examples/rails_openid/app/controllers/consumer_controller.rb +125 -0
  23. data/examples/rails_openid/app/controllers/login_controller.rb +45 -0
  24. data/examples/rails_openid/app/controllers/server_controller.rb +265 -0
  25. data/examples/rails_openid/app/helpers/application_helper.rb +3 -0
  26. data/examples/rails_openid/app/helpers/login_helper.rb +2 -0
  27. data/examples/rails_openid/app/helpers/server_helper.rb +9 -0
  28. data/examples/rails_openid/app/views/consumer/index.rhtml +81 -0
  29. data/examples/rails_openid/app/views/layouts/server.rhtml +68 -0
  30. data/examples/rails_openid/app/views/login/index.rhtml +56 -0
  31. data/examples/rails_openid/app/views/server/decide.rhtml +26 -0
  32. data/examples/rails_openid/config/boot.rb +19 -0
  33. data/examples/rails_openid/config/database.yml +74 -0
  34. data/examples/rails_openid/config/environment.rb +54 -0
  35. data/examples/rails_openid/config/environments/development.rb +19 -0
  36. data/examples/rails_openid/config/environments/production.rb +19 -0
  37. data/examples/rails_openid/config/environments/test.rb +19 -0
  38. data/examples/rails_openid/config/routes.rb +24 -0
  39. data/examples/rails_openid/doc/README_FOR_APP +2 -0
  40. data/examples/rails_openid/public/404.html +8 -0
  41. data/examples/rails_openid/public/500.html +8 -0
  42. data/examples/rails_openid/public/dispatch.cgi +12 -0
  43. data/examples/rails_openid/public/dispatch.fcgi +26 -0
  44. data/examples/rails_openid/public/dispatch.rb +12 -0
  45. data/examples/rails_openid/public/favicon.ico +0 -0
  46. data/examples/rails_openid/public/images/openid_login_bg.gif +0 -0
  47. data/examples/rails_openid/public/javascripts/controls.js +750 -0
  48. data/examples/rails_openid/public/javascripts/dragdrop.js +584 -0
  49. data/examples/rails_openid/public/javascripts/effects.js +854 -0
  50. data/examples/rails_openid/public/javascripts/prototype.js +1785 -0
  51. data/examples/rails_openid/public/robots.txt +1 -0
  52. data/examples/rails_openid/script/about +3 -0
  53. data/examples/rails_openid/script/breakpointer +3 -0
  54. data/examples/rails_openid/script/console +3 -0
  55. data/examples/rails_openid/script/destroy +3 -0
  56. data/examples/rails_openid/script/generate +3 -0
  57. data/examples/rails_openid/script/performance/benchmarker +3 -0
  58. data/examples/rails_openid/script/performance/profiler +3 -0
  59. data/examples/rails_openid/script/plugin +3 -0
  60. data/examples/rails_openid/script/process/reaper +3 -0
  61. data/examples/rails_openid/script/process/spawner +3 -0
  62. data/examples/rails_openid/script/process/spinner +3 -0
  63. data/examples/rails_openid/script/runner +3 -0
  64. data/examples/rails_openid/script/server +3 -0
  65. data/examples/rails_openid/test/functional/login_controller_test.rb +18 -0
  66. data/examples/rails_openid/test/functional/server_controller_test.rb +18 -0
  67. data/examples/rails_openid/test/test_helper.rb +28 -0
  68. data/lib/hmac/hmac.rb +112 -0
  69. data/lib/hmac/sha1.rb +11 -0
  70. data/lib/hmac/sha2.rb +25 -0
  71. data/lib/openid.rb +22 -0
  72. data/lib/openid/association.rb +249 -0
  73. data/lib/openid/consumer.rb +395 -0
  74. data/lib/openid/consumer/associationmanager.rb +344 -0
  75. data/lib/openid/consumer/checkid_request.rb +186 -0
  76. data/lib/openid/consumer/discovery.rb +497 -0
  77. data/lib/openid/consumer/discovery_manager.rb +123 -0
  78. data/lib/openid/consumer/html_parse.rb +134 -0
  79. data/lib/openid/consumer/idres.rb +523 -0
  80. data/lib/openid/consumer/responses.rb +150 -0
  81. data/lib/openid/cryptutil.rb +115 -0
  82. data/lib/openid/dh.rb +89 -0
  83. data/lib/openid/extension.rb +39 -0
  84. data/lib/openid/extensions/ax.rb +539 -0
  85. data/lib/openid/extensions/oauth.rb +91 -0
  86. data/lib/openid/extensions/pape.rb +179 -0
  87. data/lib/openid/extensions/sreg.rb +277 -0
  88. data/lib/openid/extras.rb +11 -0
  89. data/lib/openid/fetchers.rb +258 -0
  90. data/lib/openid/kvform.rb +136 -0
  91. data/lib/openid/kvpost.rb +58 -0
  92. data/lib/openid/message.rb +553 -0
  93. data/lib/openid/protocolerror.rb +12 -0
  94. data/lib/openid/server.rb +1544 -0
  95. data/lib/openid/store.rb +10 -0
  96. data/lib/openid/store/filesystem.rb +272 -0
  97. data/lib/openid/store/interface.rb +75 -0
  98. data/lib/openid/store/memcache.rb +109 -0
  99. data/lib/openid/store/memory.rb +84 -0
  100. data/lib/openid/store/nonce.rb +68 -0
  101. data/lib/openid/trustroot.rb +349 -0
  102. data/lib/openid/urinorm.rb +75 -0
  103. data/lib/openid/util.rb +119 -0
  104. data/lib/openid/version.rb +3 -0
  105. data/lib/openid/yadis.rb +15 -0
  106. data/lib/openid/yadis/accept.rb +148 -0
  107. data/lib/openid/yadis/constants.rb +21 -0
  108. data/lib/openid/yadis/discovery.rb +153 -0
  109. data/lib/openid/yadis/filters.rb +205 -0
  110. data/lib/openid/yadis/htmltokenizer.rb +305 -0
  111. data/lib/openid/yadis/parsehtml.rb +45 -0
  112. data/lib/openid/yadis/services.rb +42 -0
  113. data/lib/openid/yadis/xrds.rb +155 -0
  114. data/lib/openid/yadis/xri.rb +90 -0
  115. data/lib/openid/yadis/xrires.rb +91 -0
  116. data/test/data/test_discover/openid_utf8.html +11 -0
  117. data/test/support/test_data_mixin.rb +127 -0
  118. data/test/support/test_util.rb +53 -0
  119. data/test/support/yadis_data.rb +131 -0
  120. data/test/support/yadis_data/accept.txt +124 -0
  121. data/test/support/yadis_data/dh.txt +29 -0
  122. data/test/support/yadis_data/example-xrds.xml +14 -0
  123. data/test/support/yadis_data/linkparse.txt +587 -0
  124. data/test/support/yadis_data/n2b64 +650 -0
  125. data/test/support/yadis_data/test1-discover.txt +137 -0
  126. data/test/support/yadis_data/test1-parsehtml.txt +152 -0
  127. data/test/support/yadis_data/test_discover/malformed_meta_tag.html +19 -0
  128. data/test/support/yadis_data/test_discover/openid.html +11 -0
  129. data/test/support/yadis_data/test_discover/openid2.html +11 -0
  130. data/test/support/yadis_data/test_discover/openid2_xrds.xml +12 -0
  131. data/test/support/yadis_data/test_discover/openid2_xrds_no_local_id.xml +11 -0
  132. data/test/support/yadis_data/test_discover/openid_1_and_2.html +11 -0
  133. data/test/support/yadis_data/test_discover/openid_1_and_2_xrds.xml +16 -0
  134. data/test/support/yadis_data/test_discover/openid_1_and_2_xrds_bad_delegate.xml +17 -0
  135. data/test/support/yadis_data/test_discover/openid_and_yadis.html +12 -0
  136. data/test/support/yadis_data/test_discover/openid_no_delegate.html +10 -0
  137. data/test/support/yadis_data/test_discover/openid_utf8.html +11 -0
  138. data/test/support/yadis_data/test_discover/yadis_0entries.xml +12 -0
  139. data/test/support/yadis_data/test_discover/yadis_2_bad_local_id.xml +15 -0
  140. data/test/support/yadis_data/test_discover/yadis_2entries_delegate.xml +22 -0
  141. data/test/support/yadis_data/test_discover/yadis_2entries_idp.xml +21 -0
  142. data/test/support/yadis_data/test_discover/yadis_another_delegate.xml +14 -0
  143. data/test/support/yadis_data/test_discover/yadis_idp.xml +12 -0
  144. data/test/support/yadis_data/test_discover/yadis_idp_delegate.xml +13 -0
  145. data/test/support/yadis_data/test_discover/yadis_no_delegate.xml +11 -0
  146. data/test/support/yadis_data/test_xrds/=j3h.2007.11.14.xrds +25 -0
  147. data/test/support/yadis_data/test_xrds/README +12 -0
  148. data/test/support/yadis_data/test_xrds/delegated-20060809-r1.xrds +34 -0
  149. data/test/support/yadis_data/test_xrds/delegated-20060809-r2.xrds +34 -0
  150. data/test/support/yadis_data/test_xrds/delegated-20060809.xrds +34 -0
  151. data/test/support/yadis_data/test_xrds/no-xrd.xml +7 -0
  152. data/test/support/yadis_data/test_xrds/not-xrds.xml +2 -0
  153. data/test/support/yadis_data/test_xrds/prefixsometimes.xrds +34 -0
  154. data/test/support/yadis_data/test_xrds/ref.xrds +109 -0
  155. data/test/support/yadis_data/test_xrds/sometimesprefix.xrds +34 -0
  156. data/test/support/yadis_data/test_xrds/spoof1.xrds +25 -0
  157. data/test/support/yadis_data/test_xrds/spoof2.xrds +25 -0
  158. data/test/support/yadis_data/test_xrds/spoof3.xrds +37 -0
  159. data/test/support/yadis_data/test_xrds/status222.xrds +9 -0
  160. data/test/support/yadis_data/test_xrds/subsegments.xrds +58 -0
  161. data/test/support/yadis_data/test_xrds/valid-populated-xrds.xml +39 -0
  162. data/test/support/yadis_data/trustroot.txt +153 -0
  163. data/test/support/yadis_data/urinorm.txt +79 -0
  164. data/test/test_accept.rb +170 -0
  165. data/test/test_association.rb +268 -0
  166. data/test/test_associationmanager.rb +918 -0
  167. data/test/test_ax.rb +690 -0
  168. data/test/test_checkid_request.rb +293 -0
  169. data/test/test_consumer.rb +260 -0
  170. data/test/test_cryptutil.rb +119 -0
  171. data/test/test_dh.rb +85 -0
  172. data/test/test_discover.rb +848 -0
  173. data/test/test_discovery_manager.rb +259 -0
  174. data/test/test_extension.rb +46 -0
  175. data/test/test_extras.rb +35 -0
  176. data/test/test_fetchers.rb +554 -0
  177. data/test/test_filters.rb +269 -0
  178. data/test/test_helper.rb +4 -0
  179. data/test/test_idres.rb +961 -0
  180. data/test/test_kvform.rb +164 -0
  181. data/test/test_kvpost.rb +64 -0
  182. data/test/test_linkparse.rb +100 -0
  183. data/test/test_message.rb +1115 -0
  184. data/test/test_nonce.rb +89 -0
  185. data/test/test_oauth.rb +176 -0
  186. data/test/test_openid_yadis.rb +177 -0
  187. data/test/test_pape.rb +248 -0
  188. data/test/test_parsehtml.rb +79 -0
  189. data/test/test_responses.rb +63 -0
  190. data/test/test_server.rb +2455 -0
  191. data/test/test_sreg.rb +479 -0
  192. data/test/test_stores.rb +292 -0
  193. data/test/test_trustroot.rb +111 -0
  194. data/test/test_urinorm.rb +34 -0
  195. data/test/test_util.rb +145 -0
  196. data/test/test_xrds.rb +167 -0
  197. data/test/test_xri.rb +48 -0
  198. data/test/test_xrires.rb +67 -0
  199. data/test/test_yadis_discovery.rb +218 -0
  200. metadata +268 -0
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <XRDS ref="xri://=keturn*isDrummond" xmlns="xri://$xrds">
3
+ <XRD xmlns="xri://$xrd*($v*2.0)">
4
+ <Query>*keturn</Query>
5
+ <ProviderID>xri://=</ProviderID>
6
+ <LocalID>!E4</LocalID>
7
+ <CanonicalID>=!E4</CanonicalID>
8
+
9
+ <Service>
10
+ <Type>xri://$res*auth*($v*2.0)</Type>
11
+ <URI>http://keturn.example.com/resolve/</URI>
12
+ <ProviderID>=!E4</ProviderID>
13
+ </Service>
14
+ </XRD>
15
+ <XRD xmlns="xri://$xrd*($v*2.0)">
16
+ <Query>*isDrummond</Query>
17
+ <ProviderID>=!E4</ProviderID>
18
+ <LocalID>!D2</LocalID>
19
+ <CanonicalID>=!D2</CanonicalID>
20
+ <Service>
21
+ <Type>http://openid.net/signon/1.0</Type>
22
+ <URI>http://keturn.example.com/openid</URI>
23
+ </Service>
24
+ </XRD>
25
+ </XRDS>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <XRDS ref="xri://=keturn*isDrummond" xmlns="xri://$xrds">
3
+ <XRD xmlns="xri://$xrd*($v*2.0)">
4
+ <Query>*keturn</Query>
5
+ <ProviderID>xri://=</ProviderID>
6
+ <LocalID>!E4</LocalID>
7
+ <CanonicalID>=!E4</CanonicalID>
8
+
9
+ <Service>
10
+ <Type>xri://$res*auth*($v*2.0)</Type>
11
+ <URI>http://keturn.example.com/resolve/</URI>
12
+ <ProviderID>xri://=</ProviderID>
13
+ </Service>
14
+ </XRD>
15
+ <XRD xmlns="xri://$xrd*($v*2.0)">
16
+ <Query>*isDrummond</Query>
17
+ <ProviderID>xri://=</ProviderID>
18
+ <LocalID>!D2</LocalID>
19
+ <CanonicalID>=!D2</CanonicalID>
20
+ <Service>
21
+ <Type>http://openid.net/signon/1.0</Type>
22
+ <URI>http://keturn.example.com/openid</URI>
23
+ </Service>
24
+ </XRD>
25
+ </XRDS>
@@ -0,0 +1,37 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <XRDS ref="xri://=keturn*isDrummond" xmlns="xri://$xrds">
3
+ <XRD xmlns="xri://$xrd*($v*2.0)">
4
+ <Query>*keturn</Query>
5
+ <ProviderID>xri://@</ProviderID>
6
+ <LocalID>@E4</LocalID>
7
+ <CanonicalID>@!E4</CanonicalID>
8
+
9
+ <Service>
10
+ <Type>xri://$res*auth*($v*2.0)</Type>
11
+ <URI>http://keturn.example.com/resolve/</URI>
12
+ <ProviderID>@!E4</ProviderID>
13
+ </Service>
14
+ </XRD>
15
+ <XRD xmlns="xri://$xrd*($v*2.0)">
16
+ <Query>*is</Query>
17
+ <ProviderID>@!E4</ProviderID>
18
+ <LocalID>!D2</LocalID>
19
+ <CanonicalID>=!C0</CanonicalID>
20
+ <CanonicalID>=!E4!01</CanonicalID>
21
+ <Service>
22
+ <Type>xri://$res*auth*($v*2.0)</Type>
23
+ <URI>http://keturn.example.com/resolve/</URI>
24
+ <ProviderID>@!C0</ProviderID>
25
+ </Service>
26
+ </XRD>
27
+ <XRD xmlns="xri://$xrd*($v*2.0)">
28
+ <Query>*drummond</Query>
29
+ <ProviderID>@!C0</ProviderID>
30
+ <LocalID>!D2</LocalID>
31
+ <CanonicalID>@!C0!D2</CanonicalID>
32
+ <Service>
33
+ <Type>http://openid.net/signon/1.0</Type>
34
+ <URI>http://keturn.example.com/openid</URI>
35
+ </Service>
36
+ </XRD>
37
+ </XRDS>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <XRDS ref="xri://=x" xmlns="xri://$xrds">
3
+ <XRD xmlns="xri://$xrd*($v*2.0)">
4
+ <Query>*x</Query>
5
+ <Status code="222">The subsegment does not exist</Status>
6
+ <Expires>2006-08-18T00:02:35.000Z</Expires>
7
+ <ProviderID>xri://=</ProviderID>
8
+ </XRD>
9
+ </XRDS>
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <XRDS ref="xri://=nishitani*masaki" xmlns="xri://$xrds">
3
+ <XRD xmlns="xri://$xrd*($v*2.0)">
4
+ <Query>*nishitani</Query>
5
+ <Status code="100"/>
6
+ <Expires>2007-12-25T11:33:39.000Z</Expires>
7
+ <ProviderID>xri://=</ProviderID>
8
+ <LocalID priority="10">!E117.EF2F.454B.C707</LocalID>
9
+ <CanonicalID priority="10">=!E117.EF2F.454B.C707</CanonicalID>
10
+ <Service priority="10">
11
+ <Type select="true">http://openid.net/signon/1.0</Type>
12
+ <ProviderID>xri://!!1003!103</ProviderID>
13
+ <URI append="none" priority="1">https://linksafe.ezibroker.net/server/</URI>
14
+ </Service>
15
+ <Service priority="10">
16
+ <Type select="true">xri://$res*auth*($v*2.0)</Type>
17
+ <ProviderID>xri://!!1003!103</ProviderID>
18
+ <MediaType>application/xrds+xml;trust=none</MediaType>
19
+ <URI priority="10">http://resolve.ezibroker.net/resolve/=nishitani/</URI>
20
+ </Service>
21
+ <Service priority="1">
22
+ <Type match="content" select="true">xri://+i-service*(+forwarding)*($v*1.0)</Type>
23
+ <Type match="null" select="false"/>
24
+ <ProviderID>xri://!!1003!103</ProviderID>
25
+ <Path match="content">(+index)</Path>
26
+ <Path match="default"/>
27
+ <URI append="qxri" priority="1">http://linksafe-forward.ezibroker.net/forwarding/</URI>
28
+ </Service>
29
+ </XRD>
30
+ <XRD xmlns="xri://$xrd*($v*2.0)">
31
+ <Query>*masaki</Query>
32
+ <Status code="100">SUCCESS</Status>
33
+ <ProviderID>xri://!!1003</ProviderID>
34
+ <LocalID>!0000.0000.3B9A.CA01</LocalID>
35
+ <CanonicalID>=!E117.EF2F.454B.C707!0000.0000.3B9A.CA01</CanonicalID>
36
+ <Service>
37
+ <Type select="true">http://openid.net/signon/1.0</Type>
38
+ <ProviderID>xri://!!1003!103</ProviderID>
39
+ <URI append="none" priority="1">https://linksafe.ezibroker.net/server/</URI>
40
+ </Service>
41
+ <Service>
42
+ <Type select="true">xri://+i-service*(+contact)*($v*1.0)</Type>
43
+ <Type match="null"/>
44
+ <ProviderID>xri://!!1003!103</ProviderID>
45
+ <Path select="true">(+contact)</Path>
46
+ <Path match="null"/>
47
+ <URI append="authority" priority="1">http://linksafe-contact.ezibroker.net/contact/</URI>
48
+ </Service>
49
+ <Service priority="1">
50
+ <Type match="content" select="true">xri://+i-service*(+forwarding)*($v*1.0)</Type>
51
+ <Type match="null" select="false"/>
52
+ <ProviderID>xri://!!1003!103</ProviderID>
53
+ <Path match="content">(+index)</Path>
54
+ <Path match="default"/>
55
+ <URI append="qxri" priority="1">http://linksafe-forward.ezibroker.net/forwarding/</URI>
56
+ </Service>
57
+ </XRD>
58
+ </XRDS>
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xrds:XRDS
3
+ xmlns:xrds="xri://$xrds"
4
+ xmlns:openid="http://openid.net/xmlns/1.0"
5
+ xmlns:typekey="http://typekey.com/xmlns/1.0"
6
+ xmlns="xri://$xrd*($v*2.0)">
7
+ <XRD>
8
+
9
+ <Service priority="0">
10
+ <Type>http://openid.net/signon/1.0</Type>
11
+ <URI>http://www.myopenid.com/server</URI>
12
+ <openid:Delegate>http://josh.myopenid.com/</openid:Delegate>
13
+ </Service>
14
+
15
+ <Service priority="20">
16
+ <Type>http://lid.netmesh.org/sso/2.0b5</Type>
17
+ <Type>http://lid.netmesh.org/2.0b5</Type>
18
+ <URI>http://mylid.net/josh</URI>
19
+ </Service>
20
+
21
+ <Service priority="10">
22
+ <Type>http://openid.net/signon/1.0</Type>
23
+ <URI>http://www.livejournal.com/openid/server.bml</URI>
24
+ <openid:Delegate>http://www.livejournal.com/users/nedthealpaca/</openid:Delegate>
25
+ </Service>
26
+
27
+ <Service priority="15">
28
+ <Type>http://typekey.com/services/1.0</Type>
29
+ <typekey:MemberName>joshhoyt</typekey:MemberName>
30
+ </Service>
31
+
32
+ <Service priority="5">
33
+ <Type>http://openid.net/signon/1.0</Type>
34
+ <URI>http://www.schtuff.com/openid</URI>
35
+ <openid:Delegate>http://users.schtuff.com/josh</openid:Delegate>
36
+ </Service>
37
+
38
+ </XRD>
39
+ </xrds:XRDS>
@@ -0,0 +1,153 @@
1
+ ========================================
2
+ Trust root parsing checking
3
+ ========================================
4
+
5
+ ----------------------------------------
6
+ 23: Does not parse
7
+ ----------------------------------------
8
+ baz.org
9
+ *.foo.com
10
+ http://*.schtuff.*/
11
+ ftp://foo.com
12
+ ftp://*.foo.com
13
+ http://*.foo.com:80:90/
14
+ foo.*.com
15
+ http://foo.*.com
16
+ http://www.*
17
+ http://*foo.com/
18
+ http://foo.com/invalid#fragment
19
+ http://..it/
20
+ http://.it/
21
+ http://*:8081/
22
+ http://*:80
23
+ http://localhost:1900foo/
24
+ http://foo.com\/
25
+ http://π.pi.com/
26
+ http://lambda.com/Λ
27
+
28
+
29
+
30
+ 5
31
+
32
+ ----------------------------------------
33
+ 14: Insane
34
+ ----------------------------------------
35
+ http:///
36
+ http://*/
37
+ https://*/
38
+ http://*.com
39
+ http://*.com/
40
+ https://*.com/
41
+ http://*.com.au/
42
+ http://*.co.uk/
43
+ http://*.foo.notatld/
44
+ https://*.foo.notatld/
45
+ http://*.museum/
46
+ https://*.museum/
47
+ http://www.schtuffcom/
48
+ http://it/
49
+
50
+ ----------------------------------------
51
+ 18: Sane
52
+ ----------------------------------------
53
+ http://*.schtuff.com./
54
+ http://*.schtuff.com/
55
+ http://*.foo.schtuff.com/
56
+ http://*.schtuff.com
57
+ http://www.schtuff.com/
58
+ http://www.schtuff.com./
59
+ http://www.schutff.com
60
+ http://*.this.that.schtuff.com/
61
+ http://*.foo.com/path
62
+ http://*.foo.com/path?action=foo2
63
+ http://x.foo.com/path?action=foo2
64
+ http://x.foo.com/path?action=%3D
65
+ http://localhost:8081/
66
+ http://localhost:8082/?action=openid
67
+ https://foo.com/
68
+ http://kink.fm/should/be/sane
69
+ http://beta.lingu.no/
70
+ http://goathack.livejournal.org:8020/openid/login.bml
71
+
72
+ ========================================
73
+ return_to matching
74
+ ========================================
75
+
76
+ ----------------------------------------
77
+ 46: matches
78
+ ----------------------------------------
79
+ http://*/ http://cnn.com/
80
+ http://*/ http://livejournal.com/
81
+ http://*/ http://met.museum/
82
+ http://localhost:8081/x?action=openid http://localhost:8081/x?action=openid
83
+ http://*.foo.com http://b.foo.com
84
+ http://*.foo.com http://b.foo.com/
85
+ http://*.foo.com/ http://b.foo.com
86
+ http://b.foo.com http://b.foo.com
87
+ http://b.foo.com http://b.foo.com/
88
+ http://b.foo.com/ http://b.foo.com
89
+ http://*.b.foo.com http://b.foo.com
90
+ http://*.b.foo.com http://b.foo.com/
91
+ http://*.b.foo.com/ http://b.foo.com
92
+ http://*.b.foo.com http://x.b.foo.com
93
+ http://*.b.foo.com http://w.x.b.foo.com
94
+ http://*.bar.co.uk http://www.bar.co.uk
95
+ http://*.uoregon.edu http://x.cs.uoregon.edu
96
+ http://x.com/abc http://x.com/abc
97
+ http://x.com/abc http://x.com/abc/def
98
+ http://10.0.0.1/abc http://10.0.0.1/abc
99
+ http://*.x.com http://x.com/gallery
100
+ http://*.x.com http://foo.x.com/gallery
101
+ http://foo.x.com http://foo.x.com/gallery/xxx
102
+ http://*.x.com/gallery http://foo.x.com/gallery
103
+ http://localhost:8082/?action=openid http://localhost:8082/?action=openid
104
+ http://goathack.livejournal.org:8020/ http://goathack.livejournal.org:8020/openid/login.bml
105
+ https://foo.com https://foo.com
106
+ http://Foo.com http://foo.com
107
+ http://foo.com http://Foo.com
108
+ http://foo.com:80/ http://foo.com/
109
+ http://foo.com/?x=y http://foo.com/?x=y&a=b
110
+ http://foo.com/x http://foo.com/x?y
111
+ http://mylid.net/j3h. http://mylid.net/j3h.?x=y
112
+ http://j3h.us http://j3h.us?ride=unicycle
113
+ https://www.filmclans.com:443/mattmartin/FilmClans https://www.filmclans.com/mattmartin/FilmClans/Logon.aspx?nonce=BVjqSOee
114
+ http://foo.com:80 http://foo.com
115
+ http://foo.com http://foo.com:80
116
+ http://foo.com http://foo.com/
117
+ http://foo.com/ http://foo.com
118
+ http://foo.com/ http://foo.com:80
119
+ http://foo.com:80/ http://foo.com:80/stuff
120
+ http://foo.com:80/ http://foo.com/stuff
121
+ http://foo.com/path http://foo.com/path/extra
122
+ http://foo.com/path2 http://foo.com/path2?extra=query
123
+ http://foo.com/path2 http://foo.com/path2/?extra=query
124
+ http://foo.com/ HTTP://foo.com/
125
+
126
+ ----------------------------------------
127
+ 25: does not match
128
+ ----------------------------------------
129
+ http://*/ ftp://foo.com/
130
+ http://*/ xxx
131
+ http://foo.com/ http://oo.com/
132
+ http://*.x.com/abc http://foo.x.com
133
+ http://*.x.com/abc http://*.x.com
134
+ http://*.com/ http://*.com/
135
+ http://x.com/abc http://x.com/
136
+ http://x.com/abc http://x.com/a
137
+ http://x.com/abc http://x.com/ab
138
+ http://x.com/abc http://x.com/abcd
139
+ http://*.cs.uoregon.edu http://x.uoregon.edu
140
+ http://*.foo.com http://bar.com
141
+ http://*.foo.com http://www.bar.com
142
+ http://*.bar.co.uk http://xxx.co.uk
143
+ https://foo.com http://foo.com
144
+ http://foo.com https://foo.com
145
+ http://foo.com:81 http://foo.com:80
146
+ http://foo.com/?a=b http://foo.com/?x=y
147
+ http://foo.com/?a=b http://foo.com/?x=y&a=b
148
+ http://foo.com/?a=b http://foo.com/
149
+ http://*.oo.com/ http://foo.com/
150
+ http://foo.com/* http://foo.com/anything
151
+ http://foo.com http://foo.com:443
152
+ https://foo.com https://foo.com:80
153
+ http://foo.com/path/xev http://foo.com/path?extra=more
@@ -0,0 +1,79 @@
1
+ Already normal form
2
+ http://example.com/
3
+ http://example.com/
4
+
5
+ Add a trailing slash
6
+ http://example.com
7
+ http://example.com/
8
+
9
+ Remove an empty port segment
10
+ http://example.com:/
11
+ http://example.com/
12
+
13
+ Remove a default port segment
14
+ http://example.com:80/
15
+ http://example.com/
16
+
17
+ Capitalization in host names
18
+ http://wWw.exaMPLE.COm/
19
+ http://www.example.com/
20
+
21
+ Capitalization in scheme names
22
+ htTP://example.com/
23
+ http://example.com/
24
+
25
+ Capitalization in percent-escaped reserved characters
26
+ http://example.com/foo%2cbar
27
+ http://example.com/foo%2Cbar
28
+
29
+ Unescape percent-encoded unreserved characters
30
+ http://example.com/foo%2Dbar%2dbaz
31
+ http://example.com/foo-bar-baz
32
+
33
+ remove_dot_segments example 1
34
+ http://example.com/a/b/c/./../../g
35
+ http://example.com/a/g
36
+
37
+ remove_dot_segments example 2
38
+ http://example.com/mid/content=5/../6
39
+ http://example.com/mid/6
40
+
41
+ remove_dot_segments: single-dot
42
+ http://example.com/a/./b
43
+ http://example.com/a/b
44
+
45
+ remove_dot_segments: double-dot
46
+ http://example.com/a/../b
47
+ http://example.com/b
48
+
49
+ remove_dot_segments: leading double-dot
50
+ http://example.com/../b
51
+ http://example.com/b
52
+
53
+ remove_dot_segments: trailing single-dot
54
+ http://example.com/a/.
55
+ http://example.com/a/
56
+
57
+ remove_dot_segments: trailing double-dot
58
+ http://example.com/a/..
59
+ http://example.com/
60
+
61
+ remove_dot_segments: trailing single-dot-slash
62
+ http://example.com/a/./
63
+ http://example.com/a/
64
+
65
+ remove_dot_segments: trailing double-dot-slash
66
+ http://example.com/a/../
67
+ http://example.com/
68
+
69
+ Test of all kinds of syntax-based normalization
70
+ hTTPS://a/./b/../b/%63/%7bfoo%7d
71
+ https://a/b/c/%7Bfoo%7D
72
+
73
+ Unsupported scheme
74
+ ftp://example.com/
75
+ fail
76
+
77
+ Non-absolute URI
78
+ http:/foo
79
+ fail
@@ -0,0 +1,170 @@
1
+ require "test_helper"
2
+ require 'openid/yadis/accept'
3
+ require 'openid/extras'
4
+ require 'openid/util'
5
+ require 'test_util'
6
+
7
+ module OpenID
8
+
9
+ class AcceptTest < Test::Unit::TestCase
10
+ include TestDataMixin
11
+
12
+ def getTestData()
13
+ # Read the test data off of disk
14
+ #
15
+ # () -> [(int, str)]
16
+ lines = read_data_file('accept.txt')
17
+ line_no = 1
18
+ return lines.collect { |line|
19
+ pair = [line_no, line]
20
+ line_no += 1
21
+ pair
22
+ }
23
+ end
24
+
25
+ def chunk(lines)
26
+ # Return groups of lines separated by whitespace or comments
27
+ #
28
+ # [(int, str)] -> [[(int, str)]]
29
+ chunks = []
30
+ chunk = []
31
+ lines.each { |lineno, line|
32
+ stripped = line.strip()
33
+ if (stripped == '') or stripped.starts_with?('#')
34
+ if chunk.length > 0
35
+ chunks << chunk
36
+ chunk = []
37
+ end
38
+ else
39
+ chunk << [lineno, stripped]
40
+ end
41
+ }
42
+
43
+ if chunk.length > 0
44
+ chunks << chunk
45
+ end
46
+
47
+ return chunks
48
+ end
49
+
50
+ def parseLines(chunk)
51
+ # Take the given chunk of lines and turn it into a test data
52
+ # dictionary
53
+ #
54
+ # [(int, str)] -> {str:(int, str)}
55
+ items = {}
56
+ chunk.each { |lineno, line|
57
+ header, data = line.split(':', 2)
58
+ header = header.downcase
59
+ items[header] = [lineno, data.strip]
60
+ }
61
+ return items
62
+ end
63
+
64
+ def parseAvailable(available_text)
65
+ # Parse an Available: line's data
66
+ #
67
+ # str -> [str]
68
+ return available_text.split(',', -1).collect { |s| s.strip }
69
+ end
70
+
71
+ def parseExpected(expected_text)
72
+ # Parse an Expected: line's data
73
+ #
74
+ # str -> [(str, float)]
75
+ expected = []
76
+ if expected_text != ''
77
+ expected_text.split(',', -1).each { |chunk|
78
+ chunk = chunk.strip
79
+ mtype, qstuff = chunk.split(';', -1)
80
+ mtype = mtype.strip
81
+ Util.assert(!mtype.index('/').nil?)
82
+ qstuff = qstuff.strip
83
+ q, qstr = qstuff.split('=', -1)
84
+ Util.assert(q == 'q')
85
+ qval = qstr.to_f
86
+ expected << [mtype, qval]
87
+ }
88
+ end
89
+
90
+ return expected
91
+ end
92
+
93
+ def test_accept_headers
94
+ lines = getTestData()
95
+ chunks = chunk(lines)
96
+ data_sets = chunks.collect { |chunk| parseLines(chunk) }
97
+ cases = []
98
+ data_sets.each { |data|
99
+ lnos = []
100
+ lno, header = data['accept']
101
+ lnos << lno
102
+ lno, avail_data = data['available']
103
+ lnos << lno
104
+ begin
105
+ available = parseAvailable(avail_data)
106
+ rescue
107
+ print 'On line', lno
108
+ raise
109
+ end
110
+
111
+ lno, exp_data = data['expected']
112
+ lnos << lno
113
+ begin
114
+ expected = parseExpected(exp_data)
115
+ rescue
116
+ print 'On line', lno
117
+ raise
118
+ end
119
+
120
+ descr = sprintf('MatchAcceptTest for lines %s', lnos)
121
+
122
+ # Test:
123
+ accepted = Yadis.parse_accept_header(header)
124
+ actual = Yadis.match_types(accepted, available)
125
+ assert_equal(expected, actual)
126
+
127
+ assert_equal(Yadis.get_acceptable(header, available),
128
+ expected.collect { |mtype, _| mtype })
129
+ }
130
+ end
131
+
132
+ def test_generate_accept_header
133
+ # TODO: move this into a test case file and write parsing code
134
+ # for it.
135
+
136
+ # Form: [input_array, expected_header_string]
137
+ cases = [
138
+ # Empty input list
139
+ [[], ""],
140
+ # Content type name only; no q value
141
+ [["test"], "test"],
142
+ # q = 1.0 should be omitted from the header
143
+ [[["test", 1.0]], "test"],
144
+ # Test conversion of float to string
145
+ [["test", ["with_q", 0.8]], "with_q; q=0.8, test"],
146
+ # Allow string q values, too
147
+ [["test", ["with_q_str", "0.7"]], "with_q_str; q=0.7, test"],
148
+ # Test q values out of bounds
149
+ [[["test", -1.0]], nil],
150
+ [[["test", 1.1]], nil],
151
+ # Test sorting of types by q value
152
+ [[["middle", 0.5], ["min", 0.1], "max"],
153
+ "min; q=0.1, middle; q=0.5, max"],
154
+
155
+ ].each { |input, expected_header|
156
+
157
+ if expected_header.nil?
158
+ assert_raise(ArgumentError) {
159
+ Yadis.generate_accept_header(*input)
160
+ }
161
+ else
162
+ assert_equal(expected_header, Yadis.generate_accept_header(*input),
163
+ [input, expected_header].inspect)
164
+ end
165
+ }
166
+ end
167
+
168
+ end
169
+
170
+ end