From 658c0e6dbc505a75b22f6fe372732796e7171d42 Mon Sep 17 00:00:00 2001 From: araste Date: Fri, 19 Dec 2008 11:00:19 +0000 Subject: [PATCH] 17515512: JanRain php-openid library included, normalization fix git-svn-id: http://xe-core.googlecode.com/svn/sandbox@5137 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/member/member.controller.php | 95 +- .../member/php-openid-1.2.3/Auth/OpenID.php | 412 ++++ .../Auth/OpenID/Association.php | 308 +++ .../php-openid-1.2.3/Auth/OpenID/BigMath.php | 444 ++++ .../php-openid-1.2.3/Auth/OpenID/Consumer.php | 1186 ++++++++++ .../Auth/OpenID/CryptUtil.php | 109 + .../Auth/OpenID/DatabaseConnection.php | 131 ++ .../Auth/OpenID/DiffieHellman.php | 181 ++ .../php-openid-1.2.3/Auth/OpenID/Discover.php | 258 +++ .../Auth/OpenID/DumbStore.php | 116 + .../Auth/OpenID/FileStore.php | 674 ++++++ .../php-openid-1.2.3/Auth/OpenID/HMACSHA1.php | 72 + .../Auth/OpenID/Interface.php | 188 ++ .../php-openid-1.2.3/Auth/OpenID/KVForm.php | 112 + .../Auth/OpenID/MySQLStore.php | 78 + .../php-openid-1.2.3/Auth/OpenID/Parse.php | 308 +++ .../Auth/OpenID/PostgreSQLStore.php | 136 ++ .../php-openid-1.2.3/Auth/OpenID/SQLStore.php | 658 ++++++ .../Auth/OpenID/SQLiteStore.php | 66 + .../php-openid-1.2.3/Auth/OpenID/Server.php | 1307 +++++++++++ .../Auth/OpenID/ServerRequest.php | 37 + .../Auth/OpenID/TrustRoot.php | 243 ++ .../php-openid-1.2.3/Auth/OpenID/URINorm.php | 231 ++ modules/member/php-openid-1.2.3/CHANGELOG | 8 + modules/member/php-openid-1.2.3/COPYING | 24 + modules/member/php-openid-1.2.3/LICENSE | 504 +++++ modules/member/php-openid-1.2.3/NEWS | 88 + modules/member/php-openid-1.2.3/README | 122 + modules/member/php-openid-1.2.3/README.Debian | 8 + .../Services/Yadis/HTTPFetcher.php | 92 + .../Services/Yadis/Manager.php | 496 ++++ .../php-openid-1.2.3/Services/Yadis/Misc.php | 59 + .../Services/Yadis/ParanoidHTTPFetcher.php | 177 ++ .../Services/Yadis/ParseHTML.php | 258 +++ .../Services/Yadis/PlainHTTPFetcher.php | 245 ++ .../php-openid-1.2.3/Services/Yadis/XML.php | 365 +++ .../php-openid-1.2.3/Services/Yadis/XRDS.php | 425 ++++ .../php-openid-1.2.3/Services/Yadis/XRI.php | 233 ++ .../Services/Yadis/XRIRes.php | 68 + .../php-openid-1.2.3/Services/Yadis/Yadis.php | 313 +++ .../Tests/Auth/OpenID/Association.php | 38 + .../Tests/Auth/OpenID/BigMath.php | 235 ++ .../Tests/Auth/OpenID/Consumer.php | 1161 ++++++++++ .../Tests/Auth/OpenID/CryptUtil.php | 55 + .../Tests/Auth/OpenID/DiffieHellman.php | 160 ++ .../Tests/Auth/OpenID/Discover.php | 670 ++++++ .../Tests/Auth/OpenID/HMACSHA1.php | 148 ++ .../Tests/Auth/OpenID/KVForm.php | 259 +++ .../Tests/Auth/OpenID/MemStore.php | 110 + .../Tests/Auth/OpenID/OpenID_Yadis.php | 224 ++ .../Tests/Auth/OpenID/Parse.php | 181 ++ .../Tests/Auth/OpenID/Server.php | 1391 ++++++++++++ .../Tests/Auth/OpenID/StoreTest.php | 574 +++++ .../Tests/Auth/OpenID/TestUtil.php | 28 + .../Tests/Auth/OpenID/TrustRoot.php | 167 ++ .../Tests/Auth/OpenID/URINorm.php | 68 + .../Tests/Auth/OpenID/Util.php | 260 +++ .../Tests/Auth/OpenID/data/dhexch | 25 + .../Tests/Auth/OpenID/data/dhpriv | 29 + .../Tests/Auth/OpenID/data/hmac.txt | 49 + .../Tests/Auth/OpenID/data/linkparse.txt | 594 +++++ .../Tests/Auth/OpenID/data/n2b64 | 650 ++++++ .../Tests/Auth/OpenID/data/trustroot.txt | 120 + .../Tests/Auth/OpenID/data/urinorm.txt | 79 + .../Tests/Services/Yadis/Discover.php | 171 ++ .../Tests/Services/Yadis/DiscoverData.php | 148 ++ .../Tests/Services/Yadis/ParseHTML.php | 88 + .../Tests/Services/Yadis/TestUtil.php | 28 + .../Tests/Services/Yadis/XRDS.php | 241 ++ .../Tests/Services/Yadis/XRI.php | 141 ++ .../Tests/Services/Yadis/Yadis.php | 91 + .../Tests/Services/Yadis/data/README | 12 + .../Tests/Services/Yadis/data/accept.txt | 118 + .../Services/Yadis/data/brian.multi.xrds | 38 + .../Services/Yadis/data/brian.multi_uri.xrds | 16 + .../Tests/Services/Yadis/data/brian.xrds | 16 + .../Services/Yadis/data/brian_priority.xrds | 22 + .../Yadis/data/delegated-20060809-r1.xrds | 34 + .../Yadis/data/delegated-20060809-r2.xrds | 34 + .../Yadis/data/delegated-20060809.xrds | 34 + .../Services/Yadis/data/example-xrds.xml | 14 + .../Tests/Services/Yadis/data/manifest.txt | 30 + .../Tests/Services/Yadis/data/no-xrd.xml | 7 + .../Tests/Services/Yadis/data/not-xrds.xml | 2 + .../Tests/Services/Yadis/data/pip.xrds | 22 + .../Services/Yadis/data/prefixsometimes.xrds | 34 + .../Tests/Services/Yadis/data/ref.xrds | 109 + .../Services/Yadis/data/sometimesprefix.xrds | 34 + .../Tests/Services/Yadis/data/spoof1.xrds | 25 + .../Tests/Services/Yadis/data/spoof2.xrds | 25 + .../Tests/Services/Yadis/data/spoof3.xrds | 37 + .../Services/Yadis/data/test1-discover.txt | 137 ++ .../Services/Yadis/data/test1-parsehtml.txt | 133 ++ .../Tests/Services/Yadis/data/test1-xrd.xml | 39 + .../Services/Yadis/data/uri_priority.xrds | 16 + .../php-openid-1.2.3/Tests/TestDriver.php | 189 ++ .../php-openid-1.2.3/admin/adminutil.php | 30 + .../php-openid-1.2.3/admin/brace_style.pl | 81 + .../member/php-openid-1.2.3/admin/checkimport | 4 + .../php-openid-1.2.3/admin/checkimports | 2 + .../php-openid-1.2.3/admin/darcs-ignore | 3 + .../member/php-openid-1.2.3/admin/docblocks | 15 + .../php-openid-1.2.3/admin/docblocks.pl | 26 + .../member/php-openid-1.2.3/admin/findglobals | 5 + modules/member/php-openid-1.2.3/admin/findphp | 8 + .../member/php-openid-1.2.3/admin/fixperms | 13 + .../php-openid-1.2.3/admin/library-name | 1 + .../php-openid-1.2.3/admin/longlines.pl | 46 + .../member/php-openid-1.2.3/admin/makedoc.sh | 5 + modules/member/php-openid-1.2.3/admin/mathlib | 18 + .../member/php-openid-1.2.3/admin/nobadbraces | 4 + .../member/php-openid-1.2.3/admin/nobadcase | 14 + .../member/php-openid-1.2.3/admin/nolonglines | 16 + modules/member/php-openid-1.2.3/admin/notabs | 16 + .../member/php-openid-1.2.3/admin/open_tag | 17 + .../php-openid-1.2.3/admin/otb_test.php | 20 + .../member/php-openid-1.2.3/admin/package.xml | 24 + .../php-openid-1.2.3/admin/package2.xml | 74 + .../php-openid-1.2.3/admin/packagexml.py | 155 ++ .../php-openid-1.2.3/admin/phpaliases.py | 119 + .../php-openid-1.2.3/admin/prepare-release | 12 + .../member/php-openid-1.2.3/admin/runtests | 64 + .../php-openid-1.2.3/admin/texttest.php | 173 ++ .../admin/tutorials/OpenID/OpenID.pkg | 81 + .../member/php-openid-1.2.3/admin/webtest.php | 12 + .../php-openid-1.2.3/admin/xmlconfig.py | 55 + .../doc/OpenID/Auth_OpenID_AlreadySigned.html | 68 + .../doc/OpenID/Auth_OpenID_Association.html | 210 ++ .../doc/OpenID/Auth_OpenID_AuthRequest.html | 187 ++ .../OpenID/Auth_OpenID_CancelResponse.html | 169 ++ .../doc/OpenID/Auth_OpenID_Consumer.html | 216 ++ .../OpenID/Auth_OpenID_ConsumerResponse.html | 153 ++ .../Auth_OpenID_DatabaseConnection.html | 337 +++ .../doc/OpenID/Auth_OpenID_Decoder.html | 160 ++ ...h_OpenID_DiffieHellmanConsumerSession.html | 217 ++ ...uth_OpenID_DiffieHellmanServerSession.html | 226 ++ .../doc/OpenID/Auth_OpenID_DumbStore.html | 419 ++++ .../doc/OpenID/Auth_OpenID_Encoder.html | 200 ++ .../doc/OpenID/Auth_OpenID_EncodingError.html | 129 ++ .../OpenID/Auth_OpenID_FailureResponse.html | 172 ++ .../doc/OpenID/Auth_OpenID_FileStore.html | 528 +++++ .../Auth_OpenID_MalformedReturnURL.html | 118 + .../Auth_OpenID_MalformedTrustRoot.html | 116 + .../doc/OpenID/Auth_OpenID_MySQLStore.html | 128 ++ .../doc/OpenID/Auth_OpenID_OpenIDStore.html | 550 +++++ .../Auth_OpenID_PlainTextConsumerSession.html | 186 ++ .../Auth_OpenID_PlainTextServerSession.html | 192 ++ .../OpenID/Auth_OpenID_PostgreSQLStore.html | 128 ++ .../doc/OpenID/Auth_OpenID_SQLStore.html | 720 ++++++ .../doc/OpenID/Auth_OpenID_SQLiteStore.html | 175 ++ .../doc/OpenID/Auth_OpenID_Server.html | 202 ++ .../doc/OpenID/Auth_OpenID_ServerError.html | 255 +++ .../doc/OpenID/Auth_OpenID_ServerRequest.html | 101 + .../Auth_OpenID_SetupNeededResponse.html | 172 ++ .../doc/OpenID/Auth_OpenID_Signatory.html | 381 ++++ .../OpenID/Auth_OpenID_SigningEncoder.html | 179 ++ .../OpenID/Auth_OpenID_SuccessResponse.html | 201 ++ .../Auth_OpenID_UntrustedReturnURL.html | 150 ++ .../doc/OpenID/Auth_OpenID_WebResponse.html | 189 ++ .../_Auth---OpenID---Association.php.html | 67 + .../OpenID/_Auth---OpenID---Consumer.php.html | 382 ++++ ...uth---OpenID---DatabaseConnection.php.html | 66 + .../_Auth---OpenID---DumbStore.php.html | 109 + .../_Auth---OpenID---FileStore.php.html | 123 + .../_Auth---OpenID---Interface.php.html | 67 + .../_Auth---OpenID---MySQLStore.php.html | 89 + .../_Auth---OpenID---PostgreSQLStore.php.html | 89 + .../OpenID/_Auth---OpenID---SQLStore.php.html | 96 + .../_Auth---OpenID---SQLiteStore.php.html | 89 + .../OpenID/_Auth---OpenID---Server.php.html | 354 +++ .../_Auth---OpenID---ServerRequest.php.html | 99 + .../doc/OpenID/_Auth---OpenID.php.html | 275 +++ .../doc/OpenID/tutorial_OpenID.pkg.html | 52 + .../Auth_OpenID_ServiceEndpointLoader.html | 186 ++ .../doc/Yadis/Services_Yadis_Discovery.html | 175 ++ .../doc/Yadis/Services_Yadis_Manager.html | 99 + .../Yadis/Services_Yadis_ManagerLoader.html | 260 +++ .../doc/Yadis/Services_Yadis_PHPSession.html | 203 ++ .../doc/Yadis/Services_Yadis_Service.html | 225 ++ .../Yadis/Services_Yadis_SessionLoader.html | 333 +++ .../doc/Yadis/Services_Yadis_XMLParser.html | 374 +++ .../doc/Yadis/Services_Yadis_XRDS.html | 184 ++ .../doc/Yadis/Services_Yadis_Yadis.html | 258 +++ .../doc/Yadis/Services_Yadis_dom.html | 303 +++ .../doc/Yadis/Services_Yadis_domxml.html | 303 +++ .../_Services---Yadis---Manager.php.html | 101 + .../Yadis/_Services---Yadis---XML.php.html | 160 ++ .../Yadis/_Services---Yadis---XRDS.php.html | 200 ++ .../Yadis/_Services---Yadis---Yadis.php.html | 139 ++ .../doc/classtrees_OpenID.html | 104 + .../doc/classtrees_Yadis.html | 56 + .../php-openid-1.2.3/doc/elementindex.html | 1998 +++++++++++++++++ .../doc/elementindex_OpenID.html | 1473 ++++++++++++ .../doc/elementindex_Yadis.html | 680 ++++++ .../member/php-openid-1.2.3/doc/errors.html | 35 + .../member/php-openid-1.2.3/doc/index.html | 24 + .../php-openid-1.2.3/doc/li_OpenID.html | 90 + .../member/php-openid-1.2.3/doc/li_Yadis.html | 53 + .../php-openid-1.2.3/doc/media/banner.css | 32 + .../php-openid-1.2.3/doc/media/stylesheet.css | 142 ++ .../member/php-openid-1.2.3/doc/packages.html | 34 + .../member/php-openid-1.2.3/examples/README | 122 + .../examples/consumer/common.php | 41 + .../examples/consumer/finish_auth.php | 38 + .../examples/consumer/index.php | 59 + .../examples/consumer/try_auth.php | 48 + .../php-openid-1.2.3/examples/detect.php | 496 ++++ .../examples/server/index.php | 5 + .../examples/server/lib/actions.php | 169 ++ .../examples/server/lib/common.php | 63 + .../examples/server/lib/render.php | 112 + .../examples/server/lib/render/about.php | 58 + .../examples/server/lib/render/login.php | 65 + .../examples/server/lib/render/sites.php | 83 + .../examples/server/lib/render/trust.php | 29 + .../examples/server/lib/session.php | 205 ++ .../examples/server/openid-server.css | 74 + .../examples/server/server.php | 45 + .../examples/server/setup.php | 690 ++++++ 219 files changed, 41415 insertions(+), 10 deletions(-) create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/Association.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/BigMath.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/Consumer.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/CryptUtil.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/DatabaseConnection.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/DiffieHellman.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/Discover.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/DumbStore.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/FileStore.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/HMACSHA1.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/Interface.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/KVForm.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/MySQLStore.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/Parse.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/PostgreSQLStore.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/SQLStore.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/SQLiteStore.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/Server.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/ServerRequest.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/TrustRoot.php create mode 100644 modules/member/php-openid-1.2.3/Auth/OpenID/URINorm.php create mode 100644 modules/member/php-openid-1.2.3/CHANGELOG create mode 100644 modules/member/php-openid-1.2.3/COPYING create mode 100644 modules/member/php-openid-1.2.3/LICENSE create mode 100644 modules/member/php-openid-1.2.3/NEWS create mode 100644 modules/member/php-openid-1.2.3/README create mode 100644 modules/member/php-openid-1.2.3/README.Debian create mode 100644 modules/member/php-openid-1.2.3/Services/Yadis/HTTPFetcher.php create mode 100644 modules/member/php-openid-1.2.3/Services/Yadis/Manager.php create mode 100644 modules/member/php-openid-1.2.3/Services/Yadis/Misc.php create mode 100644 modules/member/php-openid-1.2.3/Services/Yadis/ParanoidHTTPFetcher.php create mode 100644 modules/member/php-openid-1.2.3/Services/Yadis/ParseHTML.php create mode 100644 modules/member/php-openid-1.2.3/Services/Yadis/PlainHTTPFetcher.php create mode 100644 modules/member/php-openid-1.2.3/Services/Yadis/XML.php create mode 100644 modules/member/php-openid-1.2.3/Services/Yadis/XRDS.php create mode 100644 modules/member/php-openid-1.2.3/Services/Yadis/XRI.php create mode 100644 modules/member/php-openid-1.2.3/Services/Yadis/XRIRes.php create mode 100644 modules/member/php-openid-1.2.3/Services/Yadis/Yadis.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/Association.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/BigMath.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/Consumer.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/CryptUtil.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/DiffieHellman.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/Discover.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/HMACSHA1.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/KVForm.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/MemStore.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/OpenID_Yadis.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/Parse.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/Server.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/StoreTest.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/TestUtil.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/TrustRoot.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/URINorm.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/Util.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/dhexch create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/dhpriv create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/hmac.txt create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/linkparse.txt create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/n2b64 create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/trustroot.txt create mode 100644 modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/urinorm.txt create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/Discover.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/DiscoverData.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/ParseHTML.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/TestUtil.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/XRDS.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/XRI.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/Yadis.php create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/README create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/accept.txt create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian.multi.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian.multi_uri.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian_priority.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/delegated-20060809-r1.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/delegated-20060809-r2.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/delegated-20060809.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/example-xrds.xml create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/manifest.txt create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/no-xrd.xml create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/not-xrds.xml create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/pip.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/prefixsometimes.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/ref.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/sometimesprefix.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/spoof1.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/spoof2.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/spoof3.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/test1-discover.txt create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/test1-parsehtml.txt create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/test1-xrd.xml create mode 100644 modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/uri_priority.xrds create mode 100644 modules/member/php-openid-1.2.3/Tests/TestDriver.php create mode 100644 modules/member/php-openid-1.2.3/admin/adminutil.php create mode 100644 modules/member/php-openid-1.2.3/admin/brace_style.pl create mode 100644 modules/member/php-openid-1.2.3/admin/checkimport create mode 100644 modules/member/php-openid-1.2.3/admin/checkimports create mode 100644 modules/member/php-openid-1.2.3/admin/darcs-ignore create mode 100644 modules/member/php-openid-1.2.3/admin/docblocks create mode 100644 modules/member/php-openid-1.2.3/admin/docblocks.pl create mode 100644 modules/member/php-openid-1.2.3/admin/findglobals create mode 100644 modules/member/php-openid-1.2.3/admin/findphp create mode 100644 modules/member/php-openid-1.2.3/admin/fixperms create mode 100644 modules/member/php-openid-1.2.3/admin/library-name create mode 100644 modules/member/php-openid-1.2.3/admin/longlines.pl create mode 100644 modules/member/php-openid-1.2.3/admin/makedoc.sh create mode 100644 modules/member/php-openid-1.2.3/admin/mathlib create mode 100644 modules/member/php-openid-1.2.3/admin/nobadbraces create mode 100644 modules/member/php-openid-1.2.3/admin/nobadcase create mode 100644 modules/member/php-openid-1.2.3/admin/nolonglines create mode 100644 modules/member/php-openid-1.2.3/admin/notabs create mode 100644 modules/member/php-openid-1.2.3/admin/open_tag create mode 100644 modules/member/php-openid-1.2.3/admin/otb_test.php create mode 100644 modules/member/php-openid-1.2.3/admin/package.xml create mode 100644 modules/member/php-openid-1.2.3/admin/package2.xml create mode 100644 modules/member/php-openid-1.2.3/admin/packagexml.py create mode 100644 modules/member/php-openid-1.2.3/admin/phpaliases.py create mode 100644 modules/member/php-openid-1.2.3/admin/prepare-release create mode 100644 modules/member/php-openid-1.2.3/admin/runtests create mode 100644 modules/member/php-openid-1.2.3/admin/texttest.php create mode 100644 modules/member/php-openid-1.2.3/admin/tutorials/OpenID/OpenID.pkg create mode 100644 modules/member/php-openid-1.2.3/admin/webtest.php create mode 100644 modules/member/php-openid-1.2.3/admin/xmlconfig.py create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_AlreadySigned.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Association.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_AuthRequest.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_CancelResponse.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Consumer.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_ConsumerResponse.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DatabaseConnection.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Decoder.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DiffieHellmanConsumerSession.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DiffieHellmanServerSession.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DumbStore.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Encoder.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_EncodingError.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_FailureResponse.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_FileStore.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_MalformedReturnURL.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_MalformedTrustRoot.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_MySQLStore.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_OpenIDStore.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_PlainTextConsumerSession.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_PlainTextServerSession.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_PostgreSQLStore.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SQLStore.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SQLiteStore.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Server.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_ServerError.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_ServerRequest.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SetupNeededResponse.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Signatory.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SigningEncoder.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SuccessResponse.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_UntrustedReturnURL.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_WebResponse.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Association.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Consumer.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---DatabaseConnection.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---DumbStore.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---FileStore.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Interface.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---MySQLStore.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---PostgreSQLStore.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---SQLStore.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---SQLiteStore.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Server.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---ServerRequest.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/OpenID/tutorial_OpenID.pkg.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/Auth_OpenID_ServiceEndpointLoader.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Discovery.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Manager.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_ManagerLoader.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_PHPSession.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Service.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_SessionLoader.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_XMLParser.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_XRDS.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Yadis.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_dom.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_domxml.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---Manager.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---XML.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---XRDS.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---Yadis.php.html create mode 100644 modules/member/php-openid-1.2.3/doc/classtrees_OpenID.html create mode 100644 modules/member/php-openid-1.2.3/doc/classtrees_Yadis.html create mode 100644 modules/member/php-openid-1.2.3/doc/elementindex.html create mode 100644 modules/member/php-openid-1.2.3/doc/elementindex_OpenID.html create mode 100644 modules/member/php-openid-1.2.3/doc/elementindex_Yadis.html create mode 100644 modules/member/php-openid-1.2.3/doc/errors.html create mode 100644 modules/member/php-openid-1.2.3/doc/index.html create mode 100644 modules/member/php-openid-1.2.3/doc/li_OpenID.html create mode 100644 modules/member/php-openid-1.2.3/doc/li_Yadis.html create mode 100644 modules/member/php-openid-1.2.3/doc/media/banner.css create mode 100644 modules/member/php-openid-1.2.3/doc/media/stylesheet.css create mode 100644 modules/member/php-openid-1.2.3/doc/packages.html create mode 100644 modules/member/php-openid-1.2.3/examples/README create mode 100644 modules/member/php-openid-1.2.3/examples/consumer/common.php create mode 100644 modules/member/php-openid-1.2.3/examples/consumer/finish_auth.php create mode 100644 modules/member/php-openid-1.2.3/examples/consumer/index.php create mode 100644 modules/member/php-openid-1.2.3/examples/consumer/try_auth.php create mode 100644 modules/member/php-openid-1.2.3/examples/detect.php create mode 100644 modules/member/php-openid-1.2.3/examples/server/index.php create mode 100644 modules/member/php-openid-1.2.3/examples/server/lib/actions.php create mode 100644 modules/member/php-openid-1.2.3/examples/server/lib/common.php create mode 100644 modules/member/php-openid-1.2.3/examples/server/lib/render.php create mode 100644 modules/member/php-openid-1.2.3/examples/server/lib/render/about.php create mode 100644 modules/member/php-openid-1.2.3/examples/server/lib/render/login.php create mode 100644 modules/member/php-openid-1.2.3/examples/server/lib/render/sites.php create mode 100644 modules/member/php-openid-1.2.3/examples/server/lib/render/trust.php create mode 100644 modules/member/php-openid-1.2.3/examples/server/lib/session.php create mode 100644 modules/member/php-openid-1.2.3/examples/server/openid-server.css create mode 100644 modules/member/php-openid-1.2.3/examples/server/server.php create mode 100644 modules/member/php-openid-1.2.3/examples/server/setup.php diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index 22c0881e4..6b017974e 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -86,37 +86,112 @@ ob_clean(); } + function getLegacyUserIDsFromOpenID($openid_identity) { + // Issue 17515512: + // OpenID Provider가 openid.identity를 + // http://araste.myid.net/ 으로 넘겨주든 + // http://araste.myid.net 으로 넘겨주든, + // 동일한 제로보드 사용자 이름에 매핑되어야 한다. + // 가입되지 않은 경우엔 / 를 뗀 것이 우선이 된다. + // OpenID Provider의 정책의 일시적 변경 때문에 + // / 가 붙은 꼴의 유저아이디로 (예: jangxyz.myid.net/ ) + // 가입된 사례가 있다. 이 때는 + // jangxyz.myid.net 과 jangxyz.myid.net/ 둘 모두로 시도해보아야 한다. + // 이를 위한 workaround이다. + + $result = array(); + $uri_matches = array(); + preg_match(Auth_OpenID_getURIPattern(), $openid_identity, $uri_matches); + + if (count($uri_matches) < 9) { + for ($i = count($uri_matches); $i <= 9; $i++) { + $uri_matches[] = ''; + } + } + + $scheme = $uri_matches[2]; + $authority = $uri_matches[4]; + $path = $uri_matches[5]; + $query = $uri_matches[6]; + $fragment = $uri_matches[8]; + + if ($scheme === null) $scheme = ''; + if ($authority === null) $authority = ''; + if ($path === null) $path = ''; + if ($query === null) $query = ''; + if ($fragment === null) $fragment = ''; + + if ($scheme == 'http' or $scheme == '') + $scheme_part = ''; + else + $scheme_part = $scheme."://"; + + + if ($path == '' || $path == '/') { + $result[] = $scheme_part.$authority.''.$query.$fragment; + $result[] = $scheme_part.$authority.'/'.$query.$fragment; + } + else { + $result[] = $scheme_part.$authority.$path.$query.$fragment; + } + + return $result; + } + /** * @brief openid 인증 체크 **/ function procMemberOpenIDValidate() { + // use the JanRain php-openid library + ini_set('include_path', ini_get('include_path').':./modules/member/php-openid-1.2.3'); + require_once('Auth/OpenID/URINorm.php'); + $oModuleModel = &getModel('module'); $config = $oModuleModel->getModuleConfig('member'); if($config->enable_openid != 'Y') $this->stop('msg_invalid_request'); + $openid_identity = Auth_OpenID_urinorm($_GET['openid_identity']); + ob_start(); require('./modules/member/openid_lib/class.openid.php'); require_once('./modules/member/openid_lib/libcurlemu.inc.php'); $openid = new SimpleOpenID; - $openid->SetIdentity($_GET['openid_identity']); + $openid->SetIdentity($openid_identity); $openid_validation_result = $openid->ValidateWithServer(); + ob_clean(); // 인증 성공 if ($openid_validation_result == true) { - // 기본 정보들을 받음 - $args->user_id = $args->nick_name = preg_replace('/^http:\/\//i','',Context::get('openid_identity')); - $args->email_address = Context::get('openid_sreg_email'); - $args->user_name = Context::get('openid_sreg_fullname'); - if(!$args->user_name) list($args->user_name) = explode('@', $args->email_address); - $args->birthday = str_replace('-','',Context::get('openid_sreg_dob')); - // 자체 인증 시도 - $output = $this->doLogin($args->user_id); + // 이 오픈아이디와 연결된 (또는 연결되어 있을 가능성이 있는) 제로보드 아이디들을 받아온다. + $login_success = false; + $user_id_candidates = $this->getLegacyUserIDsFromOpenID($openid_identity); + + $default_user_id = $user_id_candidates[0]; + + foreach($user_id_candidates as $user_id) { + $args->user_id = $args->nick_name = $user_id; + // 기본 정보들을 받음 + $args->email_address = Context::get('openid_sreg_email'); + $args->user_name = Context::get('openid_sreg_fullname'); + if(!$args->user_name) list($args->user_name) = explode('@', $args->email_address); + $args->birthday = str_replace('-','',Context::get('openid_sreg_dob')); + + // 자체 인증 시도 + $output = $this->doLogin($args->user_id); + + + if ($output->toBool()) { + $login_success = true; + break; + } + } // 자체 인증 실패시 회원 가입시킴 - if(!$output->toBool()) { + if(!$login_success) { + $args->user_id = $args->nick_name = $default_user_id; $args->password = md5(getmicrotime()); $output = $this->insertMember($args); if(!$output->toBool()) return $this->stop($output->getMessage()); diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID.php b/modules/member/php-openid-1.2.3/Auth/OpenID.php new file mode 100644 index 000000000..86278b9f1 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID.php @@ -0,0 +1,412 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +/** + * Require the fetcher code. + */ +require_once "Services/Yadis/PlainHTTPFetcher.php"; +require_once "Services/Yadis/ParanoidHTTPFetcher.php"; +require_once "Auth/OpenID/BigMath.php"; + +/** + * Status code returned by the server when the only option is to show + * an error page, since we do not have enough information to redirect + * back to the consumer. The associated value is an error message that + * should be displayed on an HTML error page. + * + * @see Auth_OpenID_Server + */ +define('Auth_OpenID_LOCAL_ERROR', 'local_error'); + +/** + * Status code returned when there is an error to return in key-value + * form to the consumer. The caller should return a 400 Bad Request + * response with content-type text/plain and the value as the body. + * + * @see Auth_OpenID_Server + */ +define('Auth_OpenID_REMOTE_ERROR', 'remote_error'); + +/** + * Status code returned when there is a key-value form OK response to + * the consumer. The value associated with this code is the + * response. The caller should return a 200 OK response with + * content-type text/plain and the value as the body. + * + * @see Auth_OpenID_Server + */ +define('Auth_OpenID_REMOTE_OK', 'remote_ok'); + +/** + * Status code returned when there is a redirect back to the + * consumer. The value is the URL to redirect back to. The caller + * should return a 302 Found redirect with a Location: header + * containing the URL. + * + * @see Auth_OpenID_Server + */ +define('Auth_OpenID_REDIRECT', 'redirect'); + +/** + * Status code returned when the caller needs to authenticate the + * user. The associated value is a {@link Auth_OpenID_ServerRequest} + * object that can be used to complete the authentication. If the user + * has taken some authentication action, use the retry() method of the + * {@link Auth_OpenID_ServerRequest} object to complete the request. + * + * @see Auth_OpenID_Server + */ +define('Auth_OpenID_DO_AUTH', 'do_auth'); + +/** + * Status code returned when there were no OpenID arguments + * passed. This code indicates that the caller should return a 200 OK + * response and display an HTML page that says that this is an OpenID + * server endpoint. + * + * @see Auth_OpenID_Server + */ +define('Auth_OpenID_DO_ABOUT', 'do_about'); + +/** + * Defines for regexes and format checking. + */ +define('Auth_OpenID_letters', + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); + +define('Auth_OpenID_digits', + "0123456789"); + +define('Auth_OpenID_punct', + "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"); + +if (Auth_OpenID_getMathLib() === null) { + define('Auth_OpenID_NO_MATH_SUPPORT', true); +} + +/** + * The OpenID utility function class. + * + * @package OpenID + * @access private + */ +class Auth_OpenID { + + /** + * These namespaces are automatically fixed in query arguments by + * Auth_OpenID::fixArgs. + */ + function getOpenIDNamespaces() + { + return array('openid', + 'sreg'); + } + + /** + * Rename query arguments back to 'openid.' from 'openid_' + * + * @access private + * @param array $args An associative array of URL query arguments + */ + function fixArgs($args) + { + foreach (array_keys($args) as $key) { + $fixed = $key; + if (preg_match('/^openid/', $key)) { + foreach (Auth_OpenID::getOpenIDNamespaces() as $ns) { + if (preg_match('/'.$ns.'_/', $key)) { + $fixed = preg_replace('/'.$ns.'_/', $ns.'.', $fixed); + } + } + + if ($fixed != $key) { + $val = $args[$key]; + unset($args[$key]); + $args[$fixed] = $val; + } + } + } + + return $args; + } + + /** + * Create dir_name as a directory if it does not exist. If it + * exists, make sure that it is, in fact, a directory. Returns + * true if the operation succeeded; false if not. + * + * @access private + */ + function ensureDir($dir_name) + { + if (is_dir($dir_name) || @mkdir($dir_name)) { + return true; + } else { + if (Auth_OpenID::ensureDir(dirname($dir_name))) { + return is_dir($dir_name) || @mkdir($dir_name); + } else { + return false; + } + } + } + + /** + * Convenience function for getting array values. + * + * @access private + */ + function arrayGet($arr, $key, $fallback = null) + { + if (is_array($arr)) { + if (array_key_exists($key, $arr)) { + return $arr[$key]; + } else { + return $fallback; + } + } else { + trigger_error("Auth_OpenID::arrayGet expected " . + "array as first parameter", E_USER_WARNING); + return false; + } + } + + /** + * Implements the PHP 5 'http_build_query' functionality. + * + * @access private + * @param array $data Either an array key/value pairs or an array + * of arrays, each of which holding two values: a key and a value, + * sequentially. + * @return string $result The result of url-encoding the key/value + * pairs from $data into a URL query string + * (e.g. "username=bob&id=56"). + */ + function httpBuildQuery($data) + { + $pairs = array(); + foreach ($data as $key => $value) { + if (is_array($value)) { + $pairs[] = urlencode($value[0])."=".urlencode($value[1]); + } else { + $pairs[] = urlencode($key)."=".urlencode($value); + } + } + return implode("&", $pairs); + } + + /** + * "Appends" query arguments onto a URL. The URL may or may not + * already have arguments (following a question mark). + * + * @param string $url A URL, which may or may not already have + * arguments. + * @param array $args Either an array key/value pairs or an array of + * arrays, each of which holding two values: a key and a value, + * sequentially. If $args is an ordinary key/value array, the + * parameters will be added to the URL in sorted alphabetical order; + * if $args is an array of arrays, their order will be preserved. + * @return string $url The original URL with the new parameters added. + * + */ + function appendArgs($url, $args) + { + if (count($args) == 0) { + return $url; + } + + // Non-empty array; if it is an array of arrays, use + // multisort; otherwise use sort. + if (array_key_exists(0, $args) && + is_array($args[0])) { + // Do nothing here. + } else { + $keys = array_keys($args); + sort($keys); + $new_args = array(); + foreach ($keys as $key) { + $new_args[] = array($key, $args[$key]); + } + $args = $new_args; + } + + $sep = '?'; + if (strpos($url, '?') !== false) { + $sep = '&'; + } + + return $url . $sep . Auth_OpenID::httpBuildQuery($args); + } + + /** + * Turn a string into an ASCII string. + * + * Replace non-ascii characters with a %-encoded, UTF-8 + * encoding. This function will fail if the input is a string and + * there are non-7-bit-safe characters. It is assumed that the + * caller will have already translated the input into a Unicode + * character sequence, according to the encoding of the HTTP POST + * or GET. + * + * Do not escape anything that is already 7-bit safe, so we do the + * minimal transform on the identity URL + * + * @access private + */ + function quoteMinimal($s) + { + $res = array(); + for ($i = 0; $i < strlen($s); $i++) { + $c = $s[$i]; + if ($c >= "\x80") { + for ($j = 0; $j < count(utf8_encode($c)); $j++) { + array_push($res, sprintf("%02X", ord($c[$j]))); + } + } else { + array_push($res, $c); + } + } + + return implode('', $res); + } + + /** + * Implements python's urlunparse, which is not available in PHP. + * Given the specified components of a URL, this function rebuilds + * and returns the URL. + * + * @access private + * @param string $scheme The scheme (e.g. 'http'). Defaults to 'http'. + * @param string $host The host. Required. + * @param string $port The port. + * @param string $path The path. + * @param string $query The query. + * @param string $fragment The fragment. + * @return string $url The URL resulting from assembling the + * specified components. + */ + function urlunparse($scheme, $host, $port = null, $path = '/', + $query = '', $fragment = '') + { + + if (!$scheme) { + $scheme = 'http'; + } + + if (!$host) { + return false; + } + + if (!$path) { + $path = '/'; + } + + $result = $scheme . "://" . $host; + + if ($port) { + $result .= ":" . $port; + } + + $result .= $path; + + if ($query) { + $result .= "?" . $query; + } + + if ($fragment) { + $result .= "#" . $fragment; + } + + return $result; + } + + /** + * Given a URL, this "normalizes" it by adding a trailing slash + * and / or a leading http:// scheme where necessary. Returns + * null if the original URL is malformed and cannot be normalized. + * + * @access private + * @param string $url The URL to be normalized. + * @return mixed $new_url The URL after normalization, or null if + * $url was malformed. + */ + function normalizeUrl($url) + { + if ($url === null) { + return null; + } + + assert(is_string($url)); + + $old_url = $url; + $url = trim($url); + + if (strpos($url, "://") === false) { + $url = "http://" . $url; + } + + $parsed = @parse_url($url); + + if ($parsed === false) { + return null; + } + + $defaults = array( + 'scheme' => '', + 'host' => '', + 'path' => '', + 'query' => '', + 'fragment' => '', + 'port' => '' + ); + + $parsed = array_merge($defaults, $parsed); + + if (($parsed['scheme'] == '') || + ($parsed['host'] == '')) { + if ($parsed['path'] == '' && + $parsed['query'] == '' && + $parsed['fragment'] == '') { + return null; + } + + $url = 'http://' + $url; + $parsed = parse_url($url); + + $parsed = array_merge($defaults, $parsed); + } + + $tail = array_map(array('Auth_OpenID', 'quoteMinimal'), + array($parsed['path'], + $parsed['query'], + $parsed['fragment'])); + if ($tail[0] == '') { + $tail[0] = '/'; + } + + $url = Auth_OpenID::urlunparse($parsed['scheme'], $parsed['host'], + $parsed['port'], $tail[0], $tail[1], + $tail[2]); + + assert(is_string($url)); + + return $url; + } +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/Association.php b/modules/member/php-openid-1.2.3/Auth/OpenID/Association.php new file mode 100644 index 000000000..109a97080 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/Association.php @@ -0,0 +1,308 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +/** + * @access private + */ +require_once 'Auth/OpenID/CryptUtil.php'; + +/** + * @access private + */ +require_once 'Auth/OpenID/KVForm.php'; + +/** + * This class represents an association between a server and a + * consumer. In general, users of this library will never see + * instances of this object. The only exception is if you implement a + * custom {@link Auth_OpenID_OpenIDStore}. + * + * If you do implement such a store, it will need to store the values + * of the handle, secret, issued, lifetime, and assoc_type instance + * variables. + * + * @package OpenID + */ +class Auth_OpenID_Association { + + /** + * This is a HMAC-SHA1 specific value. + * + * @access private + */ + var $SIG_LENGTH = 20; + + /** + * The ordering and name of keys as stored by serialize. + * + * @access private + */ + var $assoc_keys = array( + 'version', + 'handle', + 'secret', + 'issued', + 'lifetime', + 'assoc_type' + ); + + /** + * This is an alternate constructor (factory method) used by the + * OpenID consumer library to create associations. OpenID store + * implementations shouldn't use this constructor. + * + * @access private + * + * @param integer $expires_in This is the amount of time this + * association is good for, measured in seconds since the + * association was issued. + * + * @param string $handle This is the handle the server gave this + * association. + * + * @param string secret This is the shared secret the server + * generated for this association. + * + * @param assoc_type This is the type of association this + * instance represents. The only valid value of this field at + * this time is 'HMAC-SHA1', but new types may be defined in the + * future. + * + * @return association An {@link Auth_OpenID_Association} + * instance. + */ + function fromExpiresIn($expires_in, $handle, $secret, $assoc_type) + { + $issued = time(); + $lifetime = $expires_in; + return new Auth_OpenID_Association($handle, $secret, + $issued, $lifetime, $assoc_type); + } + + /** + * This is the standard constructor for creating an association. + * The library should create all of the necessary associations, so + * this constructor is not part of the external API. + * + * @access private + * + * @param string $handle This is the handle the server gave this + * association. + * + * @param string $secret This is the shared secret the server + * generated for this association. + * + * @param integer $issued This is the time this association was + * issued, in seconds since 00:00 GMT, January 1, 1970. (ie, a + * unix timestamp) + * + * @param integer $lifetime This is the amount of time this + * association is good for, measured in seconds since the + * association was issued. + * + * @param string $assoc_type This is the type of association this + * instance represents. The only valid value of this field at + * this time is 'HMAC-SHA1', but new types may be defined in the + * future. + */ + function Auth_OpenID_Association( + $handle, $secret, $issued, $lifetime, $assoc_type) + { + if ($assoc_type != 'HMAC-SHA1') { + $fmt = 'HMAC-SHA1 is the only supported association type (got %s)'; + trigger_error(sprintf($fmt, $assoc_type), E_USER_ERROR); + } + + $this->handle = $handle; + $this->secret = $secret; + $this->issued = $issued; + $this->lifetime = $lifetime; + $this->assoc_type = $assoc_type; + } + + /** + * This returns the number of seconds this association is still + * valid for, or 0 if the association is no longer valid. + * + * @return integer $seconds The number of seconds this association + * is still valid for, or 0 if the association is no longer valid. + */ + function getExpiresIn($now = null) + { + if ($now == null) { + $now = time(); + } + + return max(0, $this->issued + $this->lifetime - $now); + } + + /** + * This checks to see if two {@link Auth_OpenID_Association} + * instances represent the same association. + * + * @return bool $result true if the two instances represent the + * same association, false otherwise. + */ + function equal($other) + { + return ((gettype($this) == gettype($other)) + && ($this->handle == $other->handle) + && ($this->secret == $other->secret) + && ($this->issued == $other->issued) + && ($this->lifetime == $other->lifetime) + && ($this->assoc_type == $other->assoc_type)); + } + + /** + * Convert an association to KV form. + * + * @return string $result String in KV form suitable for + * deserialization by deserialize. + */ + function serialize() + { + $data = array( + 'version' => '2', + 'handle' => $this->handle, + 'secret' => base64_encode($this->secret), + 'issued' => strval(intval($this->issued)), + 'lifetime' => strval(intval($this->lifetime)), + 'assoc_type' => $this->assoc_type + ); + + assert(array_keys($data) == $this->assoc_keys); + + return Auth_OpenID_KVForm::fromArray($data, $strict = true); + } + + /** + * Parse an association as stored by serialize(). This is the + * inverse of serialize. + * + * @param string $assoc_s Association as serialized by serialize() + * @return Auth_OpenID_Association $result instance of this class + */ + function deserialize($class_name, $assoc_s) + { + $pairs = Auth_OpenID_KVForm::toArray($assoc_s, $strict = true); + $keys = array(); + $values = array(); + foreach ($pairs as $key => $value) { + if (is_array($value)) { + list($key, $value) = $value; + } + $keys[] = $key; + $values[] = $value; + } + + $class_vars = get_class_vars($class_name); + $class_assoc_keys = $class_vars['assoc_keys']; + + sort($keys); + sort($class_assoc_keys); + + if ($keys != $class_assoc_keys) { + trigger_error('Unexpected key values: ' . strval($keys), + E_USER_WARNING); + return null; + } + + $version = $pairs['version']; + $handle = $pairs['handle']; + $secret = $pairs['secret']; + $issued = $pairs['issued']; + $lifetime = $pairs['lifetime']; + $assoc_type = $pairs['assoc_type']; + + if ($version != '2') { + trigger_error('Unknown version: ' . $version, E_USER_WARNING); + return null; + } + + $issued = intval($issued); + $lifetime = intval($lifetime); + $secret = base64_decode($secret); + + return new $class_name( + $handle, $secret, $issued, $lifetime, $assoc_type); + } + + /** + * Generate a signature for a sequence of (key, value) pairs + * + * @access private + * @param array $pairs The pairs to sign, in order. This is an + * array of two-tuples. + * @return string $signature The binary signature of this sequence + * of pairs + */ + function sign($pairs) + { + $kv = Auth_OpenID_KVForm::fromArray($pairs); + return Auth_OpenID_HMACSHA1($this->secret, $kv); + } + + /** + * Generate a signature for some fields in a dictionary + * + * @access private + * @param array $fields The fields to sign, in order; this is an + * array of strings. + * @param array $data Dictionary of values to sign (an array of + * string => string pairs). + * @return string $signature The signature, base64 encoded + */ + function signDict($fields, $data, $prefix = 'openid.') + { + $pairs = array(); + foreach ($fields as $field) { + $pairs[] = array($field, $data[$prefix . $field]); + } + + return base64_encode($this->sign($pairs)); + } + + /** + * Add a signature to an array of fields + * + * @access private + */ + function addSignature($fields, &$data, $prefix = 'openid.') + { + $sig = $this->signDict($fields, $data, $prefix); + $signed = implode(",", $fields); + $data[$prefix . 'sig'] = $sig; + $data[$prefix . 'signed'] = $signed; + } + + /** + * Confirm that the signature of these fields matches the + * signature contained in the data + * + * @access private + */ + function checkSignature($data, $prefix = 'openid.') + { + $signed = $data[$prefix . 'signed']; + $fields = explode(",", $signed); + $expected_sig = $this->signDict($fields, $data, $prefix); + $request_sig = $data[$prefix . 'sig']; + + return ($request_sig == $expected_sig); + } +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/BigMath.php b/modules/member/php-openid-1.2.3/Auth/OpenID/BigMath.php new file mode 100644 index 000000000..3113104ba --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/BigMath.php @@ -0,0 +1,444 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +/** + * Needed for random number generation + */ +require_once 'Auth/OpenID/CryptUtil.php'; + +/** + * The superclass of all big-integer math implementations + * @access private + * @package OpenID + */ +class Auth_OpenID_MathLibrary { + /** + * Given a long integer, returns the number converted to a binary + * string. This function accepts long integer values of arbitrary + * magnitude and uses the local large-number math library when + * available. + * + * @param integer $long The long number (can be a normal PHP + * integer or a number created by one of the available long number + * libraries) + * @return string $binary The binary version of $long + */ + function longToBinary($long) + { + $cmp = $this->cmp($long, 0); + if ($cmp < 0) { + $msg = __FUNCTION__ . " takes only positive integers."; + trigger_error($msg, E_USER_ERROR); + return null; + } + + if ($cmp == 0) { + return "\x00"; + } + + $bytes = array(); + + while ($this->cmp($long, 0) > 0) { + array_unshift($bytes, $this->mod($long, 256)); + $long = $this->div($long, pow(2, 8)); + } + + if ($bytes && ($bytes[0] > 127)) { + array_unshift($bytes, 0); + } + + $string = ''; + foreach ($bytes as $byte) { + $string .= pack('C', $byte); + } + + return $string; + } + + /** + * Given a binary string, returns the binary string converted to a + * long number. + * + * @param string $binary The binary version of a long number, + * probably as a result of calling longToBinary + * @return integer $long The long number equivalent of the binary + * string $str + */ + function binaryToLong($str) + { + if ($str === null) { + return null; + } + + // Use array_merge to return a zero-indexed array instead of a + // one-indexed array. + $bytes = array_merge(unpack('C*', $str)); + + $n = $this->init(0); + + if ($bytes && ($bytes[0] > 127)) { + trigger_error("bytesToNum works only for positive integers.", + E_USER_WARNING); + return null; + } + + foreach ($bytes as $byte) { + $n = $this->mul($n, pow(2, 8)); + $n = $this->add($n, $byte); + } + + return $n; + } + + function base64ToLong($str) + { + $b64 = base64_decode($str); + + if ($b64 === false) { + return false; + } + + return $this->binaryToLong($b64); + } + + function longToBase64($str) + { + return base64_encode($this->longToBinary($str)); + } + + /** + * Returns a random number in the specified range. This function + * accepts $start, $stop, and $step values of arbitrary magnitude + * and will utilize the local large-number math library when + * available. + * + * @param integer $start The start of the range, or the minimum + * random number to return + * @param integer $stop The end of the range, or the maximum + * random number to return + * @param integer $step The step size, such that $result - ($step + * * N) = $start for some N + * @return integer $result The resulting randomly-generated number + */ + function rand($stop) + { + static $duplicate_cache = array(); + + // Used as the key for the duplicate cache + $rbytes = $this->longToBinary($stop); + + if (array_key_exists($rbytes, $duplicate_cache)) { + list($duplicate, $nbytes) = $duplicate_cache[$rbytes]; + } else { + if ($rbytes[0] == "\x00") { + $nbytes = strlen($rbytes) - 1; + } else { + $nbytes = strlen($rbytes); + } + + $mxrand = $this->pow(256, $nbytes); + + // If we get a number less than this, then it is in the + // duplicated range. + $duplicate = $this->mod($mxrand, $stop); + + if (count($duplicate_cache) > 10) { + $duplicate_cache = array(); + } + + $duplicate_cache[$rbytes] = array($duplicate, $nbytes); + } + + do { + $bytes = "\x00" . Auth_OpenID_CryptUtil::getBytes($nbytes); + $n = $this->binaryToLong($bytes); + // Keep looping if this value is in the low duplicated range + } while ($this->cmp($n, $duplicate) < 0); + + return $this->mod($n, $stop); + } +} + +/** + * Exposes BCmath math library functionality. + * + * {@link Auth_OpenID_BcMathWrapper} wraps the functionality provided + * by the BCMath extension. + * + * @access private + * @package OpenID + */ +class Auth_OpenID_BcMathWrapper extends Auth_OpenID_MathLibrary{ + var $type = 'bcmath'; + + function add($x, $y) + { + return bcadd($x, $y); + } + + function sub($x, $y) + { + return bcsub($x, $y); + } + + function pow($base, $exponent) + { + return bcpow($base, $exponent); + } + + function cmp($x, $y) + { + return bccomp($x, $y); + } + + function init($number, $base = 10) + { + return $number; + } + + function mod($base, $modulus) + { + return bcmod($base, $modulus); + } + + function mul($x, $y) + { + return bcmul($x, $y); + } + + function div($x, $y) + { + return bcdiv($x, $y); + } + + /** + * Same as bcpowmod when bcpowmod is missing + * + * @access private + */ + function _powmod($base, $exponent, $modulus) + { + $square = $this->mod($base, $modulus); + $result = 1; + while($this->cmp($exponent, 0) > 0) { + if ($this->mod($exponent, 2)) { + $result = $this->mod($this->mul($result, $square), $modulus); + } + $square = $this->mod($this->mul($square, $square), $modulus); + $exponent = $this->div($exponent, 2); + } + return $result; + } + + function powmod($base, $exponent, $modulus) + { + if (function_exists('bcpowmod')) { + return bcpowmod($base, $exponent, $modulus); + } else { + return $this->_powmod($base, $exponent, $modulus); + } + } + + function toString($num) + { + return $num; + } +} + +/** + * Exposes GMP math library functionality. + * + * {@link Auth_OpenID_GmpMathWrapper} wraps the functionality provided + * by the GMP extension. + * + * @access private + * @package OpenID + */ +class Auth_OpenID_GmpMathWrapper extends Auth_OpenID_MathLibrary{ + var $type = 'gmp'; + + function add($x, $y) + { + return gmp_add($x, $y); + } + + function sub($x, $y) + { + return gmp_sub($x, $y); + } + + function pow($base, $exponent) + { + return gmp_pow($base, $exponent); + } + + function cmp($x, $y) + { + return gmp_cmp($x, $y); + } + + function init($number, $base = 10) + { + return gmp_init($number, $base); + } + + function mod($base, $modulus) + { + return gmp_mod($base, $modulus); + } + + function mul($x, $y) + { + return gmp_mul($x, $y); + } + + function div($x, $y) + { + return gmp_div_q($x, $y); + } + + function powmod($base, $exponent, $modulus) + { + return gmp_powm($base, $exponent, $modulus); + } + + function toString($num) + { + return gmp_strval($num); + } +} + +/** + * Define the supported extensions. An extension array has keys + * 'modules', 'extension', and 'class'. 'modules' is an array of PHP + * module names which the loading code will attempt to load. These + * values will be suffixed with a library file extension (e.g. ".so"). + * 'extension' is the name of a PHP extension which will be tested + * before 'modules' are loaded. 'class' is the string name of a + * {@link Auth_OpenID_MathWrapper} subclass which should be + * instantiated if a given extension is present. + * + * You can define new math library implementations and add them to + * this array. + */ +global $_Auth_OpenID_math_extensions; +$_Auth_OpenID_math_extensions = array( + array('modules' => array('gmp', 'php_gmp'), + 'extension' => 'gmp', + 'class' => 'Auth_OpenID_GmpMathWrapper'), + array('modules' => array('bcmath', 'php_bcmath'), + 'extension' => 'bcmath', + 'class' => 'Auth_OpenID_BcMathWrapper') + ); + +/** + * Detect which (if any) math library is available + */ +function Auth_OpenID_detectMathLibrary($exts) +{ + $loaded = false; + + foreach ($exts as $extension) { + // See if the extension specified is already loaded. + if ($extension['extension'] && + extension_loaded($extension['extension'])) { + $loaded = true; + } + + // Try to load dynamic modules. + if (!$loaded) { + foreach ($extension['modules'] as $module) { + if (@dl($module . "." . PHP_SHLIB_SUFFIX)) { + $loaded = true; + break; + } + } + } + + // If the load succeeded, supply an instance of + // Auth_OpenID_MathWrapper which wraps the specified + // module's functionality. + if ($loaded) { + return $extension; + } + } + + return false; +} + +/** + * {@link Auth_OpenID_getMathLib} checks for the presence of long + * number extension modules and returns an instance of + * {@link Auth_OpenID_MathWrapper} which exposes the module's + * functionality. + * + * Checks for the existence of an extension module described by the + * local {@link Auth_OpenID_math_extensions} array and returns an + * instance of a wrapper for that extension module. If no extension + * module is found, an instance of {@link Auth_OpenID_MathWrapper} is + * returned, which wraps the native PHP integer implementation. The + * proper calling convention for this method is $lib =& + * Auth_OpenID_getMathLib(). + * + * This function checks for the existence of specific long number + * implementations in the following order: GMP followed by BCmath. + * + * @return Auth_OpenID_MathWrapper $instance An instance of + * {@link Auth_OpenID_MathWrapper} or one of its subclasses + * + * @package OpenID + */ +function &Auth_OpenID_getMathLib() +{ + // The instance of Auth_OpenID_MathWrapper that we choose to + // supply will be stored here, so that subseqent calls to this + // method will return a reference to the same object. + static $lib = null; + + if (isset($lib)) { + return $lib; + } + + if (defined('Auth_OpenID_NO_MATH_SUPPORT')) { + $null = null; + return $null; + } + + // If this method has not been called before, look at + // $Auth_OpenID_math_extensions and try to find an extension that + // works. + global $_Auth_OpenID_math_extensions; + $ext = Auth_OpenID_detectMathLibrary($_Auth_OpenID_math_extensions); + if ($ext === false) { + $tried = array(); + foreach ($_Auth_OpenID_math_extensions as $extinfo) { + $tried[] = $extinfo['extension']; + } + $triedstr = implode(", ", $tried); + + define('Auth_OpenID_NO_MATH_SUPPORT', true); + return null; + } + + // Instantiate a new wrapper + $class = $ext['class']; + $lib = new $class(); + + return $lib; +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/Consumer.php b/modules/member/php-openid-1.2.3/Auth/OpenID/Consumer.php new file mode 100644 index 000000000..7ea75c75a --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/Consumer.php @@ -0,0 +1,1186 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +/** + * Require utility classes and functions for the consumer. + */ +require_once "Auth/OpenID.php"; +require_once "Auth/OpenID/HMACSHA1.php"; +require_once "Auth/OpenID/Association.php"; +require_once "Auth/OpenID/CryptUtil.php"; +require_once "Auth/OpenID/DiffieHellman.php"; +require_once "Auth/OpenID/KVForm.php"; +require_once "Auth/OpenID/Discover.php"; +require_once "Services/Yadis/Manager.php"; +require_once "Services/Yadis/XRI.php"; + +/** + * This is the status code returned when the complete method returns + * successfully. + */ +define('Auth_OpenID_SUCCESS', 'success'); + +/** + * Status to indicate cancellation of OpenID authentication. + */ +define('Auth_OpenID_CANCEL', 'cancel'); + +/** + * This is the status code completeAuth returns when the value it + * received indicated an invalid login. + */ +define('Auth_OpenID_FAILURE', 'failure'); + +/** + * This is the status code completeAuth returns when the + * {@link Auth_OpenID_Consumer} instance is in immediate mode, and the + * identity server sends back a URL to send the user to to complete his + * or her login. + */ +define('Auth_OpenID_SETUP_NEEDED', 'setup needed'); + +/** + * This is the status code beginAuth returns when the page fetched + * from the entered OpenID URL doesn't contain the necessary link tags + * to function as an identity page. + */ +define('Auth_OpenID_PARSE_ERROR', 'parse error'); + +/** + * This is the characters that the nonces are made from. + */ +define('Auth_OpenID_DEFAULT_NONCE_CHRS',"abcdefghijklmnopqrstuvwxyz" . + "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"); + +/** + * An OpenID consumer implementation that performs discovery and does + * session management. See the Consumer.php file documentation for + * more information. + * + * @package OpenID + */ +class Auth_OpenID_Consumer { + + /** + * @access private + */ + var $session_key_prefix = "_openid_consumer_"; + + /** + * @access private + */ + var $_token_suffix = "last_token"; + + /** + * Initialize a Consumer instance. + * + * You should create a new instance of the Consumer object with + * every HTTP request that handles OpenID transactions. + * + * @param Auth_OpenID_OpenIDStore $store This must be an object + * that implements the interface in {@link + * Auth_OpenID_OpenIDStore}. Several concrete implementations are + * provided, to cover most common use cases. For stores backed by + * MySQL, PostgreSQL, or SQLite, see the {@link + * Auth_OpenID_SQLStore} class and its sublcasses. For a + * filesystem-backed store, see the {@link Auth_OpenID_FileStore} + * module. As a last resort, if it isn't possible for the server + * to store state at all, an instance of {@link + * Auth_OpenID_DumbStore} can be used. + * + * @param mixed session An object which implements the interface + * of the Services_Yadis_Session class. Particularly, this object + * is expected to have these methods: get($key), set($key, + * $value), and del($key). This defaults to a session object + * which wraps PHP's native session machinery. You should only + * need to pass something here if you have your own sessioning + * implementation. + */ + function Auth_OpenID_Consumer(&$store, $session = null) + { + if ($session === null) { + $session = new Services_Yadis_PHPSession(); + } + + $this->session =& $session; + $this->consumer =& new Auth_OpenID_GenericConsumer($store); + $this->_token_key = $this->session_key_prefix . $this->_token_suffix; + } + + /** + * Start the OpenID authentication process. See steps 1-2 in the + * overview at the top of this file. + * + * @param User_url: Identity URL given by the user. This method + * performs a textual transformation of the URL to try and make + * sure it is normalized. For example, a user_url of example.com + * will be normalized to http://example.com/ normalizing and + * resolving any redirects the server might issue. + * + * @return Auth_OpenID_AuthRequest $auth_request An object + * containing the discovered information will be returned, with a + * method for building a redirect URL to the server, as described + * in step 3 of the overview. This object may also be used to add + * extension arguments to the request, using its 'addExtensionArg' + * method. + */ + function begin($user_url) + { + $discoverMethod = '_Auth_OpenID_discoverServiceList'; + $openid_url = $user_url; + + if (Services_Yadis_identifierScheme($user_url) == 'XRI') { + $discoverMethod = '_Auth_OpenID_discoverXRIServiceList'; + } else { + $openid_url = Auth_OpenID::normalizeUrl($user_url); + } + + $disco =& new Services_Yadis_Discovery($this->session, + $openid_url, + $this->session_key_prefix); + + // Set the 'stale' attribute of the manager. If discovery + // fails in a fatal way, the stale flag will cause the manager + // to be cleaned up next time discovery is attempted. + + $m = $disco->getManager(); + $loader = new Services_Yadis_ManagerLoader(); + + if ($m) { + if ($m->stale) { + $disco->destroyManager(); + } else { + $m->stale = true; + $disco->session->set($disco->session_key, + serialize($loader->toSession($m))); + } + } + + $endpoint = $disco->getNextService($discoverMethod, + $this->consumer->fetcher); + + // Reset the 'stale' attribute of the manager. + $m =& $disco->getManager(); + if ($m) { + $m->stale = false; + $disco->session->set($disco->session_key, + serialize($loader->toSession($m))); + } + + if ($endpoint === null) { + return null; + } else { + return $this->beginWithoutDiscovery($endpoint); + } + } + + /** + * Start OpenID verification without doing OpenID server + * discovery. This method is used internally by Consumer.begin + * after discovery is performed, and exists to provide an + * interface for library users needing to perform their own + * discovery. + * + * @param Auth_OpenID_ServiceEndpoint $endpoint an OpenID service + * endpoint descriptor. + * + * @return Auth_OpenID_AuthRequest $auth_request An OpenID + * authentication request object. + */ + function &beginWithoutDiscovery($endpoint) + { + $loader = new Auth_OpenID_ServiceEndpointLoader(); + $auth_req = $this->consumer->begin($endpoint); + $this->session->set($this->_token_key, + $loader->toSession($auth_req->endpoint)); + return $auth_req; + } + + /** + * Called to interpret the server's response to an OpenID + * request. It is called in step 4 of the flow described in the + * consumer overview. + * + * @param array $query An array of the query parameters (key => + * value pairs) for this HTTP request. + * + * @return Auth_OpenID_ConsumerResponse $response A instance of an + * Auth_OpenID_ConsumerResponse subclass. The type of response is + * indicated by the status attribute, which will be one of + * SUCCESS, CANCEL, FAILURE, or SETUP_NEEDED. + */ + function complete($query) + { + $query = Auth_OpenID::fixArgs($query); + + $loader = new Auth_OpenID_ServiceEndpointLoader(); + $endpoint_data = $this->session->get($this->_token_key); + $endpoint = + $loader->fromSession($endpoint_data); + + if ($endpoint === null) { + $response = new Auth_OpenID_FailureResponse(null, + 'No session state found'); + } else { + $response = $this->consumer->complete($query, $endpoint); + $this->session->del($this->_token_key); + } + + if (in_array($response->status, array(Auth_OpenID_SUCCESS, + Auth_OpenID_CANCEL))) { + if ($response->identity_url !== null) { + $disco = new Services_Yadis_Discovery($this->session, + $response->identity_url, + $this->session_key_prefix); + $disco->cleanup(); + } + } + + return $response; + } +} + +class Auth_OpenID_DiffieHellmanConsumerSession { + var $session_type = 'DH-SHA1'; + + function Auth_OpenID_DiffieHellmanConsumerSession($dh = null) + { + if ($dh === null) { + $dh = new Auth_OpenID_DiffieHellman(); + } + + $this->dh = $dh; + } + + function getRequest() + { + $math =& Auth_OpenID_getMathLib(); + + $cpub = $math->longToBase64($this->dh->public); + + $args = array('openid.dh_consumer_public' => $cpub); + + if (!$this->dh->usingDefaultValues()) { + $args = array_merge($args, array( + 'openid.dh_modulus' => + $math->longToBase64($this->dh->mod), + 'openid.dh_gen' => + $math->longToBase64($this->dh->gen))); + } + + return $args; + } + + function extractSecret($response) + { + if (!array_key_exists('dh_server_public', $response)) { + return null; + } + + if (!array_key_exists('enc_mac_key', $response)) { + return null; + } + + $math =& Auth_OpenID_getMathLib(); + $spub = $math->base64ToLong($response['dh_server_public']); + $enc_mac_key = base64_decode($response['enc_mac_key']); + + return $this->dh->xorSecret($spub, $enc_mac_key); + } +} + +class Auth_OpenID_PlainTextConsumerSession { + var $session_type = null; + + function getRequest() + { + return array(); + } + + function extractSecret($response) + { + if (!array_key_exists('mac_key', $response)) { + return null; + } + + return base64_decode($response['mac_key']); + } +} + +/** + * This class is the interface to the OpenID consumer logic. + * Instances of it maintain no per-request state, so they can be + * reused (or even used by multiple threads concurrently) as needed. + * + * @package OpenID + * @access private + */ +class Auth_OpenID_GenericConsumer { + /** + * This consumer's store object. + */ + var $store; + + /** + * @access private + */ + var $_use_assocs; + + /** + * This is the number of characters in the generated nonce for + * each transaction. + */ + var $nonce_len = 8; + + /** + * What characters are allowed in nonces + */ + var $nonce_chrs = Auth_OpenID_DEFAULT_NONCE_CHRS; + + /** + * This method initializes a new {@link Auth_OpenID_Consumer} + * instance to access the library. + * + * @param Auth_OpenID_OpenIDStore $store This must be an object + * that implements the interface in {@link Auth_OpenID_OpenIDStore}. + * Several concrete implementations are provided, to cover most common use + * cases. For stores backed by MySQL, PostgreSQL, or SQLite, see + * the {@link Auth_OpenID_SQLStore} class and its sublcasses. For a + * filesystem-backed store, see the {@link Auth_OpenID_FileStore} module. + * As a last resort, if it isn't possible for the server to store + * state at all, an instance of {@link Auth_OpenID_DumbStore} can be used. + * + * @param bool $immediate This is an optional boolean value. It + * controls whether the library uses immediate mode, as explained + * in the module description. The default value is False, which + * disables immediate mode. + */ + function Auth_OpenID_GenericConsumer(&$store) + { + $this->store =& $store; + $this->_use_assocs = + !(defined('Auth_OpenID_NO_MATH_SUPPORT') || + ($this->store && $this->store->isDumb())); + + $this->fetcher = Services_Yadis_Yadis::getHTTPFetcher(); + } + + function begin($service_endpoint) + { + $nonce = $this->_createNonce(); + $assoc = $this->_getAssociation($service_endpoint->server_url); + $r = new Auth_OpenID_AuthRequest($assoc, $service_endpoint); + $r->return_to_args['nonce'] = $nonce; + return $r; + } + + function complete($query, $endpoint) + { + $mode = Auth_OpenID::arrayGet($query, 'openid.mode', + ''); + + if ($mode == Auth_OpenID_CANCEL) { + return new Auth_OpenID_CancelResponse($endpoint); + } else if ($mode == 'error') { + $error = Auth_OpenID::arrayGet($query, 'openid.error'); + return new Auth_OpenID_FailureResponse($endpoint, $error); + } else if ($mode == 'id_res') { + if ($endpoint->identity_url === null) { + return new Auth_OpenID_FailureResponse($identity_url, + "No session state found"); + } + + $response = $this->_doIdRes($query, $endpoint); + + if ($response === null) { + return new Auth_OpenID_FailureResponse($endpoint, + "HTTP request failed"); + } + if ($response->status == Auth_OpenID_SUCCESS) { + return $this->_checkNonce($response, + Auth_OpenID::arrayGet($query, + 'nonce')); + } else { + return $response; + } + } else { + return new Auth_OpenID_FailureResponse($endpoint, + sprintf("Invalid openid.mode '%s'", + $mode)); + } + } + + /** + * @access private + */ + function _doIdRes($query, $endpoint) + { + $user_setup_url = Auth_OpenID::arrayGet($query, + 'openid.user_setup_url'); + + if ($user_setup_url !== null) { + return new Auth_OpenID_SetupNeededResponse($endpoint, + $user_setup_url); + } + + $return_to = Auth_OpenID::arrayGet($query, 'openid.return_to', null); + $server_id2 = Auth_OpenID::arrayGet($query, 'openid.identity', null); + $assoc_handle = Auth_OpenID::arrayGet($query, + 'openid.assoc_handle', null); + + if (($return_to === null) || + ($server_id2 === null) || + ($assoc_handle === null)) { + return new Auth_OpenID_FailureResponse($endpoint, + "Missing required field"); + } + + if ($endpoint->getServerID() != $server_id2) { + return new Auth_OpenID_FailureResponse($endpoint, + "Server ID (delegate) mismatch"); + } + + $signed = Auth_OpenID::arrayGet($query, 'openid.signed'); + + $assoc = $this->store->getAssociation($endpoint->server_url, + $assoc_handle); + + if ($assoc === null) { + // It's not an association we know about. Dumb mode is + // our only possible path for recovery. + if ($this->_checkAuth($query, $endpoint->server_url)) { + return new Auth_OpenID_SuccessResponse($endpoint, $query, + $signed); + } else { + return new Auth_OpenID_FailureResponse($endpoint, + "Server denied check_authentication"); + } + } + + if ($assoc->getExpiresIn() <= 0) { + $msg = sprintf("Association with %s expired", + $endpoint->server_url); + return new Auth_OpenID_FailureResponse($endpoint, $msg); + } + + // Check the signature + $sig = Auth_OpenID::arrayGet($query, 'openid.sig', null); + if (($sig === null) || + ($signed === null)) { + return new Auth_OpenID_FailureResponse($endpoint, + "Missing argument signature"); + } + + $signed_list = explode(",", $signed); + + //Fail if the identity field is present but not signed + if (($endpoint->identity_url !== null) && + (!in_array('identity', $signed_list))) { + $msg = '"openid.identity" not signed'; + return new Auth_OpenID_FailureResponse($endpoint, $msg); + } + + $v_sig = $assoc->signDict($signed_list, $query); + + if ($v_sig != $sig) { + return new Auth_OpenID_FailureResponse($endpoint, + "Bad signature"); + } + + return Auth_OpenID_SuccessResponse::fromQuery($endpoint, + $query, $signed); + } + + /** + * @access private + */ + function _checkAuth($query, $server_url) + { + $request = $this->_createCheckAuthRequest($query); + if ($request === null) { + return false; + } + + $response = $this->_makeKVPost($request, $server_url); + if ($response == null) { + return false; + } + + return $this->_processCheckAuthResponse($response, $server_url); + } + + /** + * @access private + */ + function _createCheckAuthRequest($query) + { + $signed = Auth_OpenID::arrayGet($query, 'openid.signed', null); + if ($signed === null) { + return null; + } + + $whitelist = array('assoc_handle', 'sig', + 'signed', 'invalidate_handle'); + + $signed = array_merge(explode(",", $signed), $whitelist); + + $check_args = array(); + + foreach ($query as $key => $value) { + if (in_array(substr($key, 7), $signed)) { + $check_args[$key] = $value; + } + } + + $check_args['openid.mode'] = 'check_authentication'; + return $check_args; + } + + /** + * @access private + */ + function _processCheckAuthResponse($response, $server_url) + { + $is_valid = Auth_OpenID::arrayGet($response, 'is_valid', 'false'); + + $invalidate_handle = Auth_OpenID::arrayGet($response, + 'invalidate_handle'); + + if ($invalidate_handle !== null) { + $this->store->removeAssociation($server_url, + $invalidate_handle); + } + + if ($is_valid == 'true') { + return true; + } + + return false; + } + + /** + * @access private + */ + function _makeKVPost($args, $server_url) + { + $mode = $args['openid.mode']; + + $pairs = array(); + foreach ($args as $k => $v) { + $v = urlencode($v); + $pairs[] = "$k=$v"; + } + + $body = implode("&", $pairs); + + $resp = $this->fetcher->post($server_url, $body); + + if ($resp === null) { + return null; + } + + $response = Auth_OpenID_KVForm::toArray($resp->body); + + if ($resp->status == 400) { + return null; + } else if ($resp->status != 200) { + return null; + } + + return $response; + } + + /** + * @access private + */ + function _checkNonce($response, $nonce) + { + $parsed_url = parse_url($response->getReturnTo()); + $query_str = @$parsed_url['query']; + $query = array(); + parse_str($query_str, $query); + + $found = false; + + foreach ($query as $k => $v) { + if ($k == 'nonce') { + if ($v != $nonce) { + return new Auth_OpenID_FailureResponse($response, + "Nonce mismatch"); + } else { + $found = true; + break; + } + } + } + + if (!$found) { + return new Auth_OpenID_FailureResponse($response, + sprintf("Nonce missing from return_to: %s", + $response->getReturnTo())); + } + + if (!$this->store->useNonce($nonce)) { + return new Auth_OpenID_FailureResponse($response, + "Nonce missing from store"); + } + + return $response; + } + + /** + * @access private + */ + function _createNonce() + { + $nonce = Auth_OpenID_CryptUtil::randomString($this->nonce_len, + $this->nonce_chrs); + $this->store->storeNonce($nonce); + return $nonce; + } + + /** + * @access protected + */ + function _createDiffieHellman() + { + return new Auth_OpenID_DiffieHellman(); + } + + /** + * @access private + */ + function _getAssociation($server_url) + { + if (!$this->_use_assocs) { + return null; + } + + $assoc = $this->store->getAssociation($server_url); + + if (($assoc === null) || + ($assoc->getExpiresIn() <= 0)) { + + $parts = $this->_createAssociateRequest($server_url); + + if ($parts === null) { + return null; + } + + list($assoc_session, $args) = $parts; + + $response = $this->_makeKVPost($args, $server_url); + + if ($response === null) { + $assoc = null; + } else { + $assoc = $this->_parseAssociation($response, $assoc_session, + $server_url); + } + } + + return $assoc; + } + + function _createAssociateRequest($server_url) + { + $parts = parse_url($server_url); + + if ($parts === false) { + return null; + } + + if (array_key_exists('scheme', $parts)) { + $proto = $parts['scheme']; + } else { + $proto = 'http'; + } + + if ($proto == 'https') { + $assoc_session = new Auth_OpenID_PlainTextConsumerSession(); + } else { + $assoc_session = new Auth_OpenID_DiffieHellmanConsumerSession(); + } + + $args = array( + 'openid.mode' => 'associate', + 'openid.assoc_type' => 'HMAC-SHA1'); + + if ($assoc_session->session_type !== null) { + $args['openid.session_type'] = $assoc_session->session_type; + } + + $args = array_merge($args, $assoc_session->getRequest()); + return array($assoc_session, $args); + } + + /** + * @access private + */ + function _parseAssociation($results, $assoc_session, $server_url) + { + $required_keys = array('assoc_type', 'assoc_handle', + 'expires_in'); + + foreach ($required_keys as $key) { + if (!array_key_exists($key, $results)) { + return null; + } + } + + $assoc_type = $results['assoc_type']; + $assoc_handle = $results['assoc_handle']; + $expires_in_str = $results['expires_in']; + + if ($assoc_type != 'HMAC-SHA1') { + return null; + } + + $expires_in = intval($expires_in_str); + + if ($expires_in <= 0) { + return null; + } + + $session_type = Auth_OpenID::arrayGet($results, 'session_type'); + if ($session_type != $assoc_session->session_type) { + if ($session_type === null) { + $assoc_session = new Auth_OpenID_PlainTextConsumerSession(); + } else { + return null; + } + } + + $secret = $assoc_session->extractSecret($results); + + if (!$secret) { + return null; + } + + $assoc = Auth_OpenID_Association::fromExpiresIn( + $expires_in, $assoc_handle, $secret, $assoc_type); + $this->store->storeAssociation($server_url, $assoc); + + return $assoc; + } +} + +/** + * This class represents an authentication request from a consumer to + * an OpenID server. + * + * @package OpenID + */ +class Auth_OpenID_AuthRequest { + + /** + * Initialize an authentication request with the specified token, + * association, and endpoint. + * + * Users of this library should not create instances of this + * class. Instances of this class are created by the library when + * needed. + */ + function Auth_OpenID_AuthRequest($assoc, $endpoint) + { + $this->assoc = $assoc; + $this->endpoint = $endpoint; + $this->extra_args = array(); + $this->return_to_args = array(); + } + + /** + * Add an extension argument to this OpenID authentication + * request. + * + * Use caution when adding arguments, because they will be + * URL-escaped and appended to the redirect URL, which can easily + * get quite long. + * + * @param string $namespace The namespace for the extension. For + * example, the simple registration extension uses the namespace + * 'sreg'. + * + * @param string $key The key within the extension namespace. For + * example, the nickname field in the simple registration + * extension's key is 'nickname'. + * + * @param string $value The value to provide to the server for + * this argument. + */ + function addExtensionArg($namespace, $key, $value) + { + $arg_name = implode('.', array('openid', $namespace, $key)); + $this->extra_args[$arg_name] = $value; + } + + /** + * Compute the appropriate redirection URL for this request based + * on a specified trust root and return-to. + * + * @param string $trust_root The trust root URI for your + * application. + * + * @param string$ $return_to The return-to URL to be used when the + * OpenID server redirects the user back to your site. + * + * @return string $redirect_url The resulting redirect URL that + * you should send to the user agent. + */ + function redirectURL($trust_root, $return_to, $immediate=false) + { + if ($immediate) { + $mode = 'checkid_immediate'; + } else { + $mode = 'checkid_setup'; + } + + $return_to = Auth_OpenID::appendArgs($return_to, $this->return_to_args); + + $redir_args = array( + 'openid.mode' => $mode, + 'openid.identity' => $this->endpoint->getServerID(), + 'openid.return_to' => $return_to, + 'openid.trust_root' => $trust_root); + + if ($this->assoc) { + $redir_args['openid.assoc_handle'] = $this->assoc->handle; + } + + $redir_args = array_merge($redir_args, $this->extra_args); + + return Auth_OpenID::appendArgs($this->endpoint->server_url, + $redir_args); + } +} + +/** + * The base class for responses from the Auth_OpenID_Consumer. + * + * @package OpenID + */ +class Auth_OpenID_ConsumerResponse { + var $status = null; +} + +/** + * A response with a status of Auth_OpenID_SUCCESS. Indicates that + * this request is a successful acknowledgement from the OpenID server + * that the supplied URL is, indeed controlled by the requesting + * agent. This has three relevant attributes: + * + * identity_url - The identity URL that has been authenticated + * + * signed_args - The arguments in the server's response that were + * signed and verified. + * + * status - Auth_OpenID_SUCCESS. + * + * @package OpenID + */ +class Auth_OpenID_SuccessResponse extends Auth_OpenID_ConsumerResponse { + var $status = Auth_OpenID_SUCCESS; + + /** + * @access private + */ + function Auth_OpenID_SuccessResponse($endpoint, $signed_args) + { + $this->endpoint = $endpoint; + $this->identity_url = $endpoint->identity_url; + $this->signed_args = $signed_args; + } + + /** + * @access private + */ + function fromQuery($endpoint, $query, $signed) + { + $signed_args = array(); + foreach (explode(",", $signed) as $field_name) { + $field_name = 'openid.' . $field_name; + $signed_args[$field_name] = Auth_OpenID::arrayGet($query, + $field_name, ''); + } + return new Auth_OpenID_SuccessResponse($endpoint, $signed_args); + } + + /** + * Extract signed extension data from the server's response. + * + * @param string $prefix The extension namespace from which to + * extract the extension data. + */ + function extensionResponse($prefix) + { + $response = array(); + $prefix = sprintf('openid.%s.', $prefix); + $prefix_len = strlen($prefix); + foreach ($this->signed_args as $k => $v) { + if (strpos($k, $prefix) === 0) { + $response_key = substr($k, $prefix_len); + $response[$response_key] = $v; + } + } + + return $response; + } + + /** + * Get the openid.return_to argument from this response. + * + * This is useful for verifying that this request was initiated by + * this consumer. + * + * @return string $return_to The return_to URL supplied to the + * server on the initial request, or null if the response did not + * contain an 'openid.return_to' argument. + */ + function getReturnTo() + { + return Auth_OpenID::arrayGet($this->signed_args, 'openid.return_to'); + } +} + +/** + * A response with a status of Auth_OpenID_FAILURE. Indicates that the + * OpenID protocol has failed. This could be locally or remotely + * triggered. This has three relevant attributes: + * + * identity_url - The identity URL for which authentication was + * attempted, if it can be determined. Otherwise, null. + * + * message - A message indicating why the request failed, if one is + * supplied. Otherwise, null. + * + * status - Auth_OpenID_FAILURE. + * + * @package OpenID + */ +class Auth_OpenID_FailureResponse extends Auth_OpenID_ConsumerResponse { + var $status = Auth_OpenID_FAILURE; + + function Auth_OpenID_FailureResponse($endpoint, $message = null) + { + $this->endpoint = $endpoint; + if ($endpoint !== null) { + $this->identity_url = $endpoint->identity_url; + } else { + $this->identity_url = null; + } + $this->message = $message; + } +} + +/** + * A response with a status of Auth_OpenID_CANCEL. Indicates that the + * user cancelled the OpenID authentication request. This has two + * relevant attributes: + * + * identity_url - The identity URL for which authentication was + * attempted, if it can be determined. Otherwise, null. + * + * status - Auth_OpenID_SUCCESS. + * + * @package OpenID + */ +class Auth_OpenID_CancelResponse extends Auth_OpenID_ConsumerResponse { + var $status = Auth_OpenID_CANCEL; + + function Auth_OpenID_CancelResponse($endpoint) + { + $this->endpoint = $endpoint; + $this->identity_url = $endpoint->identity_url; + } +} + +/** + * A response with a status of Auth_OpenID_SETUP_NEEDED. Indicates + * that the request was in immediate mode, and the server is unable to + * authenticate the user without further interaction. + * + * identity_url - The identity URL for which authentication was + * attempted. + * + * setup_url - A URL that can be used to send the user to the server + * to set up for authentication. The user should be redirected in to + * the setup_url, either in the current window or in a new browser + * window. + * + * status - Auth_OpenID_SETUP_NEEDED. + * + * @package OpenID + */ +class Auth_OpenID_SetupNeededResponse extends Auth_OpenID_ConsumerResponse { + var $status = Auth_OpenID_SETUP_NEEDED; + + function Auth_OpenID_SetupNeededResponse($endpoint, + $setup_url = null) + { + $this->endpoint = $endpoint; + $this->identity_url = $endpoint->identity_url; + $this->setup_url = $setup_url; + } +} + +?> diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/CryptUtil.php b/modules/member/php-openid-1.2.3/Auth/OpenID/CryptUtil.php new file mode 100644 index 000000000..8d7e06983 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/CryptUtil.php @@ -0,0 +1,109 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +if (!defined('Auth_OpenID_RAND_SOURCE')) { + /** + * The filename for a source of random bytes. Define this yourself + * if you have a different source of randomness. + */ + define('Auth_OpenID_RAND_SOURCE', '/dev/urandom'); +} + +class Auth_OpenID_CryptUtil { + /** + * Get the specified number of random bytes. + * + * Attempts to use a cryptographically secure (not predictable) + * source of randomness if available. If there is no high-entropy + * randomness source available, it will fail. As a last resort, + * for non-critical systems, define + * Auth_OpenID_RAND_SOURCE as null, and + * the code will fall back on a pseudo-random number generator. + * + * @param int $num_bytes The length of the return value + * @return string $bytes random bytes + */ + function getBytes($num_bytes) + { + static $f = null; + $bytes = ''; + if ($f === null) { + if (Auth_OpenID_RAND_SOURCE === null) { + $f = false; + } else { + $f = @fopen(Auth_OpenID_RAND_SOURCE, "r"); + if ($f === false) { + $msg = 'Define Auth_OpenID_RAND_SOURCE as null to ' . + ' continue with an insecure random number generator.'; + trigger_error($msg, E_USER_ERROR); + } + } + } + if ($f === false) { + // pseudorandom used + $bytes = ''; + for ($i = 0; $i < $num_bytes; $i += 4) { + $bytes .= pack('L', mt_rand()); + } + $bytes = substr($bytes, 0, $num_bytes); + } else { + $bytes = fread($f, $num_bytes); + } + return $bytes; + } + + /** + * Produce a string of length random bytes, chosen from chrs. If + * $chrs is null, the resulting string may contain any characters. + * + * @param integer $length The length of the resulting + * randomly-generated string + * @param string $chrs A string of characters from which to choose + * to build the new string + * @return string $result A string of randomly-chosen characters + * from $chrs + */ + function randomString($length, $population = null) + { + if ($population === null) { + return Auth_OpenID_CryptUtil::getBytes($length); + } + + $popsize = strlen($population); + + if ($popsize > 256) { + $msg = 'More than 256 characters supplied to ' . __FUNCTION__; + trigger_error($msg, E_USER_ERROR); + } + + $duplicate = 256 % $popsize; + + $str = ""; + for ($i = 0; $i < $length; $i++) { + do { + $n = ord(Auth_OpenID_CryptUtil::getBytes(1)); + } while ($n < $duplicate); + + $n %= $popsize; + $str .= $population[$n]; + } + + return $str; + } +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/DatabaseConnection.php b/modules/member/php-openid-1.2.3/Auth/OpenID/DatabaseConnection.php new file mode 100644 index 000000000..3f4515fa5 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/DatabaseConnection.php @@ -0,0 +1,131 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +/** + * An empty base class intended to emulate PEAR connection + * functionality in applications that supply their own database + * abstraction mechanisms. See {@link Auth_OpenID_SQLStore} for more + * information. You should subclass this class if you need to create + * an SQL store that needs to access its database using an + * application's database abstraction layer instead of a PEAR database + * connection. Any subclass of Auth_OpenID_DatabaseConnection MUST + * adhere to the interface specified here. + * + * @package OpenID + */ +class Auth_OpenID_DatabaseConnection { + /** + * Sets auto-commit mode on this database connection. + * + * @param bool $mode True if auto-commit is to be used; false if + * not. + */ + function autoCommit($mode) + { + } + + /** + * Run an SQL query with the specified parameters, if any. + * + * @param string $sql An SQL string with placeholders. The + * placeholders are assumed to be specific to the database engine + * for this connection. + * + * @param array $params An array of parameters to insert into the + * SQL string using this connection's escaping mechanism. + * + * @return mixed $result The result of calling this connection's + * internal query function. The type of result depends on the + * underlying database engine. This method is usually used when + * the result of a query is not important, like a DDL query. + */ + function query($sql, $params = array()) + { + } + + /** + * Starts a transaction on this connection, if supported. + */ + function begin() + { + } + + /** + * Commits a transaction on this connection, if supported. + */ + function commit() + { + } + + /** + * Performs a rollback on this connection, if supported. + */ + function rollback() + { + } + + /** + * Run an SQL query and return the first column of the first row + * of the result set, if any. + * + * @param string $sql An SQL string with placeholders. The + * placeholders are assumed to be specific to the database engine + * for this connection. + * + * @param array $params An array of parameters to insert into the + * SQL string using this connection's escaping mechanism. + * + * @return mixed $result The value of the first column of the + * first row of the result set. False if no such result was + * found. + */ + function getOne($sql, $params = array()) + { + } + + /** + * Run an SQL query and return the first row of the result set, if + * any. + * + * @param string $sql An SQL string with placeholders. The + * placeholders are assumed to be specific to the database engine + * for this connection. + * + * @param array $params An array of parameters to insert into the + * SQL string using this connection's escaping mechanism. + * + * @return array $result The first row of the result set, if any, + * keyed on column name. False if no such result was found. + */ + function getRow($sql, $params = array()) + { + } + + /** + * Run an SQL query with the specified parameters, if any. + * + * @param string $sql An SQL string with placeholders. The + * placeholders are assumed to be specific to the database engine + * for this connection. + * + * @param array $params An array of parameters to insert into the + * SQL string using this connection's escaping mechanism. + * + * @return array $result An array of arrays representing the + * result of the query; each array is keyed on column name. + */ + function getAll($sql, $params = array()) + { + } +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/DiffieHellman.php b/modules/member/php-openid-1.2.3/Auth/OpenID/DiffieHellman.php new file mode 100644 index 000000000..2b845b78b --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/DiffieHellman.php @@ -0,0 +1,181 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +require_once 'Auth/OpenID/BigMath.php'; +require_once 'Auth/OpenID/HMACSHA1.php'; + +function Auth_OpenID_getDefaultMod() +{ + return '155172898181473697471232257763715539915724801'. + '966915404479707795314057629378541917580651227423'. + '698188993727816152646631438561595825688188889951'. + '272158842675419950341258706556549803580104870537'. + '681476726513255747040765857479291291572334510643'. + '245094715007229621094194349783925984760375594985'. + '848253359305585439638443'; +} + +function Auth_OpenID_getDefaultGen() +{ + return '2'; +} + +/** + * The Diffie-Hellman key exchange class. This class relies on + * {@link Auth_OpenID_MathLibrary} to perform large number operations. + * + * @access private + * @package OpenID + */ +class Auth_OpenID_DiffieHellman { + + var $mod; + var $gen; + var $private; + var $lib = null; + + function Auth_OpenID_DiffieHellman($mod = null, $gen = null, + $private = null, $lib = null) + { + if ($lib === null) { + $this->lib =& Auth_OpenID_getMathLib(); + } else { + $this->lib =& $lib; + } + + if ($mod === null) { + $this->mod = $this->lib->init(Auth_OpenID_getDefaultMod()); + } else { + $this->mod = $mod; + } + + if ($gen === null) { + $this->gen = $this->lib->init(Auth_OpenID_getDefaultGen()); + } else { + $this->gen = $gen; + } + + if ($private === null) { + $r = $this->lib->rand($this->mod); + $this->private = $this->lib->add($r, 1); + } else { + $this->private = $private; + } + + $this->public = $this->lib->powmod($this->gen, $this->private, + $this->mod); + } + + function getSharedSecret($composite) + { + return $this->lib->powmod($composite, $this->private, $this->mod); + } + + function getPublicKey() + { + return $this->public; + } + + /** + * Generate the arguments for an OpenID Diffie-Hellman association + * request + */ + function getAssocArgs() + { + $cpub = $this->lib->longToBase64($this->getPublicKey()); + $args = array( + 'openid.dh_consumer_public' => $cpub, + 'openid.session_type' => 'DH-SHA1' + ); + + if ($this->lib->cmp($this->mod, Auth_OpenID_getDefaultMod()) || + $this->lib->cmp($this->gen, Auth_OpenID_getDefaultGen())) { + $args['openid.dh_modulus'] = $this->lib->longToBase64($this->mod); + $args['openid.dh_gen'] = $this->lib->longToBase64($this->gen); + } + + return $args; + } + + function usingDefaultValues() + { + return ($this->mod == Auth_OpenID_getDefaultMod() && + $this->gen == Auth_OpenID_getDefaultGen()); + } + + /** + * Perform the server side of the OpenID Diffie-Hellman association + */ + function serverAssociate($consumer_args, $assoc_secret) + { + $lib =& Auth_OpenID_getMathLib(); + + if (isset($consumer_args['openid.dh_modulus'])) { + $mod = $lib->base64ToLong($consumer_args['openid.dh_modulus']); + } else { + $mod = null; + } + + if (isset($consumer_args['openid.dh_gen'])) { + $gen = $lib->base64ToLong($consumer_args['openid.dh_gen']); + } else { + $gen = null; + } + + $cpub64 = @$consumer_args['openid.dh_consumer_public']; + if (!isset($cpub64)) { + return false; + } + + $dh = new Auth_OpenID_DiffieHellman($mod, $gen); + $cpub = $lib->base64ToLong($cpub64); + $mac_key = $dh->xorSecret($cpub, $assoc_secret); + $enc_mac_key = base64_encode($mac_key); + $spub64 = $lib->longToBase64($dh->getPublicKey()); + + $server_args = array( + 'session_type' => 'DH-SHA1', + 'dh_server_public' => $spub64, + 'enc_mac_key' => $enc_mac_key + ); + + return $server_args; + } + + function consumerFinish($reply) + { + $spub = $this->lib->base64ToLong($reply['dh_server_public']); + if ($this->lib->cmp($spub, 0) <= 0) { + return false; + } + $enc_mac_key = base64_decode($reply['enc_mac_key']); + return $this->xorSecret($spub, $enc_mac_key); + } + + function xorSecret($composite, $secret) + { + $dh_shared = $this->getSharedSecret($composite); + $dh_shared_str = $this->lib->longToBinary($dh_shared); + $sha1_dh_shared = Auth_OpenID_SHA1($dh_shared_str); + + $xsecret = ""; + for ($i = 0; $i < strlen($secret); $i++) { + $xsecret .= chr(ord($secret[$i]) ^ ord($sha1_dh_shared[$i])); + } + + return $xsecret; + } +} diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/Discover.php b/modules/member/php-openid-1.2.3/Auth/OpenID/Discover.php new file mode 100644 index 000000000..d87d47d16 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/Discover.php @@ -0,0 +1,258 @@ +identity_url = null; + $this->server_url = null; + $this->type_uris = array(); + $this->delegate = null; + $this->canonicalID = null; + $this->used_yadis = false; // whether this came from an XRDS + } + + function usesExtension($extension_uri) + { + return in_array($extension_uri, $this->type_uris); + } + + function parseService($yadis_url, $uri, $type_uris, $service_element) + { + // Set the state of this object based on the contents of the + // service element. + $this->type_uris = $type_uris; + $this->identity_url = $yadis_url; + $this->server_url = $uri; + $this->delegate = Auth_OpenID_ServiceEndpoint::findDelegate( + $service_element); + $this->used_yadis = true; + } + + function findDelegate($service) + { + // Extract a openid:Delegate value from a Yadis Service + // element. If no delegate is found, returns null. + + // Try to register new namespace. + $service->parser->registerNamespace('openid', + 'http://openid.net/xmlns/1.0'); + + // XXX: should this die if there is more than one delegate + // element? + $delegates = $service->getElements("openid:Delegate"); + + if ($delegates) { + return $service->parser->content($delegates[0]); + } else { + return null; + } + } + + function getServerID() + { + // Return the identifier that should be sent as the + // openid.identity_url parameter to the server. + if ($this->delegate === null) { + if ($this->canonicalID) { + return $this->canonicalID; + } else { + return $this->identity_url; + } + } else { + return $this->delegate; + } + } + + function fromHTML($uri, $html) + { + // Parse the given document as HTML looking for an OpenID + $urls = Auth_OpenID_legacy_discover($html); + if ($urls === false) { + return null; + } + + list($delegate_url, $server_url) = $urls; + + $service = new Auth_OpenID_ServiceEndpoint(); + $service->identity_url = $uri; + $service->delegate = $delegate_url; + $service->server_url = $server_url; + $service->type_uris = array(_OPENID_1_0_TYPE); + return $service; + } +} + +function filter_MatchesAnyOpenIDType(&$service) +{ + $uris = $service->getTypes(); + + foreach ($uris as $uri) { + if (in_array($uri, + array(_OPENID_1_0_TYPE, + _OPENID_1_1_TYPE, + _OPENID_1_2_TYPE))) { + return true; + } + } + + return false; +} + +function Auth_OpenID_makeOpenIDEndpoints($uri, $endpoints) +{ + $s = array(); + + if (!$endpoints) { + return $s; + } + + foreach ($endpoints as $service) { + $type_uris = $service->getTypes(); + $uris = $service->getURIs(); + + // If any Type URIs match and there is an endpoint URI + // specified, then this is an OpenID endpoint + if ($type_uris && + $uris) { + + foreach ($uris as $service_uri) { + $openid_endpoint = new Auth_OpenID_ServiceEndpoint(); + $openid_endpoint->parseService($uri, + $service_uri, + $type_uris, + $service); + + $s[] = $openid_endpoint; + } + } + } + + return $s; +} + +function Auth_OpenID_discoverWithYadis($uri, &$fetcher) +{ + // Discover OpenID services for a URI. Tries Yadis and falls back + // on old-style discovery if Yadis fails. + + // Might raise a yadis.discover.DiscoveryFailure if no document + // came back for that URI at all. I don't think falling back to + // OpenID 1.0 discovery on the same URL will help, so don't bother + // to catch it. + $openid_services = array(); + + $http_response = null; + $response = Services_Yadis_Yadis::discover($uri, $http_response, + $fetcher); + + if ($response) { + $identity_url = $response->uri; + $openid_services = + $response->xrds->services(array('filter_MatchesAnyOpenIDType')); + } + + if (!$openid_services) { + return @Auth_OpenID_discoverWithoutYadis($uri, + $fetcher); + } + + if (!$openid_services) { + $body = $response->body; + + // Try to parse the response as HTML to get OpenID 1.0/1.1 + // + $service = Auth_OpenID_ServiceEndpoint::fromHTML($identity_url, + $body); + + if ($service !== null) { + $openid_services = array($service); + } + } else { + $openid_services = Auth_OpenID_makeOpenIDEndpoints($response->uri, + $openid_services); + } + + return array($identity_url, $openid_services, $http_response); +} + +function _Auth_OpenID_discoverServiceList($uri, &$fetcher) +{ + list($url, $services, $resp) = Auth_OpenID_discoverWithYadis($uri, + $fetcher); + + return $services; +} + +function _Auth_OpenID_discoverXRIServiceList($uri, &$fetcher) +{ + list($url, $services, $resp) = _Auth_OpenID_discoverXRI($uri, + $fetcher); + return $services; +} + +function Auth_OpenID_discoverWithoutYadis($uri, &$fetcher) +{ + $http_resp = @$fetcher->get($uri); + + if ($http_resp->status != 200) { + return array(null, array(), $http_resp); + } + + $identity_url = $http_resp->final_url; + + // Try to parse the response as HTML to get OpenID 1.0/1.1 + $endpoint =& new Auth_OpenID_ServiceEndpoint(); + $service = $endpoint->fromHTML($identity_url, $http_resp->body); + if ($service === null) { + $openid_services = array(); + } else { + $openid_services = array($service); + } + + return array($identity_url, $openid_services, $http_resp); +} + +function _Auth_OpenID_discoverXRI($iname, &$fetcher) +{ + $services = new Services_Yadis_ProxyResolver($fetcher); + list($canonicalID, $service_list) = $services->query($iname, + array(_OPENID_1_0_TYPE, + _OPENID_1_1_TYPE, + _OPENID_1_2_TYPE), + array('filter_MatchesAnyOpenIDType')); + + $endpoints = Auth_OpenID_makeOpenIDEndpoints($iname, $service_list); + + for ($i = 0; $i < count($endpoints); $i++) { + $endpoints[$i]->canonicalID = $canonicalID; + } + + // FIXME: returned xri should probably be in some normal form + return array($iname, $endpoints, null); +} + +function Auth_OpenID_discover($uri, &$fetcher) +{ + return @Auth_OpenID_discoverWithYadis($uri, $fetcher); +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/DumbStore.php b/modules/member/php-openid-1.2.3/Auth/OpenID/DumbStore.php new file mode 100644 index 000000000..d4d8a8b42 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/DumbStore.php @@ -0,0 +1,116 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +/** + * Import the interface for creating a new store class. + */ +require_once 'Auth/OpenID/Interface.php'; +require_once 'Auth/OpenID/HMACSHA1.php'; + +/** + * This is a store for use in the worst case, when you have no way of + * saving state on the consumer site. Using this store makes the + * consumer vulnerable to replay attacks, as it's unable to use + * nonces. Avoid using this store if it is at all possible. + * + * Most of the methods of this class are implementation details. + * Users of this class need to worry only about the constructor. + * + * @package OpenID + */ +class Auth_OpenID_DumbStore extends Auth_OpenID_OpenIDStore { + + /** + * Creates a new {@link Auth_OpenID_DumbStore} instance. For the security + * of the tokens generated by the library, this class attempts to + * at least have a secure implementation of getAuthKey. + * + * When you create an instance of this class, pass in a secret + * phrase. The phrase is hashed with sha1 to make it the correct + * length and form for an auth key. That allows you to use a long + * string as the secret phrase, which means you can make it very + * difficult to guess. + * + * Each {@link Auth_OpenID_DumbStore} instance that is created for use by + * your consumer site needs to use the same $secret_phrase. + * + * @param string secret_phrase The phrase used to create the auth + * key returned by getAuthKey + */ + function Auth_OpenID_DumbStore($secret_phrase) + { + $this->auth_key = Auth_OpenID_SHA1($secret_phrase); + } + + /** + * This implementation does nothing. + */ + function storeAssociation($server_url, $association) + { + } + + /** + * This implementation always returns null. + */ + function getAssociation($server_url, $handle = null) + { + return null; + } + + /** + * This implementation always returns false. + */ + function removeAssociation($server_url, $handle) + { + return false; + } + + /** + * This implementation does nothing. + */ + function storeNonce($nonce) + { + } + + /** + * In a system truly limited to dumb mode, nonces must all be + * accepted. This therefore always returns true, which makes + * replay attacks feasible. + */ + function useNonce($nonce) + { + return true; + } + + /** + * This method returns the auth key generated by the constructor. + */ + function getAuthKey() + { + return $this->auth_key; + } + + /** + * This store is a dumb mode store, so this method is overridden + * to return true. + */ + function isDumb() + { + return true; + } +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/FileStore.php b/modules/member/php-openid-1.2.3/Auth/OpenID/FileStore.php new file mode 100644 index 000000000..6ce88568e --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/FileStore.php @@ -0,0 +1,674 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + * + */ + +/** + * Require base class for creating a new interface. + */ +require_once 'Auth/OpenID.php'; +require_once 'Auth/OpenID/Interface.php'; +require_once 'Auth/OpenID/HMACSHA1.php'; + +/** + * This is a filesystem-based store for OpenID associations and + * nonces. This store should be safe for use in concurrent systems on + * both windows and unix (excluding NFS filesystems). There are a + * couple race conditions in the system, but those failure cases have + * been set up in such a way that the worst-case behavior is someone + * having to try to log in a second time. + * + * Most of the methods of this class are implementation details. + * People wishing to just use this store need only pay attention to + * the constructor. + * + * @package OpenID + */ +class Auth_OpenID_FileStore extends Auth_OpenID_OpenIDStore { + + /** + * Initializes a new {@link Auth_OpenID_FileStore}. This + * initializes the nonce and association directories, which are + * subdirectories of the directory passed in. + * + * @param string $directory This is the directory to put the store + * directories in. + */ + function Auth_OpenID_FileStore($directory) + { + if (!Auth_OpenID::ensureDir($directory)) { + trigger_error('Not a directory and failed to create: ' + . $directory, E_USER_ERROR); + } + $directory = realpath($directory); + + $this->directory = $directory; + $this->active = true; + + $this->nonce_dir = $directory . DIRECTORY_SEPARATOR . 'nonces'; + + $this->association_dir = $directory . DIRECTORY_SEPARATOR . + 'associations'; + + // Temp dir must be on the same filesystem as the assciations + // $directory and the $directory containing the auth key file. + $this->temp_dir = $directory . DIRECTORY_SEPARATOR . 'temp'; + + $this->auth_key_name = $directory . DIRECTORY_SEPARATOR . 'auth_key'; + + $this->max_nonce_age = 6 * 60 * 60; // Six hours, in seconds + + if (!$this->_setup()) { + trigger_error('Failed to initialize OpenID file store in ' . + $directory, E_USER_ERROR); + } + } + + function destroy() + { + Auth_OpenID_FileStore::_rmtree($this->directory); + $this->active = false; + } + + /** + * Make sure that the directories in which we store our data + * exist. + * + * @access private + */ + function _setup() + { + return (Auth_OpenID::ensureDir(dirname($this->auth_key_name)) && + Auth_OpenID::ensureDir($this->nonce_dir) && + Auth_OpenID::ensureDir($this->association_dir) && + Auth_OpenID::ensureDir($this->temp_dir)); + } + + /** + * Create a temporary file on the same filesystem as + * $this->auth_key_name and $this->association_dir. + * + * The temporary directory should not be cleaned if there are any + * processes using the store. If there is no active process using + * the store, it is safe to remove all of the files in the + * temporary directory. + * + * @return array ($fd, $filename) + * @access private + */ + function _mktemp() + { + $name = Auth_OpenID_FileStore::_mkstemp($dir = $this->temp_dir); + $file_obj = @fopen($name, 'wb'); + if ($file_obj !== false) { + return array($file_obj, $name); + } else { + Auth_OpenID_FileStore::_removeIfPresent($name); + } + } + + /** + * Read the auth key from the auth key file. Will return None if + * there is currently no key. + * + * @return mixed + */ + function readAuthKey() + { + if (!$this->active) { + trigger_error("FileStore no longer active", E_USER_ERROR); + return null; + } + + $auth_key_file = @fopen($this->auth_key_name, 'rb'); + if ($auth_key_file === false) { + return null; + } + + $key = fread($auth_key_file, filesize($this->auth_key_name)); + fclose($auth_key_file); + + return $key; + } + + /** + * Generate a new random auth key and safely store it in the + * location specified by $this->auth_key_name. + * + * @return string $key + */ + function createAuthKey() + { + if (!$this->active) { + trigger_error("FileStore no longer active", E_USER_ERROR); + return null; + } + + $auth_key = Auth_OpenID_CryptUtil::randomString($this->AUTH_KEY_LEN); + + list($file_obj, $tmp) = $this->_mktemp(); + + fwrite($file_obj, $auth_key); + fflush($file_obj); + fclose($file_obj); + + if (function_exists('link')) { + // Posix filesystem + $saved = link($tmp, $this->auth_key_name); + Auth_OpenID_FileStore::_removeIfPresent($tmp); + } else { + // Windows filesystem + $saved = rename($tmp, $this->auth_key_name); + } + + if (!$saved) { + // The link failed, either because we lack the permission, + // or because the file already exists; try to read the key + // in case the file already existed. + $auth_key = $this->readAuthKey(); + } + + return $auth_key; + } + + /** + * Retrieve the auth key from the file specified by + * $this->auth_key_name, creating it if it does not exist. + * + * @return string $key + */ + function getAuthKey() + { + if (!$this->active) { + trigger_error("FileStore no longer active", E_USER_ERROR); + return null; + } + + $auth_key = $this->readAuthKey(); + if ($auth_key === null) { + $auth_key = $this->createAuthKey(); + + if (strlen($auth_key) != $this->AUTH_KEY_LEN) { + $fmt = 'Got an invalid auth key from %s. Expected '. + '%d-byte string. Got: %s'; + $msg = sprintf($fmt, $this->auth_key_name, $this->AUTH_KEY_LEN, + $auth_key); + trigger_error($msg, E_USER_WARNING); + return null; + } + } + return $auth_key; + } + + /** + * Create a unique filename for a given server url and + * handle. This implementation does not assume anything about the + * format of the handle. The filename that is returned will + * contain the domain name from the server URL for ease of human + * inspection of the data directory. + * + * @return string $filename + */ + function getAssociationFilename($server_url, $handle) + { + if (!$this->active) { + trigger_error("FileStore no longer active", E_USER_ERROR); + return null; + } + + if (strpos($server_url, '://') === false) { + trigger_error(sprintf("Bad server URL: %s", $server_url), + E_USER_WARNING); + return null; + } + + list($proto, $rest) = explode('://', $server_url, 2); + $parts = explode('/', $rest); + $domain = Auth_OpenID_FileStore::_filenameEscape($parts[0]); + $url_hash = Auth_OpenID_FileStore::_safe64($server_url); + if ($handle) { + $handle_hash = Auth_OpenID_FileStore::_safe64($handle); + } else { + $handle_hash = ''; + } + + $filename = sprintf('%s-%s-%s-%s', $proto, $domain, $url_hash, + $handle_hash); + + return $this->association_dir. DIRECTORY_SEPARATOR . $filename; + } + + /** + * Store an association in the association directory. + */ + function storeAssociation($server_url, $association) + { + if (!$this->active) { + trigger_error("FileStore no longer active", E_USER_ERROR); + return false; + } + + $association_s = $association->serialize(); + $filename = $this->getAssociationFilename($server_url, + $association->handle); + list($tmp_file, $tmp) = $this->_mktemp(); + + if (!$tmp_file) { + trigger_error("_mktemp didn't return a valid file descriptor", + E_USER_WARNING); + return false; + } + + fwrite($tmp_file, $association_s); + + fflush($tmp_file); + + fclose($tmp_file); + + if (@rename($tmp, $filename)) { + return true; + } else { + // In case we are running on Windows, try unlinking the + // file in case it exists. + @unlink($filename); + + // Now the target should not exist. Try renaming again, + // giving up if it fails. + if (@rename($tmp, $filename)) { + return true; + } + } + + // If there was an error, don't leave the temporary file + // around. + Auth_OpenID_FileStore::_removeIfPresent($tmp); + return false; + } + + /** + * Retrieve an association. If no handle is specified, return the + * association with the most recent issue time. + * + * @return mixed $association + */ + function getAssociation($server_url, $handle = null) + { + if (!$this->active) { + trigger_error("FileStore no longer active", E_USER_ERROR); + return null; + } + + if ($handle === null) { + $handle = ''; + } + + // The filename with the empty handle is a prefix of all other + // associations for the given server URL. + $filename = $this->getAssociationFilename($server_url, $handle); + + if ($handle) { + return $this->_getAssociation($filename); + } else { + $association_files = + Auth_OpenID_FileStore::_listdir($this->association_dir); + $matching_files = array(); + + // strip off the path to do the comparison + $name = basename($filename); + foreach ($association_files as $association_file) { + if (strpos($association_file, $name) === 0) { + $matching_files[] = $association_file; + } + } + + $matching_associations = array(); + // read the matching files and sort by time issued + foreach ($matching_files as $name) { + $full_name = $this->association_dir . DIRECTORY_SEPARATOR . + $name; + $association = $this->_getAssociation($full_name); + if ($association !== null) { + $matching_associations[] = array($association->issued, + $association); + } + } + + $issued = array(); + $assocs = array(); + foreach ($matching_associations as $key => $assoc) { + $issued[$key] = $assoc[0]; + $assocs[$key] = $assoc[1]; + } + + array_multisort($issued, SORT_DESC, $assocs, SORT_DESC, + $matching_associations); + + // return the most recently issued one. + if ($matching_associations) { + list($issued, $assoc) = $matching_associations[0]; + return $assoc; + } else { + return null; + } + } + } + + /** + * @access private + */ + function _getAssociation($filename) + { + if (!$this->active) { + trigger_error("FileStore no longer active", E_USER_ERROR); + return null; + } + + $assoc_file = @fopen($filename, 'rb'); + + if ($assoc_file === false) { + return null; + } + + $assoc_s = fread($assoc_file, filesize($filename)); + fclose($assoc_file); + + if (!$assoc_s) { + return null; + } + + $association = + Auth_OpenID_Association::deserialize('Auth_OpenID_Association', + $assoc_s); + + if (!$association) { + Auth_OpenID_FileStore::_removeIfPresent($filename); + return null; + } + + if ($association->getExpiresIn() == 0) { + Auth_OpenID_FileStore::_removeIfPresent($filename); + return null; + } else { + return $association; + } + } + + /** + * Remove an association if it exists. Do nothing if it does not. + * + * @return bool $success + */ + function removeAssociation($server_url, $handle) + { + if (!$this->active) { + trigger_error("FileStore no longer active", E_USER_ERROR); + return null; + } + + $assoc = $this->getAssociation($server_url, $handle); + if ($assoc === null) { + return false; + } else { + $filename = $this->getAssociationFilename($server_url, $handle); + return Auth_OpenID_FileStore::_removeIfPresent($filename); + } + } + + /** + * Mark this nonce as present. + */ + function storeNonce($nonce) + { + if (!$this->active) { + trigger_error("FileStore no longer active", E_USER_ERROR); + return null; + } + + $filename = $this->nonce_dir . DIRECTORY_SEPARATOR . $nonce; + $nonce_file = fopen($filename, 'w'); + if ($nonce_file === false) { + return false; + } + fclose($nonce_file); + return true; + } + + /** + * Return whether this nonce is present. As a side effect, mark it + * as no longer present. + * + * @return bool $present + */ + function useNonce($nonce) + { + if (!$this->active) { + trigger_error("FileStore no longer active", E_USER_ERROR); + return null; + } + + $filename = $this->nonce_dir . DIRECTORY_SEPARATOR . $nonce; + $st = @stat($filename); + + if ($st === false) { + return false; + } + + // Either it is too old or we are using it. Either way, we + // must remove the file. + if (!unlink($filename)) { + return false; + } + + $now = time(); + $nonce_age = $now - $st[9]; + + // We can us it if the age of the file is less than the + // expiration time. + return $nonce_age <= $this->max_nonce_age; + } + + /** + * Remove expired entries from the database. This is potentially + * expensive, so only run when it is acceptable to take time. + */ + function clean() + { + if (!$this->active) { + trigger_error("FileStore no longer active", E_USER_ERROR); + return null; + } + + $nonces = Auth_OpenID_FileStore::_listdir($this->nonce_dir); + $now = time(); + + // Check all nonces for expiry + foreach ($nonces as $nonce) { + $filename = $this->nonce_dir . DIRECTORY_SEPARATOR . $nonce; + $st = @stat($filename); + + if ($st !== false) { + // Remove the nonce if it has expired + $nonce_age = $now - $st[9]; + if ($nonce_age > $this->max_nonce_age) { + Auth_OpenID_FileStore::_removeIfPresent($filename); + } + } + } + + $association_filenames = + Auth_OpenID_FileStore::_listdir($this->association_dir); + + foreach ($association_filenames as $association_filename) { + $association_file = fopen($association_filename, 'rb'); + + if ($association_file !== false) { + $assoc_s = fread($association_file, + filesize($association_filename)); + fclose($association_file); + + // Remove expired or corrupted associations + $association = + Auth_OpenID_Association::deserialize( + 'Auth_OpenID_Association', $assoc_s); + + if ($association === null) { + Auth_OpenID_FileStore::_removeIfPresent( + $association_filename); + } else { + if ($association->getExpiresIn() == 0) { + Auth_OpenID_FileStore::_removeIfPresent( + $association_filename); + } + } + } + } + } + + /** + * @access private + */ + function _rmtree($dir) + { + if ($dir[strlen($dir) - 1] != DIRECTORY_SEPARATOR) { + $dir .= DIRECTORY_SEPARATOR; + } + + if ($handle = opendir($dir)) { + while ($item = readdir($handle)) { + if (!in_array($item, array('.', '..'))) { + if (is_dir($dir . $item)) { + + if (!Auth_OpenID_FileStore::_rmtree($dir . $item)) { + return false; + } + } else if (is_file($dir . $item)) { + if (!unlink($dir . $item)) { + return false; + } + } + } + } + + closedir($handle); + + if (!@rmdir($dir)) { + return false; + } + + return true; + } else { + // Couldn't open directory. + return false; + } + } + + /** + * @access private + */ + function _mkstemp($dir) + { + foreach (range(0, 4) as $i) { + $name = tempnam($dir, "php_openid_filestore_"); + + if ($name !== false) { + return $name; + } + } + return false; + } + + /** + * @access private + */ + function _mkdtemp($dir) + { + foreach (range(0, 4) as $i) { + $name = $dir . strval(DIRECTORY_SEPARATOR) . strval(getmypid()) . + "-" . strval(rand(1, time())); + if (!mkdir($name, 0700)) { + return false; + } else { + return $name; + } + } + return false; + } + + /** + * @access private + */ + function _listdir($dir) + { + $handle = opendir($dir); + $files = array(); + while (false !== ($filename = readdir($handle))) { + $files[] = $filename; + } + return $files; + } + + /** + * @access private + */ + function _isFilenameSafe($char) + { + $_Auth_OpenID_filename_allowed = Auth_OpenID_letters . + Auth_OpenID_digits . "."; + return (strpos($_Auth_OpenID_filename_allowed, $char) !== false); + } + + /** + * @access private + */ + function _safe64($str) + { + $h64 = base64_encode(Auth_OpenID_SHA1($str)); + $h64 = str_replace('+', '_', $h64); + $h64 = str_replace('/', '.', $h64); + $h64 = str_replace('=', '', $h64); + return $h64; + } + + /** + * @access private + */ + function _filenameEscape($str) + { + $filename = ""; + for ($i = 0; $i < strlen($str); $i++) { + $c = $str[$i]; + if (Auth_OpenID_FileStore::_isFilenameSafe($c)) { + $filename .= $c; + } else { + $filename .= sprintf("_%02X", ord($c)); + } + } + return $filename; + } + + /** + * Attempt to remove a file, returning whether the file existed at + * the time of the call. + * + * @access private + * @return bool $result True if the file was present, false if not. + */ + function _removeIfPresent($filename) + { + return @unlink($filename); + } +} + +?> diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/HMACSHA1.php b/modules/member/php-openid-1.2.3/Auth/OpenID/HMACSHA1.php new file mode 100644 index 000000000..6daadb5f8 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/HMACSHA1.php @@ -0,0 +1,72 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +/** + * SHA1_BLOCKSIZE is this module's SHA1 blocksize used by the fallback + * implementation. + */ +define('Auth_OpenID_SHA1_BLOCKSIZE', 64); + +if (!function_exists('sha1')) { + /** + * Return a raw SHA1 hash of the given string + * + * XXX: include the SHA1 code from Dan Libby's OpenID library + */ + function Auth_OpenID_SHA1($text) + { + trigger_error('No SHA1 function found', E_USER_ERROR); + } +} else { + /** + * @ignore + */ + function Auth_OpenID_SHA1($text) + { + $hex = sha1($text); + $raw = ''; + for ($i = 0; $i < 40; $i += 2) { + $hexcode = substr($hex, $i, 2); + $charcode = (int)base_convert($hexcode, 16, 10); + $raw .= chr($charcode); + } + return $raw; + } +} + +/** + * Compute an HMAC/SHA1 hash. + * + * @access private + * @param string $key The HMAC key + * @param string $text The message text to hash + * @return string $mac The MAC + */ +function Auth_OpenID_HMACSHA1($key, $text) +{ + if (strlen($key) > Auth_OpenID_SHA1_BLOCKSIZE) { + $key = Auth_OpenID_SHA1($key, true); + } + + $key = str_pad($key, Auth_OpenID_SHA1_BLOCKSIZE, chr(0x00)); + $ipad = str_repeat(chr(0x36), Auth_OpenID_SHA1_BLOCKSIZE); + $opad = str_repeat(chr(0x5c), Auth_OpenID_SHA1_BLOCKSIZE); + $hash1 = Auth_OpenID_SHA1(($key ^ $ipad) . $text, true); + $hmac = Auth_OpenID_SHA1(($key ^ $opad) . $hash1, true); + return $hmac; +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/Interface.php b/modules/member/php-openid-1.2.3/Auth/OpenID/Interface.php new file mode 100644 index 000000000..ce9fa1feb --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/Interface.php @@ -0,0 +1,188 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +/** + * This is the interface for the store objects the OpenID library + * uses. It is a single class that provides all of the persistence + * mechanisms that the OpenID library needs, for both servers and + * consumers. If you want to create an SQL-driven store, please see + * then {@link Auth_OpenID_SQLStore} class. + * + * @package OpenID + * @author JanRain, Inc. + */ +class Auth_OpenID_OpenIDStore { + /** + * @var integer The length of the auth key that should be returned + * by the getAuthKey method. + */ + var $AUTH_KEY_LEN = 20; + + /** + * This method puts an Association object into storage, + * retrievable by server URL and handle. + * + * @param string $server_url The URL of the identity server that + * this association is with. Because of the way the server portion + * of the library uses this interface, don't assume there are any + * limitations on the character set of the input string. In + * particular, expect to see unescaped non-url-safe characters in + * the server_url field. + * + * @param Association $association The Association to store. + */ + function storeAssociation($server_url, $association) + { + trigger_error("Auth_OpenID_OpenIDStore::storeAssociation ". + "not implemented", E_USER_ERROR); + } + + /** + * This method returns an Association object from storage that + * matches the server URL and, if specified, handle. It returns + * null if no such association is found or if the matching + * association is expired. + * + * If no handle is specified, the store may return any association + * which matches the server URL. If multiple associations are + * valid, the recommended return value for this method is the one + * that will remain valid for the longest duration. + * + * This method is allowed (and encouraged) to garbage collect + * expired associations when found. This method must not return + * expired associations. + * + * @param string $server_url The URL of the identity server to get + * the association for. Because of the way the server portion of + * the library uses this interface, don't assume there are any + * limitations on the character set of the input string. In + * particular, expect to see unescaped non-url-safe characters in + * the server_url field. + * + * @param mixed $handle This optional parameter is the handle of + * the specific association to get. If no specific handle is + * provided, any valid association matching the server URL is + * returned. + * + * @return Association The Association for the given identity + * server. + */ + function getAssociation($server_url, $handle = null) + { + trigger_error("Auth_OpenID_OpenIDStore::getAssociation ". + "not implemented", E_USER_ERROR); + } + + /** + * This method removes the matching association if it's found, and + * returns whether the association was removed or not. + * + * @param string $server_url The URL of the identity server the + * association to remove belongs to. Because of the way the server + * portion of the library uses this interface, don't assume there + * are any limitations on the character set of the input + * string. In particular, expect to see unescaped non-url-safe + * characters in the server_url field. + * + * @param string $handle This is the handle of the association to + * remove. If there isn't an association found that matches both + * the given URL and handle, then there was no matching handle + * found. + * + * @return mixed Returns whether or not the given association existed. + */ + function removeAssociation($server_url, $handle) + { + trigger_error("Auth_OpenID_OpenIDStore::removeAssociation ". + "not implemented", E_USER_ERROR); + } + + /** + * Stores a nonce. This is used by the consumer to prevent replay + * attacks. + * + * @param string $nonce The nonce to store. + * + * @return null + */ + function storeNonce($nonce) + { + trigger_error("Auth_OpenID_OpenIDStore::storeNonce ". + "not implemented", E_USER_ERROR); + } + + /** + * This method is called when the library is attempting to use a + * nonce. If the nonce is in the store, this method removes it and + * returns a value which evaluates as true. Otherwise it returns a + * value which evaluates as false. + * + * This method is allowed and encouraged to treat nonces older + * than some period (a very conservative window would be 6 hours, + * for example) as no longer existing, and return False and remove + * them. + * + * @param string $nonce The nonce to use. + * + * @return bool Whether or not the nonce was valid. + */ + function useNonce($nonce) + { + trigger_error("Auth_OpenID_OpenIDStore::useNonce ". + "not implemented", E_USER_ERROR); + } + + /** + * This method returns a key used to sign the tokens, to ensure + * that they haven't been tampered with in transit. It should + * return the same key every time it is called. The key returned + * should be {@link AUTH_KEY_LEN} bytes long. + * + * @return string The key. It should be {@link AUTH_KEY_LEN} bytes in + * length, and use the full range of byte values. That is, it + * should be treated as a lump of binary data stored in a string. + */ + function getAuthKey() + { + trigger_error("Auth_OpenID_OpenIDStore::getAuthKey ". + "not implemented", E_USER_ERROR); + } + + /** + * This method must return true if the store is a dumb-mode-style + * store. Unlike all other methods in this class, this one + * provides a default implementation, which returns false. + * + * In general, any custom subclass of {@link Auth_OpenID_OpenIDStore} + * won't override this method, as custom subclasses are only likely to + * be created when the store is fully functional. + * + * @return bool true if the store works fully, false if the + * consumer will have to use dumb mode to use this store. + */ + function isDumb() + { + return false; + } + + /** + * Removes all entries from the store; implementation is optional. + */ + function reset() + { + } + +} +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/KVForm.php b/modules/member/php-openid-1.2.3/Auth/OpenID/KVForm.php new file mode 100644 index 000000000..6075c44f0 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/KVForm.php @@ -0,0 +1,112 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +/** + * Container for key-value/comma-newline OpenID format and parsing + */ +class Auth_OpenID_KVForm { + /** + * Convert an OpenID colon/newline separated string into an + * associative array + * + * @static + * @access private + */ + function toArray($kvs, $strict=false) + { + $lines = explode("\n", $kvs); + + $last = array_pop($lines); + if ($last !== '') { + array_push($lines, $last); + if ($strict) { + return false; + } + } + + $values = array(); + + for ($lineno = 0; $lineno < count($lines); $lineno++) { + $line = $lines[$lineno]; + $kv = explode(':', $line, 2); + if (count($kv) != 2) { + if ($strict) { + return false; + } + continue; + } + + $key = $kv[0]; + $tkey = trim($key); + if ($tkey != $key) { + if ($strict) { + return false; + } + } + + $value = $kv[1]; + $tval = trim($value); + if ($tval != $value) { + if ($strict) { + return false; + } + } + + $values[$tkey] = $tval; + } + + return $values; + } + + /** + * Convert an array into an OpenID colon/newline separated string + * + * @static + * @access private + */ + function fromArray($values) + { + if ($values === null) { + return null; + } + + ksort($values); + + $serialized = ''; + foreach ($values as $key => $value) { + if (is_array($value)) { + list($key, $value) = array($value[0], $value[1]); + } + + if (strpos($key, ':') !== false) { + return null; + } + + if (strpos($key, "\n") !== false) { + return null; + } + + if (strpos($value, "\n") !== false) { + return null; + } + $serialized .= "$key:$value\n"; + } + return $serialized; + } +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/MySQLStore.php b/modules/member/php-openid-1.2.3/Auth/OpenID/MySQLStore.php new file mode 100644 index 000000000..f89afc6fe --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/MySQLStore.php @@ -0,0 +1,78 @@ +sql['nonce_table'] = + "CREATE TABLE %s (nonce CHAR(8) UNIQUE PRIMARY KEY, ". + "expires INTEGER) TYPE=InnoDB"; + + $this->sql['assoc_table'] = + "CREATE TABLE %s (server_url BLOB, handle VARCHAR(255), ". + "secret BLOB, issued INTEGER, lifetime INTEGER, ". + "assoc_type VARCHAR(64), PRIMARY KEY (server_url(255), handle)) ". + "TYPE=InnoDB"; + + $this->sql['settings_table'] = + "CREATE TABLE %s (setting VARCHAR(128) UNIQUE PRIMARY KEY, ". + "value BLOB) TYPE=InnoDB"; + + $this->sql['create_auth'] = + "INSERT INTO %s VALUES ('auth_key', !)"; + + $this->sql['get_auth'] = + "SELECT value FROM %s WHERE setting = 'auth_key'"; + + $this->sql['set_assoc'] = + "REPLACE INTO %s VALUES (?, ?, !, ?, ?, ?)"; + + $this->sql['get_assocs'] = + "SELECT handle, secret, issued, lifetime, assoc_type FROM %s ". + "WHERE server_url = ?"; + + $this->sql['get_assoc'] = + "SELECT handle, secret, issued, lifetime, assoc_type FROM %s ". + "WHERE server_url = ? AND handle = ?"; + + $this->sql['remove_assoc'] = + "DELETE FROM %s WHERE server_url = ? AND handle = ?"; + + $this->sql['add_nonce'] = + "REPLACE INTO %s (nonce, expires) VALUES (?, ?)"; + + $this->sql['get_nonce'] = + "SELECT * FROM %s WHERE nonce = ?"; + + $this->sql['remove_nonce'] = + "DELETE FROM %s WHERE nonce = ?"; + } + + /** + * @access private + */ + function blobEncode($blob) + { + return "0x" . bin2hex($blob); + } +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/Parse.php b/modules/member/php-openid-1.2.3/Auth/OpenID/Parse.php new file mode 100644 index 000000000..891ca5e71 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/Parse.php @@ -0,0 +1,308 @@ + tags + * in the head of HTML or XHTML documents and parses out their + * attributes according to the OpenID spec. It is a liberal parser, + * but it requires these things from the data in order to work: + * + * - There must be an open tag + * + * - There must be an open tag inside of the tag + * + * - Only s that are found inside of the tag are parsed + * (this is by design) + * + * - The parser follows the OpenID specification in resolving the + * attributes of the link tags. This means that the attributes DO + * NOT get resolved as they would by an XML or HTML parser. In + * particular, only certain entities get replaced, and href + * attributes do not get resolved relative to a base URL. + * + * From http://openid.net/specs.bml: + * + * - The openid.server URL MUST be an absolute URL. OpenID consumers + * MUST NOT attempt to resolve relative URLs. + * + * - The openid.server URL MUST NOT include entities other than &, + * <, >, and ". + * + * The parser ignores SGML comments and . Both kinds + * of quoting are allowed for attributes. + * + * The parser deals with invalid markup in these ways: + * + * - Tag names are not case-sensitive + * + * - The tag is accepted even when it is not at the top level + * + * - The tag is accepted even when it is not a direct child of + * the tag, but a tag must be an ancestor of the + * tag + * + * - tags are accepted even when they are not direct children + * of the tag, but a tag must be an ancestor of the + * tag + * + * - If there is no closing tag for an open or tag, the + * remainder of the document is viewed as being inside of the + * tag. If there is no closing tag for a tag, the link tag is + * treated as a short tag. Exceptions to this rule are that + * closes and or closes + * + * - Attributes of the tag are not required to be quoted. + * + * - In the case of duplicated attribute names, the attribute coming + * last in the tag will be the value returned. + * + * - Any text that does not parse as an attribute within a link tag + * will be ignored. (e.g. will + * ignore pumpkin) + * + * - If there are more than one or tag, the parser only + * looks inside of the first one. + * + * - The contents of + + +Name: Link inside comment inside head inside html + + + + + + +Name: Link inside of head after short head + + + + + + + +Name: Plain vanilla +Link: + + + + + + +Name: Ignore tags in the namespace +Link*: + + + + + + + + +Name: Short link tag +Link: + + + + + + +Name: Spaces in the HTML tag +Link: + + + + + + +Name: Spaces in the head tag +Link: + + + + + + +Name: Spaces in the link tag +Link: + + + + + + +Name: No whitespace +Link: + + + + +Name: Closed head tag +Link: + + + + + + + +Name: One good, one bad (after close head) +Link: + + + + + + + + +Name: One good, one bad (after open body) +Link: + + + + + + + + +Name: ill formed (missing close head) +Link: + + + + + + + +Name: Ill formed (no close head, link after ) +Link: + + + + + + + + +Name: Ignore random tags inside of html +Link: + + + + + +<link> + + +Name: case-folding +Link*: + +<HtMl> +<hEaD> +<LiNk> + + +Name: unexpected tags +Link: + +<butternut> +<html> +<summer> +<head> +<turban> +<link> + + +Name: un-closed script tags +Link*: + +<html> +<head> +<script> +<link> + + +Name: un-closed script tags (no whitespace) +Link*: + +<html><head><script><link> + + +Name: un-closed comment +Link*: + +<html> +<head> +<!-- +<link> + + +Name: un-closed CDATA +Link*: + +<html> +<head> +<![CDATA[ +<link> + + +Name: cdata-like +Link*: + +<html> +<head> +<![ACORN[ +<link> +]]> + + +Name: comment close only +Link: + +<html> +<head> +<link> +--> + + +Name: Vanilla, two links +Link: +Link: + +<html> +<head> +<link> +<link> + + +Name: extra tag, two links +Link: +Link: + +<html> +<gold nugget> +<head> +<link> +<link> + + +Name: case-fold, body ends, two links +Link: +Link*: + +<html> +<head> +<link> +<LiNk> +<body> +<link> + + +Name: simple, non-quoted rel +Link: rel=openid.server + +<html><head><link rel=openid.server> + + +Name: short tag has rel +Link: rel=openid.server + +<html><head><link rel=openid.server/> + + +Name: short tag w/space has rel +Link: rel=openid.server + +<html><head><link rel=openid.server /> + + +Name: extra non-attribute, has rel +Link: rel=openid.server + +<html><head><link hubbard rel=openid.server> + + +Name: non-attr, has rel, short +Link: rel=openid.server + +<html><head><link hubbard rel=openid.server/> + + +Name: non-attr, has rel, short, space +Link: rel=openid.server + +<html><head><link hubbard rel=openid.server /> + + +Name: misplaced slash has rel +Link: rel=openid.server + +<html><head><link / rel=openid.server> + + +Name: quoted rel +Link: rel=openid.server + +<html><head><link rel="openid.server"> + + +Name: single-quoted rel +Link: rel=openid.server + +<html><head><link rel='openid.server'> + + +Name: two links w/ rel +Link: x=y +Link: a=b + +<html><head><link x=y><link a=b> + + +Name: non-entity +Link: x=&y + +<html><head><link x=&y> + + +Name: quoted non-entity +Link: x=&y + +<html><head><link x="&y"> + + +Name: quoted entity +Link: x=& + +<html><head><link x="&"> + + +Name: entity not processed +Link: x= + +<html><head><link x=""> + + +Name: < +Link: x=< + +<html><head><link x="<"> + + +Name: > +Link: x=> + +<html><head><link x=">"> + + +Name: " +Link: x=" + +<html><head><link x="""> + + +Name: &" +Link: x=&" + +<html><head><link x="&""> + + +Name: mixed entity and non-entity +Link: x=&"…> + +<html><head><link x="&"…>"> + + +Name: mixed entity and non-entity (w/normal chars) +Link: x=x&"…>x + +<html><head><link x="x&"…>x"> + + +Name: broken tags +Link*: x=y + +<html><head><link x=y<> + + +Name: missing close pointy +Link: z=y + +<html><head><link x=y<link z=y /> + + +Name: missing attribute value +Link: x=y y*= +Link: x=y + +<html><head><link x=y y=><link x=y /> + + +Name: Missing close pointy (no following) +Link*: x=y + +<html><head><link x=y + + +Name: Should be quoted +Link: x*=< + +<html><head><link x="<"> + + +Name: Should be quoted (2) +Link: x*=> + +<html><head><link x=">"> + + +Name: Repeated attribute +Link: x=y + +<html><head><link x=z x=y> + + +Name: Repeated attribute (2) +Link: x=y + +<html><head><link x=y x=y> + + +Name: Two attributes +Link: x=y y=z + +<html><head><link x=y y=z> + + +Name: Well-formed link rel="openid.server" +Link: rel=openid.server href=http://www.myopenid.com/server + +<html> + <head> + <link rel="openid.server" + href="http://www.myopenid.com/server" /> + </head> +</html> + + +Name: Well-formed link rel="openid.server" and "openid.delegate" +Link: rel=openid.server href=http://www.myopenid.com/server +Link: rel=openid.delegate href=http://example.myopenid.com/ + +<html><head><link rel="openid.server" + href="http://www.myopenid.com/server" /> + <link rel="openid.delegate" href="http://example.myopenid.com/" /> +</head></html> + + +Name: from brian's livejournal page +Link: rel=stylesheet href=http://www.livejournal.com/~serotta/res/319998/stylesheet?1130478711 type=text/css +Link: rel=openid.server href=http://www.livejournal.com/openid/server.bml + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <link rel="stylesheet" + href="http://www.livejournal.com/~serotta/res/319998/stylesheet?1130478711" + type="text/css" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta name="foaf:maker" + content="foaf:mbox_sha1sum '12f8abdacb5b1a806711e23249da592c0d316260'" /> + <meta name="robots" content="noindex, nofollow, noarchive" /> + <meta name="googlebot" content="nosnippet" /> + <link rel="openid.server" + href="http://www.livejournal.com/openid/server.bml" /> + <title>Brian + + + +Name: non-ascii (Latin-1 or UTF8) +Link: x=® + + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/n2b64 b/modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/n2b64 new file mode 100644 index 000000000..b12a24604 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/n2b64 @@ -0,0 +1,650 @@ +AA== 0 +AQ== 1 +Ag== 2 +Aw== 3 +BA== 4 +BQ== 5 +Bg== 6 +Bw== 7 +CA== 8 +CQ== 9 +Cg== 10 +Cw== 11 +DA== 12 +DQ== 13 +Dg== 14 +Dw== 15 +EA== 16 +EQ== 17 +Eg== 18 +Ew== 19 +FA== 20 +FQ== 21 +Fg== 22 +Fw== 23 +GA== 24 +GQ== 25 +Gg== 26 +Gw== 27 +HA== 28 +HQ== 29 +Hg== 30 +Hw== 31 +IA== 32 +IQ== 33 +Ig== 34 +Iw== 35 +JA== 36 +JQ== 37 +Jg== 38 +Jw== 39 +KA== 40 +KQ== 41 +Kg== 42 +Kw== 43 +LA== 44 +LQ== 45 +Lg== 46 +Lw== 47 +MA== 48 +MQ== 49 +Mg== 50 +Mw== 51 +NA== 52 +NQ== 53 +Ng== 54 +Nw== 55 +OA== 56 +OQ== 57 +Og== 58 +Ow== 59 +PA== 60 +PQ== 61 +Pg== 62 +Pw== 63 +QA== 64 +QQ== 65 +Qg== 66 +Qw== 67 +RA== 68 +RQ== 69 +Rg== 70 +Rw== 71 +SA== 72 +SQ== 73 +Sg== 74 +Sw== 75 +TA== 76 +TQ== 77 +Tg== 78 +Tw== 79 +UA== 80 +UQ== 81 +Ug== 82 +Uw== 83 +VA== 84 +VQ== 85 +Vg== 86 +Vw== 87 +WA== 88 +WQ== 89 +Wg== 90 +Ww== 91 +XA== 92 +XQ== 93 +Xg== 94 +Xw== 95 +YA== 96 +YQ== 97 +Yg== 98 +Yw== 99 +ZA== 100 +ZQ== 101 +Zg== 102 +Zw== 103 +aA== 104 +aQ== 105 +ag== 106 +aw== 107 +bA== 108 +bQ== 109 +bg== 110 +bw== 111 +cA== 112 +cQ== 113 +cg== 114 +cw== 115 +dA== 116 +dQ== 117 +dg== 118 +dw== 119 +eA== 120 +eQ== 121 +eg== 122 +ew== 123 +fA== 124 +fQ== 125 +fg== 126 +fw== 127 +AIA= 128 +AIE= 129 +AII= 130 +AIM= 131 +AIQ= 132 +AIU= 133 +AIY= 134 +AIc= 135 +AIg= 136 +AIk= 137 +AIo= 138 +AIs= 139 +AIw= 140 +AI0= 141 +AI4= 142 +AI8= 143 +AJA= 144 +AJE= 145 +AJI= 146 +AJM= 147 +AJQ= 148 +AJU= 149 +AJY= 150 +AJc= 151 +AJg= 152 +AJk= 153 +AJo= 154 +AJs= 155 +AJw= 156 +AJ0= 157 +AJ4= 158 +AJ8= 159 +AKA= 160 +AKE= 161 +AKI= 162 +AKM= 163 +AKQ= 164 +AKU= 165 +AKY= 166 +AKc= 167 +AKg= 168 +AKk= 169 +AKo= 170 +AKs= 171 +AKw= 172 +AK0= 173 +AK4= 174 +AK8= 175 +ALA= 176 +ALE= 177 +ALI= 178 +ALM= 179 +ALQ= 180 +ALU= 181 +ALY= 182 +ALc= 183 +ALg= 184 +ALk= 185 +ALo= 186 +ALs= 187 +ALw= 188 +AL0= 189 +AL4= 190 +AL8= 191 +AMA= 192 +AME= 193 +AMI= 194 +AMM= 195 +AMQ= 196 +AMU= 197 +AMY= 198 +AMc= 199 +AMg= 200 +AMk= 201 +AMo= 202 +AMs= 203 +AMw= 204 +AM0= 205 +AM4= 206 +AM8= 207 +ANA= 208 +ANE= 209 +ANI= 210 +ANM= 211 +ANQ= 212 +ANU= 213 +ANY= 214 +ANc= 215 +ANg= 216 +ANk= 217 +ANo= 218 +ANs= 219 +ANw= 220 +AN0= 221 +AN4= 222 +AN8= 223 +AOA= 224 +AOE= 225 +AOI= 226 +AOM= 227 +AOQ= 228 +AOU= 229 +AOY= 230 +AOc= 231 +AOg= 232 +AOk= 233 +AOo= 234 +AOs= 235 +AOw= 236 +AO0= 237 +AO4= 238 +AO8= 239 +APA= 240 +APE= 241 +API= 242 +APM= 243 +APQ= 244 +APU= 245 +APY= 246 +APc= 247 +APg= 248 +APk= 249 +APo= 250 +APs= 251 +APw= 252 +AP0= 253 +AP4= 254 +AP8= 255 +AQA= 256 +AQE= 257 +AQI= 258 +AQM= 259 +AQQ= 260 +AQU= 261 +AQY= 262 +AQc= 263 +AQg= 264 +AQk= 265 +AQo= 266 +AQs= 267 +AQw= 268 +AQ0= 269 +AQ4= 270 +AQ8= 271 +ARA= 272 +ARE= 273 +ARI= 274 +ARM= 275 +ARQ= 276 +ARU= 277 +ARY= 278 +ARc= 279 +ARg= 280 +ARk= 281 +ARo= 282 +ARs= 283 +ARw= 284 +AR0= 285 +AR4= 286 +AR8= 287 +ASA= 288 +ASE= 289 +ASI= 290 +ASM= 291 +ASQ= 292 +ASU= 293 +ASY= 294 +ASc= 295 +ASg= 296 +ASk= 297 +ASo= 298 +ASs= 299 +ASw= 300 +AS0= 301 +AS4= 302 +AS8= 303 +ATA= 304 +ATE= 305 +ATI= 306 +ATM= 307 +ATQ= 308 +ATU= 309 +ATY= 310 +ATc= 311 +ATg= 312 +ATk= 313 +ATo= 314 +ATs= 315 +ATw= 316 +AT0= 317 +AT4= 318 +AT8= 319 +AUA= 320 +AUE= 321 +AUI= 322 +AUM= 323 +AUQ= 324 +AUU= 325 +AUY= 326 +AUc= 327 +AUg= 328 +AUk= 329 +AUo= 330 +AUs= 331 +AUw= 332 +AU0= 333 +AU4= 334 +AU8= 335 +AVA= 336 +AVE= 337 +AVI= 338 +AVM= 339 +AVQ= 340 +AVU= 341 +AVY= 342 +AVc= 343 +AVg= 344 +AVk= 345 +AVo= 346 +AVs= 347 +AVw= 348 +AV0= 349 +AV4= 350 +AV8= 351 +AWA= 352 +AWE= 353 +AWI= 354 +AWM= 355 +AWQ= 356 +AWU= 357 +AWY= 358 +AWc= 359 +AWg= 360 +AWk= 361 +AWo= 362 +AWs= 363 +AWw= 364 +AW0= 365 +AW4= 366 +AW8= 367 +AXA= 368 +AXE= 369 +AXI= 370 +AXM= 371 +AXQ= 372 +AXU= 373 +AXY= 374 +AXc= 375 +AXg= 376 +AXk= 377 +AXo= 378 +AXs= 379 +AXw= 380 +AX0= 381 +AX4= 382 +AX8= 383 +AYA= 384 +AYE= 385 +AYI= 386 +AYM= 387 +AYQ= 388 +AYU= 389 +AYY= 390 +AYc= 391 +AYg= 392 +AYk= 393 +AYo= 394 +AYs= 395 +AYw= 396 +AY0= 397 +AY4= 398 +AY8= 399 +AZA= 400 +AZE= 401 +AZI= 402 +AZM= 403 +AZQ= 404 +AZU= 405 +AZY= 406 +AZc= 407 +AZg= 408 +AZk= 409 +AZo= 410 +AZs= 411 +AZw= 412 +AZ0= 413 +AZ4= 414 +AZ8= 415 +AaA= 416 +AaE= 417 +AaI= 418 +AaM= 419 +AaQ= 420 +AaU= 421 +AaY= 422 +Aac= 423 +Aag= 424 +Aak= 425 +Aao= 426 +Aas= 427 +Aaw= 428 +Aa0= 429 +Aa4= 430 +Aa8= 431 +AbA= 432 +AbE= 433 +AbI= 434 +AbM= 435 +AbQ= 436 +AbU= 437 +AbY= 438 +Abc= 439 +Abg= 440 +Abk= 441 +Abo= 442 +Abs= 443 +Abw= 444 +Ab0= 445 +Ab4= 446 +Ab8= 447 +AcA= 448 +AcE= 449 +AcI= 450 +AcM= 451 +AcQ= 452 +AcU= 453 +AcY= 454 +Acc= 455 +Acg= 456 +Ack= 457 +Aco= 458 +Acs= 459 +Acw= 460 +Ac0= 461 +Ac4= 462 +Ac8= 463 +AdA= 464 +AdE= 465 +AdI= 466 +AdM= 467 +AdQ= 468 +AdU= 469 +AdY= 470 +Adc= 471 +Adg= 472 +Adk= 473 +Ado= 474 +Ads= 475 +Adw= 476 +Ad0= 477 +Ad4= 478 +Ad8= 479 +AeA= 480 +AeE= 481 +AeI= 482 +AeM= 483 +AeQ= 484 +AeU= 485 +AeY= 486 +Aec= 487 +Aeg= 488 +Aek= 489 +Aeo= 490 +Aes= 491 +Aew= 492 +Ae0= 493 +Ae4= 494 +Ae8= 495 +AfA= 496 +AfE= 497 +AfI= 498 +AfM= 499 +AfQ= 500 +AfU= 501 +AfY= 502 +Afc= 503 +Afg= 504 +Afk= 505 +Afo= 506 +Afs= 507 +Afw= 508 +Af0= 509 +Af4= 510 +Af8= 511 +AgA= 512 +ALDs7paJl5xPh6ORH61iDA6pONpV0rTjGiTkLEW2JsVsRKaRiS4AGn2PTR1UZXP0vXAmRXwdSegQgWPUp3Hm3RofRcDh1SykZBLif7ulau1hVO+rhwRyKc7F8F+7LcMf/v+s73eOXUDbbI2r52wfr7skZy/IELhsC8EK6HzhACI3 124241322153253947064453752054205174382289463089695815605736438952932114700118408072544073767229325045596832952652232288773280299665950768731398747700657715829631597019676014848183966683866396215048196276450953653433516126074463193382764063985175903718735372053536664711482497859539116009770850968340298474039 +AOzgU1s6Pd2IkrJlvGND8legXTe50nyDCocI5mwT9rW0YsisY5jaaEOcu51BAq9MmXBPeVX0k/jlXwH4Pn3mCpUAU1rEOsTdcmSJp35siKliDdhTZHHdZNMW+igfXGX5OCsA/BaBcGnE6NnrGWXKyTOoVUGQLEkL2T5yhNUaCT83 166340174936369324883416612727439279977041963320514134445183426741643586944819834936989524033374309932122967866930503619179389342537723598234062828695747850043368572301869699886931403612266216965783079972698791813140295203826980649434652168563255385527187360027803388963151668338040517316899628026707657178935 +AO8hrpw+lDiJ13JahLtCb1RenupQcNd0wlTSck9OLL8wB/x6gAoj0PTLV05eZIbz43N3GUSDmmckjlxdHXiBJ9rsoB0P95l1CWIV+4rXblCqxmOdmlm6VZ13bqbI0x7l0cjeMrkmk+yJ067WqUolqQBlUWMTuJVfkxALJYH5xr/C 167923899524385316022824282304301434707626789716026029252173742527362300338760906999615029022863637963070711762128687835779073122264515776657475985362344360699359591353388569856862973447791264902182048648600267737826849280828116753682917256540180401899752566540869918949003470368970029744573140084219550547906 +QxAn7yrdVs5tlHV+Glbqdaj67c6Ni8am3bBLOL8PV5HbdrLf2xIPmNugo6MfUwFSnT+ZPJ51+VTOsItaNwCFju0Eh1cqyP3JWyLRPE7emKuo6xRhf+5ik0pTg77LEF4JXW6ofDqirpR4alFi0G2d9yImQPphsYJwYGF/nNT8u0Q= 47093316905427544098193936500644355852669366083115552072584429220248776817916430034648347490325490701471113667554329499736495877969341478442613611948220957798780043076906836236556612316544460763366275536846463456405604189392790111985912854476264292503164100482712281088955640964034295834935468665872932715332 +AI9PVzrbJUvmCihwSFans1lBKwudGEZpWWu8pkSK2zVgzGhMvUoGgMp6TG2zsUd1tV8zv7KsVD2t6pXmjT1wPUynufq97GVHI06SGpflDTt30WboYRh3DgYxvso1sOjUXpnDezcaqc2Aiz4nV5MSShkBlyBjA8z2worHDE+uXqw0 100635651531872121827765663065728398779771663753008344681972226973080394359405041113312675686974926993279775427390065833081040771269307007695807025882757371805607979134114890454059957194316765342461291139168706134406917264848659448693866813989352429841300235734400772946895458374870482441457514575059390213172 +FiinVicXOqqRLpxcGTorQpSAGeQ/PfDOuzYK9ViFtmPv6D0cYPfhUH4qXEHOejvmX+0b4lfaX8MWPVZxlqpfXiU9BhG76HJxkLF4ysipukeOvhoHzvcxE5bnhSF1i//bOSifATBLBEZInwqSVg5tHHPuuCkwTL91NqhOulp7Lsk= 15560440884463435471963622630292643727112462888414585143143739400703889930416938984547754943252935620248108237258540176511252143752416771350868493435174026287082706690332705481726295797196444796135827460509780634261726494455068460028424141500629527968240913757449787164107068039175831847071025316475940056777 +aYrxyQN/hkBne2ayqo2/iDLF3DZGgk080SOMJfsj9h3Z1OfFZM7TJA+y+/O7niqatosvKrfHrAw+Qs7c6tCZ6NPwYJ4QJLOF9bqH2u2a3fkI954voNUctlUagYUJsZXV8hdhLM6NwUyIZ3ZFkPcpTZp7nKQQ84tr1a8VjDIT5/o= 74114640794666001532816944350975062126079079113921109750255283189037502412929005615388097912507598112836936032143435813588205939470002911374442844578739574773399427907766548612582213272643279263782396527705126350063372192910060171635870872236876399794128383338399728947176692692942605589343038282957050865658 +AMpCUeKUX/vtRslWiUUuXNl1KA9uDAWjMUkTrdsxxRDESI7iZIn3TR9lW+0kV5fzkLF18iYLAwSGBmX1PS/T0UVFmoBPJ9yS7yktNL0lpQ3noyGFn8HHZ6XB3FkH3jegIfGbvwwhnhhFzpHPrXlpO5iU5Y+rexzp2XHWt4yJGuIL 142031143422642739313498629438991149460874309300342349421794421544918823888598660275343727563280565210534243383322796489809683834300630555650331646026843796764549231159336347965502383849513994449309613369541991287590422095953275586374371960367000083487965487661436037637475372929033613295072397262739084075531 +AIMIQVz0JIEKEI+PREu94m3v9XoiU/Q0CpsSuqkwSSje+Wyul5ea9oU5qgtOpdkMUOW91BJo0DW/GMZ8v3C4qyyP29TtjCcAHObJi9hfLSlnTSuzXZnDStooYYKqzfToLToCaAJKCXiXAVW0vWtapLnyqafrf/KgyGZ5u4HfXKY0 92013973253053602863003242446596060337454881568126916916519869242232429836082762281129448384605359749247852792606718908482332975424967542242332487707042773885428473061056052851768940900752317020681189773407893371297668591494665352294885305475871917069040377145530889271334616499701769138948975263435137525300 +ANfP+zPBTR27afneyac1KJhOB5Pq3AXB+SoAXJvQI/GkSoNhw5KdfqoIkLcoJi8wClCm424Gm1AdrdGwDFOM/iKTSPkrvMag93+b2EbQGX66/n2X3YRFNkgq/Gtb+2M8oCcAL054Z/iiMD67aU5RWzjqS64ePHsn01bJ7dqLgpMO 151548639867177154896951257541227014781655576169318283047778755573323724856619156348444192550664853912434681577093459933599575436686424046466113215132845213008587152894642577278656978304699131916299275797578171518984206145555369576872231567191579337901913492071976578289189524123204040497290426960375042970382 +AK0kHtacLGu1NFWMADq2rG8hpzM4UEYyPOL+aMJbnwXcUYptRIxb0YFZg35RN/RiZs4lQsiq+kEJKzMMV71TsJq59vMkIZhZoB3t8g9ZqBZuq0JYcTICDwRpNSttJidVpJ6P9sR3s1xPMYKdlSwt6EEc9htOXfZU+yHKYgn98X60 121583812047864398969816595368193171848971298823388059338224714026742264861090347096116404814514279627148994345584790617974476594451626305761040465570524035369799925437276511604752129817947910677564301623631349399504187314174538914591944778074509068973226322566160587813128746039859381466427380402262866230964 +W3sZlWW1Aev3x/DiH9MzwCAZzBj++x9cknLfGAHwgFqkLH6vimEH/r8hi85hzlCOG5CjwhoZ0D/Hsfr26ZJ3X4chG84byrfDnek1V9mm1++v+clJvlYgcuVgn2Opsba2TILTm1MDB+Ujs9brJ2AAKrE9+ep5nvtQVeG9PUGtdlo= 64240043913835461386212515483198059541440539167395859777194837833769712010594411295323900074066077107346806786205590345517755715510695858065925747020336398305793661773798243627926904542715123849691490667964262778804487343218972081260210371192903128886030021862362141928329650003493687310970684093289133340250 +FTQRk9/BIj21gbLwI22fHJWYj+8Ghdcc613hOtJ+/hQmh73HwTXLpaGK9aCptxVbpjW0r/bxaRjmgxu9u1CCZh5yRd7Z46Wk/LIPXGd3ycQzqRMFB7TISFQGJIcFoxRp3Eb5wa2OyrUg7c/D+kb7oFJq9P7mEwIh8TpLzwmu4SU= 14889529068556301710329043521845510156960298822469914567758538023025100741826628180855835334285179977296740667353391766487166458692144569279381035582718738461626140662441222061900764829681913534146898551570916312642104487829660946024590782808750587095559047648957238487820069966851521487428624726655438348581 +APYXO6uGvs9qWiEAkcWsaCaCrGJJCP2Z1g++XlJ67oZIgEoWITn3T/R2/c4edAfwUUzNHAYZN1h2dSrRoqlrRXrbxFtGOuRCUrXcGLFFcEbTrtm+z5z8xGRfcorx7Cu3FIBPMK5XcGPcbRZdyP1gBkeDMvuBNAo0/To+LP/dhCNM 172810804474418448604443090732221483571611665465870520701624598983692130272337358406272727413570938793741430131635927237320173996217984860203754686741782921346604605228620148450611724714868551781003004492587584071978757421616871762681049508123223983431502852926521520561941051298696758046005573332373854233420 +AIDNxhnDEe1kTJ3XGfTS8zKXeXPRdw5yifm8j8Ibzj/quExy7hFPtKct8hRskPR2qwTlMiW9Ra8Npg2USsqHV0rBoIkX7E3psxq5LBfp/q00l3SEBuLL4K2FGR87bPgU+Duk3RVrNMnColiTcnAR5XkoeWhn/r9MfJMIN9Y0FEh8 90449107125498302548188660544012777357148118984122992664008792590422284061463729084479315745509706793674355738023180454297730948397413371686013210006834869294564190666543874617716180411178090109573192518129248278410216362657350215009192850017507998797754539132540293137589672869131300859207213449571846080636 +AIRWavxYRsGlH0Yr0DudwrpYtbrByf9ZsDawKom7ubiRfepqYzcBlwt4adMMnkYSaXeYtOsD4KBm2ZvLKN3++RkYNmxgkyarORBEg7ERyiThBj7Ksw57pNHCAoHtBEhH7Wp9mHhuZtPvPgCEptmwCu9rYhLt4zZp+Zq8a02dkXvM 92930601962515884925250459851491509622611227724602941760145671636277317511265759558869239180653492283311584982044597979173761619470326096725838197524704577188104121460089235709339932110663536557497112887112782062772810759971739760085128369628777812332518137107605855679096146402427144185104230596200130247628 +AMNJGLcAiJtL5fUfkesWKYJurdYSnvsOZeZcrg7bemkEVjF6S9CcojimUl+ncr/YY5/EXnU0mg84fObtDxWWdJ7z7l0CFcoALTyEatDYKshT0xvdKY3u+LUShxIAyk8EcGnf+KoEaa4Mx3tg2oTBnVegXClOakNTWw8bu2ItagoQ 137134165107366719462230252606689766470445826753581409513106273517221906418464863733870948759313279128624638614534848890858250894834883265387344539280755177217350585564186248554307335197387734431939154077778003706720017441895613190141376534460438929588407764609772857975000507660651583780079804513519571438096 +BmGPZt8XqqI1PuLN4K1/PZMi2rfOYtHEMrcwZdSjKRm5qTkd0Pbb/5zPV07TnM0uLRvIQYTLloEY+GYyn0K5gDTEZpEtQ8ee6Y87zYGDwcf20eqYNxkA7FVV71vqCP/Uw3Oi6B+hMvsWZbvv2vH6MkAeADCrezOtwqVS+irftyc= 4480956865245875120472829476982311611308898564405318773810939350829150182630548948231116574193987272498161864310429976564278532538229396846813874244969927890037756969704618336242255039858182439641759659872128285423988638335967412040624105824571426792562334458751137508116412821914961236269913776304372561703 +APqFgCIYbJWuRyEGuOStPvcprj2PILQ0JpgwQ2jLKn3DvkWSd83qh7PWGKozGavsjh803K+ZzI7P2wP+Nc0r0El3q4nzaHvKaCtVRyMwbXv9wYLFZICeM6J1l9ljUMts4tbDoPzkIy3ScU7pYxarBWqMkcBU8qL6NN1vEdkeu0fW 175922170410080716883576123079908758276229469783745771772401183721225804343343063277676406040455068452258961299511343441961963941297631097736305638850193978800615558067791016294285848963023036905095022181004058235239390870177623185946205281141386416867569004073524130001309977475780893497185890756991672600534 +APA/rCcGeH6A+6ZwaBBDM6mB6tTD8mjkrOWEo/pK3MCZ+rrErMBnFp2S19GhlLOfuY8BHS+D834Fdm8+3wKYkWnXZpGb+e3v8ofOQ34G1HvzULOYtrEiC4ISZRt2SSyz2hU+PBXjVnplsHWTRxZDmBxTJdgli4ItAqxGCxj/aJ9m 168708388929747822981923386197903561880341990893945097067702518857172133291360611402092714329372304718329568897960770488377524912057166920574319430820488930520807742026377043178502591886293565177404635365772829346030773275726024973460121300339258054215286249329967181244588558220467488638468686270735376228198 +AKmwrLP108dCGWOWxE/6woJVLRi/Kra/DvdsPkkrZQmWIlUT7IvwM4gU6bUr4f6wpT08cIQls2cGh7dbSEaO0xLa3mmtKhPiAlzSnz0wuifF3JT9U3uXgUfCZuFtE0z7Oi7WTOrpl3k3GA7JFvXnY0lwblIQALVf6oWyNETnajGl 119160465301384937485959146028591622947513292915838943629387700439301197965652871741710280647524383590817798553034250156068573474278225305190573334054718387045488098320076877626430189054572361967283632592181431701411266656256255758079114072932140551282607247364388070762970060420036793573956057551235306893733 +VTe3rCzAL1Sljo3QAXEkAdBy1ZARHZwtrj6ZNRa5ttqd6/l21g4z3iHCeGo4rnE2F8wYTy+NlugjXw86OS+XojW5y6UzTtx0HX5IJ4POqN64aXWmaklGzroBEYWeuFFKcgQN3NOxkuJoDQ6VElP7Epz69kj5CsKJUwL0SjbNrFY= 59841866347633473702601462509811342285929528424012250265905695635971518533504187799047710303717472950129869674786231155102509311322791323986824635569605105662070745033595366004805920086888891275288347907772640070278731650628917037915863439204501060041944275512863990729926528905725569467329169134226609384534 +AIZt1xGhC/HrvpPASsvVIVdsu//tn0noyJmVYh3FdQ6yIh1uce47iCsrV1yvYqx5ZTbC0vnfnbjFcWqH+HtLX/DelgvhEwzqJ8hwQrfE1ShLG4ZjAVo1Z4GCjrDcEUMlwKcunuSJssuxeQuXwTLS92+q6QeBSS7OmfxPX29CLb4B 94399298271083745508290936113986978382457275531684761701599029877008571741877683365769553170771833981099580359640421358853566501815723434822307977440496208486103754978934472597505865596938563438311337045817621762649604204720249750058676095769230214181772215323235427976398686727606000594646472236822594174465 +NIhTPpWXS82VTA0LTd6TfM+HgLgUcmvnMYtLqPpuqCKZwalAycwl0XFYNyVvaY21J94j92ts/lRYgVtHDhk7/9nLXq5js/lsUnG8rWPHJo11JTxvW+df88aX0pw8u+biOWt87vc1MW1dsMTTsJFJAeBx77qU/Cwto95IVqM7vSE= 36889590210230649939994518345793530042252563793069578097360569338647730438860274349862767107939590441616825589851005429465345268710487649366046960918184701290985280638488938340668212498212581853679035928093386035688597446809895381618260692378376844452061580510108168030682664507293277674052032318576713776417 +KXdi4A2Z7tSiiX9YGtDtxUXIfQvPhcc48rUH+Q2SnXL7fLNmr+F4Rf3RiFBRiHKocPfE94pothop5qQJ5X221/DbEKWK6s+ChfQ636jvRxojoLMab3dPtaAPpDJHrfZMxbT4ZaDJT0tpA2e+zZrzBuDs+UUgCpty9nxtdm1gS7A= 29118662951481660380477444121362422614202367719725087486810943918529894738076273660245405874301505615796632229852040910511025841576465052938308369421493312085081188509808322692130449282585522349552501983296872614029139293444558468751646868108213623606366977549477663987815308260383403466635254115908032940976 +AIOTBZQR2EJJRmoWdRNFLG4fceoS3KnRTHRpPdllhHODqdg+QxTOcOvqIzBqgdD0JgO12SuNAjLQOiz0jhd02qkXw9Y1adGuKvL97ARFtNEuJiNzFAj7KpDLy2zk2rPJp4Lp7cjQs0fe8BQYnTzTsNRGm+4ybln/gse1YWu9w8y5 92394618277596007469808288231093678404089765494062813665106014405059399079199990128824492247005602685377185496959522609467906358619318009231448503013528692450191782140091818984176967246749464502089280153086163239846744554575017530385347720563798041108608545014076448155956762636929707905789978331102411214009 +NzfbJRBF4pqEeborJrjoknJgpfK+DZh2k9cE5dcElMPZ2Zn9im7desWGiBSQnu3KbTO4L/t4+m6nFTNcbIJnqbVSMDHdsfG72rG/t89aOuECQw0HMVVgONNNa6i/mw0jZSWnRLD4fa1YgbUlMd8jeqO9XcBDB4mVtDTxyeGa3vU= 38775530011374537813502898274019389132620116890266344603221997943675706375698597061571989090674289834838060050848545748579361837989319487970580969082824601965845786771062335733318139530316825802589479118956745739691326447349403950997231306042638797277408335778415717988679050762936401945487285814799382535925 +Y4BVPZ6necuLSwaqYEPeZp0lt9tTGFl/WCJJbwg7XpyvuwYKtzagC1NLzY5ymBfwGFw1yRlQuyGsYd9mBfC99DuVCIeh0JNrhJN1bNfoSzy5UO5+dmTr+dm66VGSRS0tFcViDTfCIleTV+zxo/xuZT+Bjxq7kZue8zGkjp42Kmo= 69872189501616471647606976308259279995249122669120675885925763529037695584466011511740991152346215507625265226811128801733353566555339153627478941716586678793853828514394269931890370517258825006937741437480128878717892485074131232336852490940507703859793477547154689914725314529986438108117871674332626168426 +AKCP9Mto4q/a2xNqM4N7PekbKspwt48OGPre+iqVwPrSP/jWKxg3CvvLNZzN5P+/FiUGIklMMFJ8w76OaHIPqKuwckj1gvCLECJEE+UAZWrNKPmpzd/ootN9/kQhNMuloTFCyhXAUUOXJ7Z0WVLb2u6fn4zroszSMBoWQEKC6lcq 112750701794692134675959811050012620191158543234019977304167102486465198271340022889272244811582365901584420008564301920174477182946432553537794834985703732129975734658113610563794129371053853971031300761815004524681756388784922001759202643614966614186697992611399618828963452661554240362943588548146868410154 +APOTAFA2waoAODECaGNgCHa8dNN+cjMnD01M+IeQFytzo9RLMzzzg/gpTUFpyLtFMcfbCkDYQMLXwE4crTimdz5sVvjGQ+5fSFQjoDY6Bw7MO6NAcLzlV/sI/1WyNBKaLQbcl2720n16tdUcdckQNnV+cC2J48CVxYM1c7QQlxA0 171043636512232272455501595416608280460445723238023572475354665686544174728784633443479486247342724860289312593374524429736857970220153680852977711594899595712511352458264354251161579203922747468321999465061463474727943140910084880926005209538535217464825087114791420210981711903880998556269523363208766099508 +AMGpxRlB8WVnsGqyyiy3/mzrPymtJW1o1HcDErK11ZwQV5PwTF3c0THwlnxDmcziLWHSWgPQwfRddVDCXMGW9BffJn+XO6aTcWDPmDAh+1DbWJPE1aqApGbHvQ8HONy90dQMZf1ayuwceWCVTuU1wnHdo9F/sIsRbuu7ic2OJDzY 135994898408425255747055209966103741651849229328236418804928584233229830656742052333413774490626915784901255640138520158698845938184666683995579777154437927013722740366497459963753542029774185193376253885864514386760437194444013834088425088260658670140534670789371556026135595577395047002643901630053097946328 +AJAw4uDYdSYkOrjtwJVWLv3pi1+UxWge4RmkWKqVquTsAVcT2tRZ+MFdHM457Hl7fmFIyxvGZQy4c2v1AbHEfPR8ID2sCRQpdcfrxEUZPMDqxfnHHm0ziny6W4X6ggdBzMp/sBWaVNTBL0e61/pELBGYNRGFMzGws7HQkr/sro1D 101254336834199527040756567675327011562230719161388328289463594628690618298993695452746353237675715087353241661592074446889034411683413957950360025295995263477031608845241728493807755308798509893719674568267846671753070163272328014412744008880395248474446310603301447848026040555910147467745595720879397834051 +AM09TdtXgYL4FI5CGNiVjf0T/AN/pZ5zZsBOi1MAUKMURiXnc1x8VKYTqM9Xb86mqNBBqphynIQG6/3e/YbGJgHlsSdrmKbo+P9daMr02I/7Z76/7Osa8+7Ky6lhVCbU3F0tBH4WvopkCQmuJ267afgvDD5kB+9uNr28deMH00cY 144124056591600568767398029380314564902309327093641173350205276895603332085753288682409279238417493662029954512382520307259348748813767324609446500382301421328754981718014234615523158887865271179104711373675849713359713282937065993613915015084108700238420759344034475478243507306107546245540340758766909867800 +AKDhK+/BKGXbrbBh2vM61OP8LN81YwlJKe68KNwUu4tjXlQg7i49Jis7QKPI/YFPUpSNTu5N2iCgeMnCX4+r3NAfivOao9lw4N3nc9bi839SIWdlokhwBHBYmCIgjehUeBAdkU4jKqlE06pIrpRmSvBtn7O4aWTbT+C++ViYAcGF 112973480670453665543892521898882856059335781900313607790238402438320486344365203510769919022496690291280873287383392088872774202832124927485754495093552572232234532821756395965072330282810574669371524103814871172318519695921477775100282448247625395376072233777533359104085023946019406729587713120941266551173 +ALxDiSxHjfxvP8ETvpE+SyDPTS7q3o3zCK519WTepygC58KSRfvDnIVIyV3toQKzgqD50kF1Ni5D/wuaSs62y3zg3kELX1g+WuBCc8+x50+kDtbHXa1Me3et/OqVS/QeppkcjK1UZMU29fXze6P/w6aQfvKQkE7koeQtZBKkYc0p 132203344567902304830160099595561253300484092355345272411265169562971473393256361094745618829297250316196312398486598077249124198329075791740755862221465178128527292695331061023291345396067863215552021206609309872689233899464919108147533679134727064586730810633196817136739658243232643507412032417747255282985 +VF0YUTvy8Mfi5o6X06DEvLm87r72mAtTdyyLNr0/GXlk0Xj3L2Oi2bVUMtcXQNRXg/mkdGP88pgdaP/eMzqkUU++vJ7t3UgOC1i3SHegpiBhhZh+aZHH/wjFV8Mz2XZB5z8MpMgN+QwALK1TT2Pyt/feQTsOy0imVanB5+OvCeQ= 59242171319056188000481457618922567543461456096441095927600135114274111606802456239311634638536207588762066940095527920532936960549439269891703098017342732142860571277442598349453761561189719823290643146391349978698217357430495238876700400634593256155537598291759795109752990651995982467695091946768443574756 +ezpwBt0N6QhTusiPcKrBvSB6yuk/KShTLUFQHdf5J1u1fgDYrp+aOWuXOFVfOd0bweiG4UxBQNXB2IDFWfYON0fBoaDqNk/41YyqXBSkKbiNWLi1y3zPmwTAiwK0PzYp2EPfk/t/j0HsDbvebu0ygcxb2tPqj4EQ1TXEdD007kU= 86533835313999945727720083706940213467453975054116752898416709637030456504024135513972566184073843025739226187558143854850980654667596935003124034699919861200483994576288766702308068265526535622439762454501169018136389983894783905946543636163866717367545972667876983557989192393479830223914708619684891389509 +U8BT26zT46tTZnkmTNxGUAlXbJhk5cNi4AMSd8fSvZHm55siMFGJ8Jl7mtdzEFR1UFAyEztf2fUhxdtMLe8ei/OJgM0j7myQ9STucEwnsShT7QS/DjBmfvcC42sl1CRpXkb0ZLrEJCPf+crtLKGrG7ExS1oawIAgALBiMQIL6mE= 58812148564290791415180898639607206220554150794356494356250223429674091688305329629529905854147200457536549527135776329004085047145097927266797668252160196098870200925284256433894773392353678965699083286106628662506590268955650280670838340651598082083455821825076016227525614626726458235627297885815646710369 +HfYii3U1SIkBZl09RHaGGA7H3np+qxyNeeCNY07PDl8LwZAaaYk/bHPeBVboan0I2X4o78zCD/gFXFBJ4rxwwUsVjHEioyO2JcpV2/oDOelJBD//78WzBMMSWt7ZKbJV9uYr9ZUM0BUD3fsk1esFCEdnDJdr86U0UMmiig2R+ME= 21039655953870571289679214995029926285040274249531458675115179004718812090027267801012507748013357317597416722235988917212676802092082137617336199787762782958420742299451435320649616271885264333948336627286638368859041172783505464468640994920853000441536629081040963398001710173320125308624362209157720438977 +AICOlee3daFyqTrTdtWjVb5M2rclh9BpIo1CRvKo2bF7NYcjrU0/VvbOnTVXDwdeGMLupbi76f0BrfDxYtkzMXvIZlgoTit4g5ennnklDHFBC5cogaGlri8U28w4/h5oMunZ1O4ezdpRgVJe9nTP/sSEMYiNS5IA7Zshdvm/XccF 90275777798511290102824338787811725003177532250296755103300529948194832904403489332420505850668003332750291879153080212231952155092379375422537931240723308384652734942204313672973885652497290433943089371705605128843469306776615573873479312715317072986990219294942040272550822460408702072075001377245051602693 +L0QUSVIjxvE201b1ztRZyOOxy8vkUz6626TH4tbLwXjjc+AhmrvplaVlavnOgHqve+/L18XNuAYP4BqdxIcWTx+yxBKm4ZS92dRJdcAtccvZpEJtYjdJvI6qbL5Ph6HluaVZwp4dyFyXuZOJGTfYdTb7PUWM0jNT/xsqyjxSQ2U= 33191267986826803728285073844005357792766429917696698533494382218509532051029343127452480789088572904364699220151221680328978554239767633887572649589456766209242252549993823283929686430100804479376247660556781589549613316880150951333982646510273364068770923588389668733632648346075516618646974067295703417701 +APlD9ECKJuACUmQUsbd2GTOpb2PgQVT08C/5hyNEVdA5bWoICX7epmoCKCybdolk+cfEBP6fSz33j+Vn8MbeiHBLdmF6ETbmcyOjldJ902MDvU8dqAa8IgEZN5Uh5x/xzN+3dqk9o0ji7yi291u90rpfIh85PPpDat2B4l5zs9i5 175040148659257809883308984693597046378367187659749953472629929701758633206586720399909808941145946314755491399962797299295431089674294356220216615950668954164397362123668926410543898553191541662075745481299747832013627018846822876386760538344447600390187421938699064459451308870669878673306013635576901916857 +KB7N0tE+A5vFhyrd/m6Qe1wTihkjqmBn+rinfmMAzRlvtxIBSyDLzQsOQs7L4oTG64ABU+YwcWVijvoeZNamaxGl4hatAH1pRqmC/r8FMvC4vqiFTbFHzQhkjM7uoHD1aKnxyBVgjMj0E0KZjrRxydZjIR2p13FXjLP3UQSFtII= 28173452509830313810392326357601136401754938805266458365469366750775669869895498658593356375710132149836430968810246171974040975430205200958564616924399794768861923079158311829444850822144940112488994119845741191519421434257276977333662656888696213514226866147767570046232093727585815615828360199830275208322 +bxFgV7eXwnbQScl4VzS3RTdcMW+NY6pcGkT1UsqHIeDVyBb8DnH/2/Z+DX3zniR1iW6FPdvhJJeQyPIax1ohILa11R27C1TLxGvTrRBGUycxjEcBIxamHveBsXbECWusYLEakeSDg9x4BTWMz1rTQajkorBoeEjYuW+xBxQtXME= 77994515143740690952370766995249847650881300682406161400195705464876513409097078624084133111941171517535435606295232558665316819077765607639545069239931096306624817379462598756505457054433358548941076472902905065316335603665413114267741896000877284610377452471067725794013283338924419969559537339967562669249 +AOH6E2eBzD76QdTJ6QbR/7OeF7AagUif9pEYx7fMqrIsXCJKKpLV/RHIItCDYP2WO4URCaVueoAJe3M/Shj4o6efvH9pf5Q8MLM0rn5MTHWhThivqYQDwjCp1ZsPgq1VFS+gcnmwgHhj2W7XzJxiNPeRXlxI2vL+XTT/wPBYhqEP 158686346608862569574095184731081143351413141116869402750758091813874232272198082464382169470744476593016502816563462778075467588097653320101723165887488327616477297401486647183409348122990505635004320879840358339260797834264972100385692477324858942142372580281421734058008608134075577990829273447077276721423 +ANDDgNXOB/rXwmS4KEjiHj7RCDocVrMv5SU0aw6AJzNTBfseFngqidXx2AJKOEeG7RDDN2gzn4K4qJktF0AIPG2JbELlLUu0MFlpOLxamp586qyp67Cl9OuPq3UZTyQhIsSIE3VQkvxuQkGsaV1owDV3BKIWQbQEqMQI3yT4ELHm 146598844784260148346676185962272439320781765598895126402049215152385925250917998794921584290777625240122575975327405909800121511343265147922400813488099624745229653124857224399973509428158163452130086943873214460600035260925149630502192183407327427517292065083168010281295559088633086659209316582810260124134 +Vprr6oBnWuxIzyTZjuxlKSdZhBc0upeNBHVIlXpQEnN1Q+XURKzp4/6Vg/koITftr3SMSgGpE7LkrERMGFgYaqM5XZ1RXYFKT9dRJnz9VRDITVZtdkDrU04bqo2Ur+jvZhvg/oHBDTgQ4nPLJfHO3+GEmUtck+g/wOVozMMgufY= 60816213163057201559480662231646403262735082707152897397414589876256824040344252799972529759737904461369360580708093117244392116003622336721789703580184437841209963565058475060017600871779929808204093448248984201640754565635410002090180110910120481044515630478472999135146756643143415057403006410330361346550 +do4LGsm0afQLHl9alWF2RVyEKPxLIErsf4pTPgScRE7ZiTSVErbCDeyzd/KHzhBLQs/DhHHcw+OXj541cIRm6jaLVKiT8EwLW/dVG0AkVli83sFh2f56Kk+bCGSKvfGEQcGLY2k7nQ06zoMlYR/xbZCka6Q6kSq4YBDQgigQ1lU= 83252051731120517035090523892596419800592471447735288551342681962005778435125655090199060145942826521644585427683714084736143440310518046334877897672493531918539106001203807757254797471481884534543367685912500572052457610702790097953420236852480969038388056545966568595395722585797418296411673622376893961813 +OL2Qoj4xkqRrQmuuLwrABG3BMMBNGjfBtVBNTdBf7g027Ghkk/z3aK3jKT1EPpdiOdn8zXYBSO1mTRGyK3n7Jo8ICOcnlBOF6cZtDsb9bvSVE26MOD2wzl6irU7vzS+s3vGBkN3AazrxPD4czk3xezA9y13DJVnNzgAgIQHEols= 39844525812817530522650122383059885756573694015271773938493414420875846359054562126060762455794481186614035892021706051863945033061233991184379580556219478200155757966121832613842937722944431875100059046588723473670448006803481527981834627086055642349130254917244469014754132003347635357123155857820000494171 +Ljgn+3Hcg5DOf6usRumk7P+ZrdTBRmo968HdZU1mS7LwLW3Hii2KNkwMV7J77zA0P1pnvhMSEEeh1RbCUjLtSIbt3RIcOEoc+aO0eINF8r99l83xF57CBI3MDA3AAbtaYATy/NUXSC2h4W5kdsQuR88139MFi5y8E5njqxHu3UI= 32456338403763561215581247445990611953939298888251578685087656354454727113846722731945605696397627662593375001096230320486703167389461057538581895745078593206660798580358701927596287363374862536765135996838944212622199018632046955402325290145163082309469649329852148345837780541107029165352782710901375425858 +AMt5/u+ZUNm+Xsucr4RQPUu6ExAOq/Jbcjm/Kb2YIAaEQ1czIL82wsu6YmpHcfMaxLjY+EnaaF+eCWQPeGd1av919+QFbQPeh5DT7ZT9klK7BFyVsN0nEDJQ3AMMJqq6lm4sUeVxDVTmMypYnkzRl7jqzyCRY1MHA+o2LyMECdOg 142886089970163885609957244378225169093559131065687633458877059657380607541767850701139140472705242750285722732461954100519608059127637509286558848391554697942686619832870045594188204522385787253648018847569919409782188708374165437385572046835539379151066214153911415525465041951116179326632238059135825466272 +AMvXeHCaa+zk5VdB27KoS8XpjSUngaw7Gwlq6e2RrkEOxBhU2rGWGJ3fhq1HBNRxDf0quqfYTMd1speisaEr3cIyx9BhYwB6A+Nex/Sf9DSixezhcgEz6c5CfwUYP0QTTOiZDqzz+GcjKikjN7DKJTO0WSXMRG8qX8FBbH0rlc9l 143142496664357119491819741364830737485524654099662921673419335301323845847085335210884201567922636945282124120681371777665458057821603161276185071778040317947168899788341482064834489328957963447735297898161379277478278414388733161844053774747425459239004132791029364174047523473372650441001639174571312926565 +AMxoMXHfE2i4khsAkv/lPtLQhbWUjP3kxYmlJkpacpicBB6z/TmG5zjmTC/sqzBvBn3J4UvMzKYFyk9/l7Wnuc480500a3S4HRVtMtirPueV8v/SPktL67eN2zoj1VZA/Rex0aRGjW2CzEKGwEn3G2bZSgdT8hKv7AypF69ppjz6 143539479941314279463880342636704987025205547180882175105616955926182352311179043850344463145750154442573797875223178075233807385237935671604701513551125937539235111702655902037518920150424691586943553275517626347557879039695678271564616114192941679606063184290901862703975921261779714258077775731727612132602 +ODvOKg7l9RCn5CePG1FfMitkR5l9+7JK67eU+WeA5p1YXCcKS8GbYAKCtXPD2QfxmQcrNYfAc6Yb/kksaq29oW7MzZuTDzK0HXY5xBc/fJzEuvU51gaI0PR3cuU1qRlLqwmIlyt16gto+2E64BgPgIKJcAjx+TfH/EqNeJ77/W4= 39488587053253042573878502921384752550143716864908041972426777545317969264945056510991363961916339225192727727267483337259701961148978214005913510275048195308792987888118270387288989623193626554910652030960235845935461155296845475356011099372367616732243132816329531758943935324760665826550992788664237161838 +AKkznyQtB+PGvbVroM5nUIzhJUjiNj7q4fC9sSFbmDgvehnwPElVlie6PimH2FKonGV4GSaxZ+osil+9omfkb4rO3pq8fy5KcFSw/gs09X/U2eEEcUt/4oSbjs2NaMIxQftM2CauULiwfkWdkMFTBkHnh7Bbyocc8dtmrBDdoI8a 118817437232756222334188081193205110010964766506378146125932730686679941224328135190204402802650523704343176483564284220367074983943319572348376466341132480772885833789613392397284313483009178508647973749522358005819092779831781339778163122774381387989185969990310049504391258988402795259963134610905036263194 +AJfwWA7XnYbTjlJt+9hO/Q/OubHkUkyMYrN6Jd0cN5MG9Rg8W3i8U6oJxT18p4XozkiOgPlF1lE7hIAW9KRKJKGTue+iw0okLq5UNMu2Ha6l5/wzKi0QzRVTBnQm2zjPlQpgUorBBty5mcbt/B/Y3vOE4I3iVXklVtjQ7zIBHaNK 106695084438708194568048926154027115609888551145480521213711726807296356271397749432698558860759334362315257102647885062353922543502466463770991058956633500180245599467233361812610650830611712448187310827443315947425061886163301613989593906515923245020641415290300558869209909418659128196109640872398602216266 +aCXItk5XhuNrbrqJr1Qm04U4y4AzSKDMms11PgVcdf5fCGdizibh6/oZqx5OitM26nRz2vob8F+ZIP0CIyIJU0T1M50dVTbbpwuVNdv/XI6gHekQt0d2g34x1TQJIcsT1VWwGWTPNMtht1hezBAYxwv105AGKnqdLiz04YAdEk0= 73134927546833985031652237686088635686032103401394612286045377544136784429757461671691980910279873140130943470029643791712859175007885735170485461366406852784845528918253441791024065848540598601036357817496637108534035807393364939272891745520961269029038360205258229770737579266643408540634722493263322616397 +APNeoaWlyNa554OtHP8F7GAY5V9F7LMoF2ssg5wBmsgGFktrRH1C4FdyD0COrzIb0Vcko1/HiTnA9JXlfGKc3gTHEnO0gxBSDjK41L+EIgUfR0EhAD9iftTaCoBM7qZN3R1MYrSz3sevQZNMFOOnRrzwWEXnJaPKAZXvsqPzOIF9 170899982929163229592439208307232242235219591108657660041403142612622997092685093132858257827585941687488772925553142105567685213341947938835403410054637382864108739466539574004149772568683507025358331323655651148107044968424043673850583150424463706583215452211942132017052425497789362680979074312857823248765 +ALhwBfBYpOk1pfJcNut0C2fEAd4hhYU03/ZQBqVe/7MgpEDjro7oMvSdba5kjH/VBssmZVqpvuZ5lG+vI9lXLukhwRKJg7m67HG8lZXvjDmjU/PCjxBPNt5r8/DziETYmMa+fhaMTw4hedZcwDe37t1VPIflvM94sBKu6be9yJAn 129516480651398210587505113546142851617282590236388547627336279692965778911450075230961856270046942312918567973875005814982283590898552829322178788678196583244198944578081007477482775130405341039067711963061287597331433268366003672643052056973656674139309732186091974604170508497340243515339072325943686631463 +c9vpoiZvtnj71b8XguD67WayOF57QgOX4V4L++nG2u/RY9VT2+0tJ/C4NIawVa7ScQZAPVLuhV4J50HJX7FZgtY5n+lwMzNo0av7i0IqTS+1BBO8eNJy2wkCbWWBxNybuNnF6OK7eXdPb2Mmwm2OmhN2/j7HAr0cD7rK/Hnif7I= 81358980280155473712258342299472964374474635149963153129588784719499494479288254287754874893180126149146558961101860327826747785201363745989346818037655063262173536227595206355647880155693272153902647256175878517626925488264893732295267833614283963802283320574654949992393798458265266551024756663538388467634 +APArEXNLzDydcHrieLDReJryWxFzcsN1dxjpJIVGeJp6itsJOrUtnmXVnETtaZhWsmN3/Zh0R7TgJ253f7PZ/Z2xCEdqF0hs2MmnERSywdWZQ0a0McbDUUaDjBNYFht1wvS6djbI1b8RfayrnEZ0miYdzrrP1ntU+5cM1QBAvj6T 168651870043094856205824264282870999215855903395882323164614939540734011037112413507417141209480771157672307388419164831992909066097194364645695794831939514470650008210390333649278806163193463937050083854756730458780288720541495880958909249273048328511615821480782977316719631334570687241232556472064072892051 +RhGyx6xibf0OvY1XjnmX5na3G7emG8PWbvEa1kIjR6pK6K1MrMZnxFefXpHWInFS7ADESNI9LHjZB8VW5QrjRVPMksgdEAlkhY7MyQxaclUlShFl2AfKYBfIIro+vg7mUMzMctD+07BLk+jejRHtPVIxHmNnZrZYds80ve5z3Xw= 49204219353786910100605282012781696579642953908541693903348594981245301165936599174304121350092894937817100350990938057159324959104937469442065996667276651025661016077514839755853073999975805394464570132481314896694678249282338429544941873047382467276103868995474424700207571657816852575364781281563515280764 +AKbFfU3GL6NILVyONPVD/X0tffk5HS//7FBp7n6JKMXu3VXvWnfTl32R0WyVHk2yP0iIyi6SUusSicOH9ncO8KJHmaoMGN9Fn+Zq94FTFqZne5NxHmCtwRAbFNDVGg4FeemGXEe1S5Kk1VcvWqnp+QgY0uwa7RtT8C7/T+1pZlwq 117110890075563714812929271250884717870581483065920538069845585667296154465072587148155060755111295509684258790280104272121160614620669593483929827848744548171793187278583947500205314283462739235860439216105116687015890394925743036369717346234391524403038196640934551590543386844279091801685432977718405127210 +AJ0xZ9dfRc6P4W31bMHBymgOq+38ETEIMvMtr+wB5WTcsquZY1IUB4IVkrHaOo3W2SIr479IfJOOQhmvyRS4iB05yDI88Z/fJfXarkH53gDivECuo+5+JmV7e0S6gCvOuVamwoQjlK3G32bCV2946ry4EyIsVZ6Alk9xk7X5HfGU 110384671994603894282707302829898242894456931176497230904862171369974466400767175784681299142670706023468915238955836087425993929524341269289746060546848852729416925808186253355106621584826213979718185296723694190658548757311188764342751280681935289121682174507629679900374674992438818324999211250580434317716 +fjzmb1D+YBU5Wn1GlwhxjiJS07k+fXxjeNRbOv5SjktzxOXmautO8xZ5ACOlYrTt5G2gzW2PU6sYNfByQ0xoUSyutOuQlD2r+8MnDrxCo6RxT3P0dUSX7q0IVj+oLK4GPbscnKLfe6KqUcYLMgKnDYnc+ztFD+csL6BQnM9WMLk= 88647261832601702291191332432291274285041869480562430895152086741320122435409959711452438332192792226899741738806447713240934608106883094466050154088410020909933636902495700779087737304255058561688767369900548260278700135161077055869478387490726087630962098228537973426295306997128615315548440548541717688505 +YDg99aHkQSh9RjytWknbXzcgLD8MrWUEHF46yQLHYANKXaQYyf3yGM9TYPCDUqWbOapqQe+XfOCoACLyRg7vVDsnOPRDI9ZFUgCQBNG06ZOxzktEhnNJoRC99da8jyodFqqk2f9UD1lVa8tsQdatjUDocwgJaDAOpYEyGnUlbXo= 67567767932654827067250684965667741848878457020992905661955722020937161710030993261011062929936964216357930453809610708591260182295097124272956485574313839759737390934220465669626974544253750900911093325004172643146669082793591441922014060981070503803266774197958528843445580649512373693546027107823355522426 +ANdsfO+cNtWsbT/QJHGkYAL2WCHWVPrX6oEz78pO8lUwiigVEow5roLI5Tm7GP7XffjF95z5WDxzpoam+Bfp4za75D6ZEHQmuFnpWQAmNLUHdKUE6UcsWN1rbV1uY+x+Nr5Vni/M7PfQi1yRTTJTYav40tFPb9rY48FsUotivoxd 151275723772668372472508916060743043308364940375633847663054782759325087560768667906829087958412643723335046123025802453213225972572697773468957759328009026531148112732519692142632237595562259864125679649273054426879080697360204352423668940795473103047320116317252295126635024518179060076282921965794883439709 +D2Z8YA0G/vzEVVQ6itLPUC92r9n9FKRpf6lDPWIgpZOOfIkukPp7zzTlo9Ej5IsBrZBbtGz/eYmlHeZ8Y9pQj8HFW24HeKYqjmR0ujbNxI0QgoE+VUwPVg0HhoQsOGmq47zpXpkDwpOAZbMh/t1Bafq6r2zM0qmiwOacJ8KFUas= 10814483230552506566705634583020057064935800294861277580077052473134972003523900930560478187758928889017740705417070994563709463926267126567504805864719383185267204810142444719634360655595490833208838383875687102074846353850310954150927702228780599083427768247170427544730791038729428517279760042619935478187 +XoZpSMHqlOyPYJS7dWSRNDJHCkjbo6+DECzu0FpB9O8bftcxan/06Twbo5d1lEqPlLx3w0XeWtrmCSCaeVcXVtlY3QuPjdKPv8LBnnhslPOVcbGyflaTPXU+ITWE6rwnIF+yWQl3NIwCV4EBtCT+3U//Dt/Ebif9gzfKpKltD6U= 66377743237695515693282032069691369056215169443985727092982918806809030742478033317158686828712146024066618073633406428345129492010236994055590530566431286733776441810601990431112187030942086686719669823512292071202675269428014136307286941704297995292544712278047959299939833088742083527714893795660235870117 +QUbbkyJQ0Nru9c/nPbphM6VxHp5DWlai6407KIDbTGvUReVYI7de1gO/BFphL9GA7gDareYoMuej3/SVp8lEujXywtXzjiI+j2TzR3YYiMBAMhsJO1wU9pxy69Cj5xeFFlrOycjE9sPS9nrqnEEEFNPiK/GDDTHj0KuNbWSCLrI= 45838919357034925862751142472777409057791233610959872523563363744902783251621354580995921495295078179996083468819097423327554678806691589090814275138081407920379810144694354354954459732280968086760894209634364189264517251735804373673532012530665557440070501687207620525228416650281363557992436992284712644274 +F+uI7ARCeAlnPLO1YR7RJj8LyhtE/EJMcY45lsNMff0YeENe8KOITZVxNA55FcxDYpg9sKi1UV3/ASqkqpH8MOxWpBdT2UwSX3oBkp6ETfJKqiag0C4MS8cQVsfcKF39BJ6KUE7X6KUEj11j2YIIRREmLPyZ0LatG7dN7Rmv2iI= 16797235966984072293396362937533957334369977688369659112225970370748312376722010874726300554329794854683394163379447263409228872034356195791733533528404245739693397078461712458035888813157166614479153484688995068722288153129390850561042173295997770817893349738328312152341860704179681230323810266038959856162 +ALkEoXznA7BJlBIfA3Avl9kygQcxexEMApwduVRiXeYG0uEXMQU4rgMJBlPqs+ly8LTIcLFaLnJAG2KFQn2GXz2TNa7w4xkegkrslIJEtBWX/lc7VzRtcLbhaXEs0Ci1ValnW9Up7dYOj3Qw9eNo/9M9b1fD9TI+0QXFtp1ge728 129924120553920201168632484268654219915712271781591182777925696006023100660478316445751842982460082888615429513674356810187315558964251402722465707617058251479494744427428152566665405423424700027316505872162698141109433045594670140335040479559124757490095995568556894332243767736124299898808796118800328801724 +Ki3FNTEE870E9GaNtbT418CLSmf++s6Di3hzAy8NgiDOFo+uuicJa54V3JNRxOBc99sl/chfZuaBQt14BFOQ0i+9rm2KD82okNABd+SNfXOb0Ow2taZX8CpkVJYDyphFPyHbPIKmzwMShNx9X2z9w4++tJgzBzGcFTPv1nhAlxc= 29618953883711174042338818332957726953262658484143534778541769862244883781157097499904047532839425875312731531093860721544220959674634750905085721866390609141599426547378130082409488797303960018348798930232014390380383063108812922828160584483043190739354817699497573863286563890071313017508437166939160221463 +AJq8tcSnAq6M32ViO4hVGiHY7Tb08cLVyxpl/v0Y5adYblvjrbsFcCmsNDi5PnBOBl5awR7KZdQ1xgq6jIs+SQbccEMvJvGUZW5MgcHrXBj9XVd+8oB0z0eahqXpgYBqLDeHLU6238xR3dJYFf+Xrcrzjg8swx66OmQKkAQVJtdq 108660120968150664552423780971948386965268856900017812123107864829782135741514930439461240950044759098603910762272795612101834680870627850178371693837566833495418727543557712057554231215186486008080050486837716071537742708913279026303380104388546316647349432118287628353129105425052237438199445863950767806314 +AI3mfrgcRwtE3mA12gSoQV1xyIGy/YA4pCCvja4mTjvzQOAfiZL0efadxZH5awohCC1SpZDCFsE9yYp4LugHKu/A8zMcp4k5ena8sTPDkSod1yucjybgmVJ5h17Pru28AzHQ/YUmCnojQv55aV2+AUhxzIfojY+NT2PKRqr+vuf+ 99645829268436288676280252226747461064597487404802430565833102291706103139410465131373666856042539909746769688396958963177805479987372681967013633920910376342526433530508868114301205524789149997372160919406352823342811006288909548557622230243808373083272214426118230701324879006645047374853535922112549545982 +TmXQ+D8XFKSclXwnTIH8d+sb1IV0gfm7GagJahaFL6A9rvYaZ0NTizkG5DQ0RmXyo0wPmLork/296whsdNdUxVAwnGFlWWvMV0ftR1fOvN9KoT0WtVZ4Rmu6Fuc7q1PskAZzIp7MkOAxILO4iX5dNuVC+GLZYIbpTel3Ga8fXuU= 55052751096768041533898435453266875315629605001878362193939750978427494147944918632414581744895066623527980497732722163665712245580312596487741856071020477624754815927936394948233480228964159047139170955663289543349257377302556035170334384320502468579367401821986660515827461352578142560630318492817238744805 +EF6KIBWQiQoHOnBdJs1p+WIcAv9ILt0cnQVo+o/2niOtI0C+eFBSiNgeddhotkQFgHvGUjq8BPYgtLC8A5IFKGzXu4SYj5ziagka0hqfhVs9zVHKNx2NUoMhPDG5R7+giwEGGPOayGHVNbsBf1FBYG91+mwy8hnNbhcHSnvLGk4= 11494909948912248031301686864833544028186348338729984264372557659364976118965740281229664413031002362633393381744365783802034700038490736736266032000546393704814403638058993380993275865674190555703046732456017652317200288968188655019374159412919163798248766655991273308390043613040731449231289437754791500366 +AL7wCh8tkFe07qChFAzRkrnNehvda/Teroj65X1Bmcr14+/zeJlZDObYRYBOm8YYSYNgJekcL3o9lLFE34sCMbSJgm4dGwpEVexiLVi+zc8ndnqBDSAnRqtC+3jbInm/v8l6cUvuzrUNtzXIQ/H4FrmPMiVy0EMerkMtkfw5GBsd 134080980697158076909534078193319899756347955848461100874771253577754225619652121295523443912922220564492468474647193062555347746840044705102003079330399499915801536721237211615317000955332058281901995149084303143543150689010335818219129745452688372571010816270728441637278434982752674030696337642893239393053 +APunLhlblRi3bbRBwSV8dsw8h5SvT8ncAmXPnca+e1dLzrQZzL7P2OhFope0mW1MCDl2kJPiGTdK3SiYJVsAFeR3r/0z96g3oq+8uS66T6VaJym0QToMsqQF4/fUMaTo9HsukyPyOgjVIU+6TiFd3SxQKIu1/GpQWVQIP2pkHFKM 176716779397275986910036615967409090183531310366246043951791503601618945774743601662530806467045971394247287367421508126613573039423674729894091424105133906122821596079925540513892022311039293333114333317886304014722168786051080135090242879622144693440448171583324154550086458411590240882982297314605229953676 +MM6B5AgdJKe5OLlPzcXwi9WhqQjx5KsnBYxxa3kWdGNTdk/IN6TVd4Ptn8lWkLm78mw3DXP4Ol1sQbIfkHRoKFUN6TaWg5aDCJBDXyHSTZI2FDc1di0Te1SwziYn0sIOe+R+rfuLuHlcT1xaZBgL6+dDLAZaZza36UEjn5i/pTs= 34273208848307582992498656582721015257885595139328466874135636009184357438445251703533153492315835793684794951576799764181908090765379592683793969576893243386892292517067596035059342970830813419330530731370385186653239446376170533147020072285887964430731437765184844167400169982662183791828762458682426369339 +AJK1dx77ZA4F0sYCgRL1LKSTvjGTKBHd4QBeVnE6FKJxIow82puqtsVZ7TBxbECex+LkLQPrEbuQaVr3giUDjg0aJCE0D9ZVXCUS06qulqcCCdWgGFHXDOQzTWDn6TlJCGxtTEMbMxSlUq1q0iKZ19kwMHiT3GydBn8/G7tIYd23 103022457217861194294329435482792508957642944252832971366936865663608381648431732294396977429863681671686490913575377744795372643599438468695483808375208871881849232129651519218503507811863794426234594709451104684234156597418383183271923307418704786548452806494411689822939919114966188329657999811363991575991 +fPZNsqUYBbVGA2FAiglnByxGJOZkVSpj8Y4QNW5wq6o/1e/PRwp0TLYJXIoCJRs82pAj0QDpQbHl5lCZmNxEIQP8o8xI//HCPxPIdgBJmSfm3VGetrOpqEGU0KJJqK4IsjoVpAfPFMUMOpGNz9CSvCHGk1AKrtYvrTJEKmETuig= 87751387019308584846595931543798879607048239290774788042055795835726250309378365187899578817976976035304304847968410200168743967600896348021636654074952051821111673620467434295067182213181329543946368332581250062140819766061014427755090798550122401239987766844126425179573454145697756278292448630509686471208 +EmT6DUd0bxcdprYhAnycQaxm89kltJOlIOGFFRmEK90H3RhzBGr5PRVTJVqemFVpVliO1gy1nPHgqDGVNIE1GXhrhyFJU6m+HJeNcduippRe38xPCiuraRkXao79X7WAiVYUq6RIH+UIRnfTvHBgzTwjrOvKJ5853hYmGaanjh0= 12917015385266582065020051081997430892582163827812227349569911846746592973268746845211126663077128575098045461893559476227689488349263954564361736197688317585888118974603264677576027836032271531903881104937422976121352854003385726888601980526287956222142458858211589791399646989299770657341412683499692330525 +APtOYyWzdY1A/YU0SGrtjPdMZA5E50Y3hJVXppwuuSk04TjXzcbu2Sqp7sMnKYbToRW4nB5p2UnaLPhTRy0yszOd1auLngW+0ttCybD6nTcVoP65gYOwXGfSEQysqKLb1OfV8kYq5Ba92Efn+CcWWWuS0wEr97W5M/Hccx9bGu0r 176473215292413922394356058789571494026727424839036665031567966488209592078148711908841964690807374236235612412767651029865069639786447019874344449598703213025389428836803984245755885691094364960118900160737925054803955567361126391353868279642836569627177281508980029006921064654964339077608785831304875404587 +Vs6bjpYfFA1R/QTeCfhMuZLZ+Zxo6wxq1jFZpi5SBR1LaUwAtOAj38OJC8L7zmxSOj/RGEmJHkulI3E1MH7P7xlWbY468/azfot5fX9BgHrtptV6Q0dkBUg7H91+tcxdbm4/V0HGQGa2rZp+XK1rO+U/d0ki6iNbsCsCR+OeyvI= 60957991334776853645581868230398759578123373154273044785333939425321390401088800849629483265841435899835570419798325123273632247193463641611211088549152950252041797959644227170492417662363676228611376046334386877555777556575818860902071813120592757466883038430756577949025778080997296219236534786815367760626 +GiauT9A+wmwJsFbS2OPIM6ultIbU+kT2NgACn1jFAy+vNBahdfHMCH0jJdCs5TbmKTCeiEf3ITc5TV1OSvIejJ0GRkTf80nY47TAhiP1aehZvMAv59NQHHTDUE1U4TPVYKIyFpm1V1A+JBHKJzuGrB4lvqB2ed7k4m/ZD5lFLMM= 18363925023885496669420377869542744504974590667921570026763131637088916425434675950812384919000566852243714758512996458727914094904422651029609645299422563453163291342992902510788457007623888307499601267675322986672697397389663297565071582648674012080122614260400848960757021864980761735684874056409664531651 +AL/9KOZLtZu4+ZQYQsmOgbST8F4RV4N/Z+l8qsbCFlHdXHqTTkcN0chsccE/3KkVTZsAnAyJqogbAvB/RZqttaK5a8iKlOEoerUS92FVQw/42WhsVaFggR9cHVuvCD6QqclZjSBQKQzUMy0YWPWlycAZDIv96tooA+V+Fk0jbcFs 134819194171226950171930028888667967094069342154233489571728632904658607624703819928943642011918061760802468868660586005724399808048609316802502143143910585363214684061242274402109137825176291816945489430125510625857564490981683683589784133305376252294774711594646923226452625156299996630452243345104727556460 +AK5x2N/4+PKlsW/fNrw76CnE+nS76Rd7Ugo3IKhMTB/IuCc5xG4MQHo5MlWE0oVkZ+Gs4CxUpvD/WCCjHHFlSxKG4mC6ehz3NVLglBt+f1RWfPkF28JPd0UaIOG3um8kG4J3JDN48PXOPP86A0H8ZYbE5+ImmXsGAcwvScUQRInU 122499245103202714319465533564374494931278163571999934877854825659720649344163774228004853964635693562785966889622928722984134944784141208867445419597834322541679973956606275877526560988151196822256754309120410807075405427166696093800381410682490767468563176131997424692783482903880902119461752084196789357012 +ALZ12i0hqFhwRAikcoahYzH/BUolhgZ9Jz6adLvvTO4wk6LLOpNC/zCz+LjM7HazZomT1SqeYJ2X+WeGFLADHuWo+Gp/I3S0UEneYHKJxoU7OoOtE0mB0BCncLckHao/LmbpnQpS+Lx5bRsr0yE6oWNea6gbyRm/R0to74MI3/KK 128128022342420083856194424802390993133863171077961467523372211039771843125192435716337829530528063182315478279257832480290950255315151577221042903861075751839976362752440630888566422581799720709574650482021111126414843635330535518992034746102956214991673417580508389225948159518319625680855827280146399752842 +APXxvLifWgehdwdTRAJP5KrchRzgbUsyMWKcPGm2ZkwGDJjoTl2LIOOGVFiL4CyPBxahkEHf0nMxBN5oNGX/Y4W4PuOAC8gMgHzdLkPWkpnTcyoe5DD+fQsqNuKVw9nvyB15fx8k0d6b056nfFjnnRqgybby7MSllAWSKRYRdxVm 172707950911363219032118650562553641123743396229371815589867086054370029540557395298194067635069298952836929253340374819975848769009260895874615676938511747311585257140973518651959463416682165208985512233703837931718385346209362040743041262031997793519095342415901373534535662377972036003546589624834285049190 +O+9ohtZ9SzGLJoZM8IRQAjhc/GPt2X5G+M22ZidYjx9WgOTrZDXorSyxLuHxay6djsJSgjxYMj8MuanYSn/DzPWBB1Gn4cDmIsfeYuzO+vUJ4l6d0nIvBg9Iqs61/PGFd46YxhnDiVQ9HEznyTjzESnNqc0+/OkQVJcwNHAcZBg= 42087920806448980363073662127262313840530298932643042322138035915324224188032438119079107631420338701086802583985117830416851550991102672642532160807467909040086448764318690465254898516502941122327185894900817634110254371864896139724173087625913998657136384357741816102965779105122269429701537815263708996632 +VJOZmvqrqsIUTQSSJpZPhbQIYN2tsfBhAciWnfAYpwjK9/ts7OP4Qgdp6T/V2EsSRPnfZ0VKdLg1CnEWDhfcODo+/BZcUrJ0AviFAEtdeUhoMSWXtjel9Ln2guHY4s33z2cN70+e8gfjes65lCzrxUIXEF4nKxzKBnScoooQP5k= 59391682001673484862915842850714742391303140646889359425353339320546979084250010101273851580028171449840778038774656177449549941659895629203970455580974953864068394275066532699748911169800076515776388213090834432354601344176559839798153004796057709798368011673585434643656820656931921831615507416411999846297 +FRyJCOgPziO6RDHX1JgYGZRcSAuoQFIZM4niD/B0twK3l+TRpmVigKZAJnZZFtmX+0JQkDwQn3lcBGQIL6mgy+j0hD58U2/Wd6xebuHSzf4OHVGo1cYoqZLplszA+hVCoDVTHi2YAZ+GtfQEggumcNVxqfEZd6D9Nu//hm0t21M= 14824975573460749317081504809641216868382341402512168178334301409725840669112911061147252565570697788806398498723577368905065980113760265945344671897779830912242224090954834750057278285419880820811348943398148063418809729356397202526234113316098584002071850758705282845646489058224513019380757604894853946195 +dUk5LyS7mduFJlvh5o8R73kJIeeTh0Zli/y3XjtIXfCaNRf+wDlD/pX91JEwsQ5Mvj8yq/Uq13QyWhoNwsPpXVcJtJ+02wtIn5darsBDfzcD/LbWhl7zTRUeMjZ72gAWi1djx94SWjrZJS2oWZU92Og1yOyKRG+ua0AhHfYYh6g= 82361050315899968537319599868832189063658136463903643442673674137187842597528653416212822014359684261704550279153006971937114135373937934986951573613797195556144113400128502946618028800530164890707031379614952207482505803377774320259789692177752930767589642007257364960987343146063216186985472686575891023784 +AI6rejwEznR35rIPuIz0CP2aWyhRUR3unJ90YfxyuVYxrqOJQGSDTSf6SGDDw5MqpZXa9pWuwpyrb6smOq4ZtC3Er7lipJfXDjhy+0k1qcfMjmqbATUscwXGpgW+MO71cttccEz6vhbjndi8gvG5M/vfL2l1jA8nXuBd4e254dbz 100186164434910864539376019601151338080943067893748898987236087770762310617199833479771711726248130012472861788210345311298499515751355424063761182369333224929721733015910055321263016834247318907562652286587380604998130368845939290804442878127169587599285040969551065995197981341260363722618429042861484922611 +AJ5vLZX0fSs8dUSBqd5hki48T9cYuR0atxR+qv7cRu9nD1vP8uNVR8dLitg3XH0RARt3ZmOgi/AuggZt6tTxuIBg+9JhBY9WW+BLL5CnYWHC3AKMi7MQBWciLtmBpyF152bDaEcV1PXxtml2KxX0Ba0C+hGVDmJSdi8Kjd4AkfU6 111256341508463539324514225759801553679558662737345522765042612717818066374840372549356543720386819501973783940451033901079765311790026584654529398345993992144903839534037331533660672892487693477412528974248713261092693018326068480417183236210881306241164169849090833681510163753605662526243408192127670285626 +ZhXtSzn1GiFfHHnSKUYZiTcEWqlI8owyCKFjCQ+VEvkdk50m8uN7RCQ6ZhI545tN7Uy0WdLstJhgJETBYLHHIoWsJn07mgPxuyO0XsqNroICMQEOO/YWQFk1c0VqZifcohQAwJj7fONzM7hTcA22/7gVigJ3iLq178jZOJsEPQs= 71686982768953132894579286530164112027530221141251507987469672039995314435159469907420372652392376452531392493658576814100773556880394271726970628960571077839124343525055625420896355363707908511865700866168843075071778015504724409171911254647909938237551680861008772396291072284353858575645679153885560978699 +Vc8Cw5m5yI+bJ5sUJYm/F2wyZ5x3D4ydyL0uU/3eVF2ZJu55OOlC9pUyyv7WGExClHvWpR9mhMnsqCLyseLfM2Q/YXJ7cjGPKp2xd+fvwHa4hRi1FdOxs96rJnb+HUt9hTwQByXgzpnUfs7AqrqaNf4WSlBNMu0IOOqDdB4iVHU= 60256873326783629723455608618518793848697944184579877638436234491615392142659293975260290798403892159720925893207048153291000664050780029732557737984085196691225472664027706406879051455184548871511448456651238810812870905640934953489289909009741493031472382758586341375517766302753448531830002512912250459253 +QmeUn6cbpE8YrDfMETz/+KVFaK+d4NHHzcdj/MnjcmqQSLpP/XwCW/aeudlN3SfKd6rNo1XZefunZO/ek+PHEIy899WzjiJaajhf2X05fl9WuPEaMES3Yrr+ClogFNQ+9jL8+7L+J8lDuqQzvchT0U0RPay5HSNZw+ZouVCiQ18= 46630904037845609335515965570673490721137364238213103678233212262384415738654627185220187275286458759154841820256007930773120637898228224906635911124921895934056288121005350040349882413280772888907627838315559544636626856478316691755270725623680935763476199888127096014398699432042227882284223578563208692575 +ALUBYIShA4w5kRUa6iNF8S33DqaprdOWjVBnO+j9CCGtUh+NNwfpKR8AKf536MtuFFtwaQvRIlkLpaTYXuRxzyU/YG2+UfRQF3pEmXQhcMxJqFzqZ5nWCIWlJ/KtYS4lcC/B7hD2UGAktnIdjVUTSxX60VzA+zxeunV2iBZXQlEs 127106299687401374061881872616647348819431126560557369258073443762502337592227172639640997680536372567116568811258505773087926491911004324918919511363985868314578663758269650473780772688462266790559846182685481907703974916356209771821075179827563487466641669110315430790405454641953880582274165368514679034156 +ANyAdMnVCVjmUZGiVdyvGE5mUQpKoJOJINqMAfzVUGvvxXFmGdoAx+xsDRNAP4KoijpXk6E3yPBPBZEWyhiHnyjEkktK/gX6gnb745afS0QIlsjhKCk/W/BHXkzC862Llnc1ZGAIsERnGceEoZHdICfDUh/7nMFp5WuSMzPB7nEO 154841617115465511611746667401422322067517612306328612547616471923266281876818466022676728696273611923942543658633762267658490816264271663863494188027433799849037906883352478212451733963905925106470599843045599411842850386623187980045961158399934160107237440980574028985561404965317132715808604373199725949198 +AJ4nfhDe+HojR2YrprDHW9FVUxsZvoIekwlNL2iKFRFcTB9IcEdh6QnGcaRinev7yEYUsL6saSxUj39uWlqo8udJFdszuuQUmnloIi34L5uj0m1OpLy2dawpFQr8pqyA7go4ugMMj6XCtiVnISUcK8wjHgY3Jed/EKK8k5ce0Jxt 111059703393618496515021583605572584329116596402705082562306930876194742195701060137568030171429700588269665205795898835699633817098262654446852249498668467827435829513531633390969638488553144849154126899372953755511962841193763362947708260103832329116485114451074371844037650417731807385491783373627950406765 +AL+heSTflb2MkRYFTKghfzqlVQ1oE5vcx0eCIsy9NJ2NGFXCRRvoGDVoB8UEsUWIRnaA+MIpwDKGpbOS8kRQrvBvPe/xM/t3jrGkaS6pN064+bCBx8Y/Jq31ZXNG8oUol+y1Eo6fkUKNl4EOetmZWK8VmhVwol5YngDffj4Q8ned 134567692290185631768518572983694048149859804864902017394351513816079806629664302312927579302025923096596995134868068794900003728293470554490807959649153000914807604036531509869958441069678002226922395630284261949256022972967357884468325217602330254290548618134453007903724438628204981673400911693835033278365 +AI272d2sbYIi637kHZC+6lievgcDvT5VKaCnus3fHwm2vfao7oYu31P4st9DlqPWJ635X6QtLkU5HgvVSy66MDj2fcOfwVL09ffkZYnoGNdhMADVgOq62Ro5cCpOdw8Ko0cCyVpVIaSysPuqY7kiClf9GTdyZz/uYHDgwWeNrc4R 99528854246023003959943182132914587584844397870416002887630245681136432049666385367430032197518895755482367603560037194955739661569172773017279832774100155646116233705958563163070414171045438199561777058338188494271322834524386565519620661180246416329082614115142485663975718653564590519408413408765689056785 +AN9S8vPzo4SkyKsk07nfyD0um1riJzRqqWF9KCL+kWMHajurgPACikYzu61tL7l1mNEaIU16Ndz541o+y76DgsTLYszu4KXUOEt1Gu3eHy05Fq18zCDlNesSVjkZjPmuJr2ku+p0cP0TLLMn7/KuVOm4GlEVc6OvBNZuEzRriSYZ 156823459768092337875922818543729136404805918580285507923139232733465414368775678369646914249412830351437211620056021568154043505276475345347569200977945836210758870414054407438380975491139001471954448623922841964684437333066353208837709613982022690623722155151315252634380695513434502419141555410441456920089 +AMc5H8kywLgiT4zz5xgoI90jejsHorbqUGtBeX9wke7zyvEKyWxRKScZwzRbinjDZzN48eg/30qTZOV2Rw97JFg+EA63iZ0vqfF8jErIt3hODniKX8zayCuNmiSb5kiZL0UDU1SNh8ER4m6o5vshBKkmqs0PeozfCGQtR3bZXlx4 139899247405256530335276706333424670310599977544642091674186635734421385499036688803073040921114325725234673132788498809189814711681909865484671959982394306416477300458309408833281654917008031099378445580498219376391819745965887864647387211647794422908411100892195529730435423964537342228510107659017578765432 +AKv+3H/TruTX3wdMWnLzD05em8u/QMl6lCHT4VkK+uZwBXoLeji54Tcs/hZIhj0Bdj0URrRt+7JdGSTy4Sr986AtVFxBJZA3lT+JT4JSrq3oY1Tv+tX/yg8ZodQmbpQyyfaFg3BgeHNmsUoCrdqhj4IwBqEXoOBRIXnzaTuqqSEw 120779384043726135670909127168686589868907326577918074234323699599475436892003731971700278391108690400460261929381703781833059801757700386671579819341589048987186473249926590758009001670959004477454905417357202448886738669226760846888369186457452643053236389556969071303251275912453385963613554945645058007344 +ANXIB+HxOyJd3YYsscMpqZpi/eYjZi5q6A0MohU4BiWEJK/E4uIObLJDH5yd4ng+hn7UMhc+R/AxG88hIdOc5NyG/QyFs95ZLUC26F9rkRifu2CBkgqR5EQi2cgwC8jGxQOkC62YND6cAn/ILsKTYaH0iavtO9Tz04vQp9Ypc82H 150122383481070201614242107655752525590609186454390549085509458064289390813495886095936526832230958746095739308601699615024239939948911472291507190108935262129646691795733786714291498653838550751365834947465294261687773081563139416397262227609481906371677917295227469553787085145970923979142676551778927103367 +ZQLFoW+dJ7vrHdMlcLRGKY6T6PZKnE2L3NjXymS/55my2CDBLdDf3oXwLlRjVt9KnEiXyQzLhyY2PrFA4k3N/3P5lVDLHero5c36TMshbHgbIKRGN2CGWPEFeQ4j040IwVbQCPJeuF3jL5ikCxWZFXfeEnTL6TqumLfD9yLQfKA= 70932215714423143395949105745758445705072524008235214324766464113352968998429901322485575506330607802260244612268338586532462314021433435523464635419846126736185176246740838082062856583684393425704173881940108783636582561707441482446854068022535943408999200681879161519209676205165680598258447492092651404448 +LzzvPw0FdtM2G/RRiqoajJiIH+Lw3jpL4H+08yOpp1bNITR2Aq0beu2nP0H4o2Z1/FNr2hzuGakkAhVbmmRXc8keoOkeaAQAP/8OYxHpjrqou3WPWaKx+vUCTSqVYYf8gnVKpAAC2cD+3lW+/ZJ538o+c0ovbUKNu1u1j1OBtA0= 33171669664542509840621265032202455391098253465550501094201777336478104142847268103467889435377685359857979277521589539506627375165485879405453566052091202280471235979376217319335800766353336252760793484157724210008639813552207624049019149744883918494762511376489708611103181576211531366514802868659603747853 +APrGj1lIIlxA57DNh+bTEAFbJK2Y2P3MxLShb4fPx2aY6j88k3umoe07ISQLf9PzNPeml4/0I3w0KNd2x4s9KHbj7NsIT64lhO6eQSEteqZXZGXUYUyNzhrTbAjt+Q9LVKItQhsTkTW2HTQ5RQZfGrkL118b/I18J4P+T8CGZdDz 176100632478477421621142147788721746818712752858710594712903769452749028606541677227413333567013253138397373757811889654342173021761934591400685421771460440213093509170325205622261487145789848227404883040799927313402244625239515162996390018403365063394514244196976794479529075569412676472840544017222373593331 +Fvcl/LemWk29I5LCjU1QedTjGlkvFF/kZXNkRJv+vNZ7qgq6pX8WB9yVkk6AoclDYAhCRfKTKuEpR23iafVuHpprPfNXcqBH8n01kq3U27xqIy2hS+D6BRBK67PQaekq31EB0aOcEb/DuNaXakS9+mtTMx6BKt+WoEY+NkzHK6c= 16126868736093163702771491576570380743773057522016869811780571865928979861357811080042796140032050364543242385458140594532945509386155523162799601656485075247603490060565663264947465987286983338572455184901756399862440455644131755848583379822279676555143231305246033911608913609591095831135803702269767527335 +AKW8tvaB8YZ7J5W2lmquBniJzUhRfqFdPZPqvBoMzR4cRh1CMNdSFsYsnsaF3KolNzogdsxFpHAaEMG6zSvpNJAoi4nixCqb5SETXrSLASXvNjI9MvCoE2JCRq7kMbjPL7cem+mBPWZITGUI6KVlJPLxQngHYSFxukqlx7jznwJH 116384596458828069344020651216200368975621068920641012055593076864629080375946542748377736186556382088448816531408136815533164209947323588157210859294774679831647934533061547276394884474877353537242203645373945111105805934070657589374883764420038511061919092743520704686962593876316976299391579463759429567047 +D5N2P4FrqDf7/2Z2BJsqah4SjUtolic/yNqdNzvNEogDKZKAJyGq4zhnHvkYXkEm2ueU/FDPJRqisszG0oULdU6c7p8acirEwsGLVh4RamnFRgmQSK1vbiYB3bR+P+iFX/bZ+TWjN2Y3YMa5UB//I6Zb5kEIjmTpjY2LEPI1e6s= 10937855369372570149476727082965401421189236366492771695094788039313362971972373068736123833330006002198346944149230147444718818161877123407713821100752433128205189334393732633989950841577315682292180735057952587083688644195300641998709155269462601925653013312848413290208844194513502358901613104779186502571 +V/A1ktS0xrcwlI8xrYqvlLCFYrdVp8tEzZaZ9iNNpPH/pzVsA0WbnnUeHbdilkje+4OdoX9C4U2xaOuWOfvqLR0c7GeCkSffCqyf4ZsBmjy/BQL6rCpxMF0gIHXO5O8aJ1h17hy9LTuNzWm4zVh4pNFuHC9L6nAcf92udMiIQzk= 61752386563628388546439207444896778638632243226541303179646524864765343154194512297447627825411023405896612559648434895675553567405277169056807223959390559391191382555701580549902639604424290133917402316755076644943742815711432111554988540913643347167948778404861099845961151998728662878854088239266688156473 +APoPgEKA0/r1FYmt/Iso6ChYK6dDU62Y+vH5h/LVE00biBYG1f7aL3GdllUTN+XQSHpqlDw8CD+9xojwZIMfgpgjOwLbbe7Aso460zLrg3R8aHBpbVt8iZUgjACwPYr5UyKbFzIAWaXcnYYQ+tCO9aDIuOz+/7eIF62C81zXFJVZ 175598490446477604563905754135475294999639698464908622773037381109011373179895295130424828038708319325919451724985361900259676699137657615076219968061941008972496322083528922054390781811699677037439989404270415929836486610353098273115864435328533577114470407444852521009919911888840405368858409835197558461785 +cL54ymLJhRx3U20Y9aUTIsXy9Ags+XHy4qk3F7uJyO46eiXSL7VrrR9vTQXAbETbu1YiVWfslsPht810eUDUVaVir6yLnXkywn46Ci42FEvVoTEFjO22uYcCh8nqB8H589w/+lVSlNrcILugwfdfCvK1iZzVimOO6l3qzfXToOU= 79171550718114578361958369278761819285111811576818442980166457146638966315793211967882077899426611721874954146020093740153495693185472340728106727284441726113022873005252623222594060645383105757498856463065370975867121188445567981809371870213273555432308279508351518168027875538720367440153667708369625129189 +QdQN4qW2QZq8/fmSaqlRiPSoDbhmF0oYjaY29HcKYGHdlOH0AMJb+RUIq1aszvVtjh7AYay2TNhaZMWQ6Qi3c42SNk3A1MVknT6zqiRCGjNFfxf/matbRLbTFQF832MAId708vrFLF/o2HpekMkc5hcHB6bkUUhEI1NLcMXwGck= 46226230186280253581676626651942823886592433541360244612432763620730826574920825070086312767146345247802570752482654580909236388357139147786783758670999083804670979821212991224400629053427330483809790366665043598754931511997925850227997764381723288657884346974360232490075739442406431704368767588177525348809 +cxHvCK/dyVDvaqCCQyLeaiBGA36mV5el+1lc2eUTkHGUzX5gU0QQCEp+iSXNJhIOON8VFpKOFsziuV0Z+3cegWRw/VnxnjXcBh6IDKdupzOPB+Yl8MA1ti/GrQjLC6ikcNYNjQT0ZThL7KTqEvvZJH68WYmD0IuK26swjNGIGaI= 80804939616399473443737611589382762718815989847332356984276911837267997590368701684135326680567847542004499684038240485603420973682522792156533112356849436451918522884749244246467852622918805139990256619014116276456718693703261686778030658826952213058982142604346352178078750879100976710761147710018148637090 +AIQ3OIZevkYoRGBmsFaXJobSfLeInuKKReVYNjP5VEPoMq0mXTltY6l09/rQ3d1JjsMD1PfA7emhxex+H9t3leBIfCi6Ux34GQEjXWpQc4awuiy9tbR077HaJyecvb8Qy1FTnOHoH5C043QJzrKYT/sFXjgB60piI8Y0R/hwxO4r 92845026347218330987427785323244729176754623818531419911990153715676845614711324345879159989637824921793015074978358052562420379797956750450245721653716740651389924718711940869162230097839047895842495414221110468446944827052871968998907462191349838598297775847512250220907563815783358238473966349820476321323 +LoG6ib5lUh57rdmSkZSWzBoudytFohS4uoU/uly6OaQDOi34GeNVxu/yr6RszJyL9JWkGNgFaBIv/HirH5zA9VQAL/6kpL93a0/GQ/nuHkHy3GWZPF/2+yJ0PfazQ40fWhHZfRxBngWslbguFPjj1XaJ37YzpQAYb/+QcUai9ic= 32658152290878644668906121702816147999633088014476055330179597550087921141413344679134407016170035735846077181424615228657687216737432274043674411132745299610950657139041836412322040866250189120286839287690983293111362228893996267791120043532014262644480689231457941173330523718758287779526551822788227954215 +AKu2jgOQCCfYZ3CLkXEH44aO4TtwMPeK/eq4FtNj9HZ9FxT0LLNJh0ZXPOaPJjgznvIw5C7/hNm7rUs1JeV8I8dj3nbS3EVERQz1gc/ckYB3H1bViWREOD5+TScDusi86YO/z4ar3dauKkg5kT1kKDuU/OP5kNMWvtJjHc4Vd3L3 120581042599355202025471829872601846477331097842315143148145881424071317426176264583672725691485724160094190478865850305422057632110749683552966861219554215519032344086824849470294473808177223497912069335635933312949412445851201918768630656712413082629164792850095444166888072453190903931430551124946191872759 +ANLs7OsR7oBM5jSjVADrk+Mx9d0TeieTIkxwWiJ5STKNQmW2EzPOjgbfcLhbYEhzzDFJveXO2dzz6/c8V5oW2yqg7VMx88DzEbpQnQpk/rOQRw9jbI4fxXNJHkNZCeysEVvFfLJb4ecsGA0xJ3Aylny/jP10ahPv2z5K99edGZSU 148116916208650944522110872759145096907599612943009577897396622287067669897712748449324334650112672914917664881091633448764667172850435775162090891556266912697811031318228334453406561952979778127173704706529448647577013482442758465809198730066784986763500579667100246958959793527011919373534159474250508506260 +AL+Er3n1qj+SBsZVtOMJYg4m0CN+DE6gRnC1F7nPvd2XnBe+QE0+LKfcpUDHVNxoydW4BDzNVwnUNbyjXZ+iuddPtO9hchVEI36UiuL0ydeldFpOZ9mtHJaAF6abd0MlHw4vXRf8CbOvXb5N4s76ggijlZBjRtU563sSmBcyq6Zt 134488725667189507159811764480908602790838430340670328479145818969651133017546803581865897303917708192047926432630297993507146075655594931523561067937580218599890162311074002344315818494246433967228889645359283635389151927472221799543158424012020308449895562192866672439712148770104592027035768027605661099629 +AK/04XOBSjjPpuFXTDF82RNWnKqZz9mJQbS2B5bn0ehFnBa6j+B+MazX+AxXTL/d5+hPLT1uexcnSMl3DcGGwKipOXg7Dtuj3pfJXHTrCqXAUYrIXI+8vKVQO55yQPGfzIg9SVgetwW1sDk+a28ZhJ5a9OddqNoi5C+dLce7ZtNb 123560902006294001923570614486104726169564351074482936927091682096999779538353161007361361829586988452098646362280351148131540524964916445100589671458589346440250329883789099771417949746709217272531950438336245613419967556433467843237384555807236658182067742367748737224684334525934210197178231424396818830171 +PzOEGHlihiveoWFAALY+LOfkRJfm0NUF/uR6cSU/tbpGAq4onNpr+iZIzEP5o3JBLOtDC595/NBPI0fzaXl0vQvgJs6KG8iKANjsLKQjIpZBkoKhdbG9MzTVQuAeuDW0w3sn2iMZ/v2dgAzRwfqmQYXJr3I2BbcwWraIJuZXw5A= 44381416070253681813077725822442106641846565789204187691647505370231831464947935035197059366680327425453811558282831465960889061956588244308214943856009686127871667376028831540813257349779756631357122923723235595360268572998278795110672666089470210929411514949652537714634611421849780859192966935514197771152 +APnuduN01GS9dO2m2uCLs400AR2lX7elOnIPC5U6e17qbukxWYzNhilZlM4kdGXAIeYpzFdSIW/gxRMZe6TXq9krFWRaaPyT2QwRfGHYnazS9F1QNYmW1zXdt+qVp0JGxmh5PyDstbP8Z3x50/E8Mb0gLLPhNAvzY2Jnr9A8Q1Hy 175507868985304663005133968393406051624825489142498103948374797086106732382869120248515993626061853699363294022457032257026588816021007648668265488426495800459085474654859258116280251546902009156490112550154951965894022789029787886785376415437170872937201839249103828294508088966180386198213606090453461193202 +QHEhL4iVzNdUsfG0izTEepwTOvxka8t/9MwuF1Ey6kxsI+ry4g4sJPgR2xMnbtOmvQn2NitAkfvA8JPCiL7a8+gmf+DVRDjKDfpfrtgAVmo+3rH+uJYTrKhAp8R7ggU2xIrvbIrgeUj7ieThPI3Rtap+IdkPCL853JC/+oKtytM= 45252649968839515171157821292772647085425694172492111870169593872127007254353374581972876464918186509502070064028725519394859148593053614163356612260257013360168930649423732336969778875205250872728821432415158634190866775855521719727700464116412886964736859295086745723651735554245035077902615220578218265299 +APeaekK4mVhEShCfM0mkRebcg1Iq5CgrFIEGOoh1nHzgebr5A9Wrhm9yD1Vd3e+fFD9urDRB4y5MHPJHX1U2NFToC+H8nQkFXL8bfd/9Wl2c7y8m0Mxwi53pLIdzETLbbfeOOtJvuSYYT3n8+/PeMnJ46UD8OfqtnFuS0/bVpFLS 173873040145444066957050580959132871919216036714423404143335635770937773583761934638398867981658394368476005882852706046614562314432695052874974848076542261910660410561876043187368112065303981001507235893831108658530338308496461162623683138693880482650786841100027392293758260448606244283355655751440485602002 +FqC/wgZDPTUoObPFSH5w4QR79zj/O+ZiHGTEnsBMwNZD3Gl/ClRDIsFMDDupNLgwgXsqCQbpwSOHOtAvUuAFwRpzt5B7lwIgtP5ism/AZRno5p+9WVSmUAM3glHsNtvYydz2MkXtnXzSMIR1ZVoLrdwMnckE4pbMzggqz+JZqxw= 15889870005716350976759704672045310928616256175405784574141006779373730686049218680335525720670897894546334915362899913262232170795516176419192840427996647372619000239408311568577050460995518058850793096827271653902583271225799114408537346367483775593212272587811309978019791973449354003275559762102731778844 +AJXNbv2AMWadF5h99ZAUy5gLnVK/hMaakFo0ZedtPNRJobxPmwj+h52G+Czd0U48G0V0wpdeUJC9v/4BhjzhCvNhNsdAT1+vQXDuteYQ1aspsEKLQ6b+NknO88QSbRJw53+KeOY2xe7PKOa4V89XnFFBF7wljRnIYrM8vvcqVQDk 105194875227030598769888785590198577650278341586165110611689226597424766274486797264032300493674927704016605741286512271390703088626381669060095573361828932336327125438452066548897528158329044309005232090053420259033538936293519762277428283316506398965916381374819450858053512398634116052299066189424983605476 +AIDRnUpBHepjBqYAlU4MG/8JxzX1mPxVNHpWvnEVgvqTQx/bisFPpXrYs3jAKIR/lzevYwhH0K/8Vvw4NK9iTMFqgSnU44AZztKsoxUXsEsl1UU56UscY5C7ciKU6vjjWI7nm/uHNOXdE82TQXkk2WX8ferNqZU5DaLFCb+zxb7w 90459642084794142567976043425270153270545560059973413835786695756473295513758287577749768786155290305189883600338986370836806413936196854410098516254596146039255388020628703824195128439558127783534033672712705194483515442668075394018677699876614329419492391568463215822656901183478205197671375262145069825776 +AIdvVNzJqWPgAShvi3GhbhMQft+SLigKGrhoqas2Saz/bA9u9Td6fAxa2LjrAqshW6cnm2aalc3Yv6RW/Y8vg7Ho31NSaRjT4zMUenykcC0/Y88UNxREi85wdnHwGytms6Lq49H8/7EFGJIyL1PLRWPmZn6XFkegscI/HUq/hiKm 95105613103051650721863964216778532448106311156426028879315612217763044797186635476805213120469258258125661666950525364331551671653846368977016286153840829836509696804585927581668281228810410814602664419962214359687545209312836366693384158782798559255789953908588601637765910472073600954502095647132310971046 +DdchOPjXrI6lpV84IdKCisPmdqZan8AARXRLADEhixsfXCYuO+WhNatI/fM1vgv+/TxwwIQjIfG1vOZcB36JUfjHYdItYQ70vUXaVFdpqvoBGyfOTU50Ds/11iGPCF8mWiQwR30/XAXytqDZtaVJVWsgHD3RigBSnSHhnvZAWYg= 9719024770319024562623340689338530708271347986326272393419504304391837979619189392867902307307106771234732135400958362219711925045600118964223238147375808749507928768896918369395426933218443166133187066167663170936604731896932630589251946733237697936733924510107175304126061649311812536190882160340308613512 +I+Z6rdTOt26/v3dtUP1plITb15fjb6aMDvqFS3AD1+nxBqnnk7ISGE9j6dv762EIWQpMzcCG5NCCq35KOHEwRXP28zup6olOMt3CBFgYVcBE2pWOpGiO19G/iFweYZXZPY5HgIkex7HBbb7l6HhomPc2sLL/IRhh2oogyHx2JMM= 25210054612455888156900839678249806510561198051210010474517915819801056434402727631042894881559517808906460418029149538469607239850657781476308872923928122553395468026744382526167194202058040459679991391557937527079948356545086684521068912222036707113005006607012596093923970784177288565193670152033981048003 +ALbBoyelCs4UkfnPjMT3S67ujhBHBEE0uxLx6kSGZq2IOMU/QdWYPFElRgYC/y++334FSEycjS6NAJJo2ITpZCO5AjNJ93J3WYgbDLiwu1VzKHX6ItfFNEk45km+QTi07+pDKcKNd1k0mxqpLd/PuZd5hRpPDDoKBb6i+mrCb2yF 128335905497646745013379107761994003743181143126608677203818152878840562628631384684712779135591095534911406031545494164782375276574093777950840330452805743803067864740000758175436633463846967335728314347497013853264454015790847388463800323796888198433722196292529074568758149650782323407298620158495364705413 +ANwlxEkeqmqYTxw1ZwMi1v2wo4ntPaEYZYoTLTJQfa+kuIksnHW9va243HAiOixd+rviVdm1dEwzESBbX0wiJNtRBpP+bnRxy4xOBjNoOB0c/tfka5JVwu5eeskyHx4V3inLviUaj86Yck42n5NaJFMfBvhzVftZ/YF9WBITI8g6 154592850289860621115358362871905683265658659789986179554827712019629689749439795961607030363152337159590319622241556795951071651584979664762468782303706550885785493534656062553770262954861884613383561063525714923031691298088562054236178003658891902606245782350998076658704876516153027797371814038658244397114 diff --git a/modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/trustroot.txt b/modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/trustroot.txt new file mode 100644 index 000000000..5fe885f55 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/trustroot.txt @@ -0,0 +1,120 @@ +======================================== +Trust root parsing checking +======================================== + +---------------------------------------- +14: Does not parse +---------------------------------------- +baz.org +*.foo.com +http://*.schtuff.*/ +ftp://foo.com +ftp://*.foo.com +http://*.foo.com:80:90/ +foo.*.com +http://foo.*.com +http://www.* +http://*foo.com/ + + + +5 + +---------------------------------------- +12: Insane +---------------------------------------- +http://*/ +https://*/ +http://*.com +http://*.com/ +https://*.com/ +http://*.com.au/ +http://*.co.uk/ +http://*.foo.notatld/ +https://*.foo.notatld/ +http://*.museum/ +https://*.museum/ +http://kink.fm/should/be/sane + +---------------------------------------- +14: Sane +---------------------------------------- +http://*.schtuff.com/ +http://*.foo.schtuff.com/ +http://*.schtuff.com +http://www.schtuff.com/ +http://www.schutff.com +http://*.this.that.schtuff.com/ +http://*.foo.com/path +http://*.foo.com/path?action=foo2 +http://x.foo.com/path?action=foo2 +http://x.foo.com/path?action=%3D +http://localhost:8081/ +http://localhost:8082/?action=openid +https://foo.com/ +http://goathack.livejournal.org:8020/openid/login.bml + +======================================== +return_to matching +======================================== + +---------------------------------------- +30: matches +---------------------------------------- +http://*/ http://cnn.com/ +http://*/ http://livejournal.com/ +http://*/ http://met.museum/ +http://*:8081/ http://met.museum:8081/ +http://localhost:8081/x?action=openid http://localhost:8081/x?action=openid +http://*.foo.com http://b.foo.com +http://*.foo.com http://b.foo.com/ +http://*.foo.com/ http://b.foo.com +http://b.foo.com http://b.foo.com +http://b.foo.com http://b.foo.com/ +http://b.foo.com/ http://b.foo.com +http://*.b.foo.com http://b.foo.com +http://*.b.foo.com http://b.foo.com/ +http://*.b.foo.com/ http://b.foo.com +http://*.b.foo.com http://x.b.foo.com +http://*.b.foo.com http://w.x.b.foo.com +http://*.bar.co.uk http://www.bar.co.uk +http://*.uoregon.edu http://x.cs.uoregon.edu +http://x.com/abc http://x.com/abc +http://x.com/abc http://x.com/abc/def +http://*.x.com http://x.com/gallery +http://*.x.com http://foo.x.com/gallery +http://foo.x.com http://foo.x.com/gallery/xxx +http://*.x.com/gallery http://foo.x.com/gallery +http://localhost:8082/?action=openid http://localhost:8082/?action=openid +http://goathack.livejournal.org:8020/ http://goathack.livejournal.org:8020/openid/login.bml +https://foo.com https://foo.com +http://Foo.com http://foo.com +http://foo.com http://Foo.com +http://foo.com/?x=y http://foo.com/?x=y&a=b + +---------------------------------------- +23: does not match +---------------------------------------- +http://*/ ftp://foo.com/ +http://*/ xxx +http://*.x.com/abc http://foo.x.com +http://*.x.com/abc http://*.x.com +http://*.com/ http://*.com/ +http://x.com/abc http://x.com/ +http://x.com/abc http://x.com/a +http://x.com/abc http://x.com/ab +http://x.com/abc http://x.com/abcd +http://*.cs.uoregon.edu http://x.uoregon.edu +http://*.foo.com http://bar.com +http://*.foo.com http://www.bar.com +http://*.bar.co.uk http://xxx.co.uk +https://foo.com http://foo.com +http://foo.com https://foo.com +http://foo.com:80 http://foo.com +http://foo.com http://foo.com:80 +http://foo.com:81 http://foo.com:80 +http://*:80 http://foo.com:81 +http://foo.com/?a=b http://foo.com/?x=y +http://foo.com/?a=b http://foo.com/?x=y&a=b +http://foo.com/?a=b http://foo.com/ +http://*.oo.com/ http://foo.com/ diff --git a/modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/urinorm.txt b/modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/urinorm.txt new file mode 100644 index 000000000..95262fe2d --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Auth/OpenID/data/urinorm.txt @@ -0,0 +1,79 @@ +Already normal form +http://example.com/ +http://example.com/ + +Add a trailing slash +http://example.com +http://example.com/ + +Remove an empty port segment +http://example.com:/ +http://example.com/ + +Remove a default port segment +http://example.com:80/ +http://example.com/ + +Capitalization in host names +http://wWw.exaMPLE.COm/ +http://www.example.com/ + +Capitalization in scheme names +htTP://example.com/ +http://example.com/ + +Capitalization in percent-escaped reserved characters +http://example.com/foo%2cbar +http://example.com/foo%2Cbar + +Unescape percent-encoded unreserved characters +http://example.com/foo%2Dbar%2dbaz +http://example.com/foo-bar-baz + +remove_dot_segments example 1 +http://example.com/a/b/c/./../../g +http://example.com/a/g + +remove_dot_segments example 2 +http://example.com/mid/content=5/../6 +http://example.com/mid/6 + +remove_dot_segments: single-dot +http://example.com/a/./b +http://example.com/a/b + +remove_dot_segments: double-dot +http://example.com/a/../b +http://example.com/b + +remove_dot_segments: leading double-dot +http://example.com/../b +http://example.com/b + +remove_dot_segments: trailing single-dot +http://example.com/a/. +http://example.com/a/ + +remove_dot_segments: trailing double-dot +http://example.com/a/.. +http://example.com/ + +remove_dot_segments: trailing single-dot-slash +http://example.com/a/./ +http://example.com/a/ + +remove_dot_segments: trailing double-dot-slash +http://example.com/a/../ +http://example.com/ + +Test of all kinds of syntax-based normalization +hTTPS://a/./b/../b/%63/%7bfoo%7d +https://a/b/c/%7Bfoo%7D + +Unsupported scheme +ftp://example.com/ +fail + +Non-absolute URI +http:/foo +fail \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/Discover.php b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/Discover.php new file mode 100644 index 000000000..27a9ebc77 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/Discover.php @@ -0,0 +1,171 @@ +base_url = $base_url; + } + + function get($url, $headers = null) + { + $current_url = $url; + while (true) { + $parsed = parse_url($current_url); + $path = substr($parsed['path'], 1); + $data = generateSample($path, $this->base_url); + + if ($data === null) { + return new Services_Yadis_HTTPResponse($current_url, + 404, + array(), + ''); + } + + $response = mkResponse($data); + if (in_array($response->status, array(301, 302, 303, 307))) { + $current_url = $response->headers['location']; + } else { + $response->final_url = $current_url; + return $response; + } + } + } +} + +class MockFetcher { + function MockFetcher() { + $this->count = 0; + } + + function get($uri, $headers = null, $body = null) + { + $this->count++; + if ($this->count == 1) { + $headers = array(strtolower('X-XRDS-Location') . ': http://unittest/404'); + return new Services_Yadis_HTTPResponse($uri, 200, $headers, ''); + } else { + return new Services_Yadis_HTTPResponse($uri, 404); + } + } +} + +class TestSecondGet extends PHPUnit_TestCase { + function test_404() + { + $uri = "http://something.unittest/"; + $response = null; + $fetcher = new MockFetcher(); + $this->assertTrue( + Services_Yadis_Yadis::discover($uri, $response, $fetcher) === null); + } +} + +class _TestCase extends PHPUnit_TestCase { + var $base_url = 'http://invalid.unittest/'; + + function _TestCase($input_name, $id_name, $result_name, $success) + { + $this->input_name = $input_name; + $this->id_name = $id_name; + $this->result_name = $result_name; + $this->success = $success; + $this->fetcher = new TestFetcher($this->base_url); + parent::PHPUnit_TestCase(); + } + + function setUp() + { + list($this->input_url, $this->expected) = generateResult($this->base_url, + $this->input_name, + $this->id_name, + $this->result_name, + $this->success); + } + + function runTest() + { + if ($this->expected === null) { + $response = array(); + $this->assertTrue( + Services_Yadis_Yadis::discover($this->input_url, $response, + $this->fetcher) === null); + } else { + $response = array(); + $result = Services_Yadis_Yadis::discover($this->input_url, + $response, + $this->fetcher); + + if ($result === null) { + $this->fail("Discovery result was null"); + return; + } + + $this->assertEquals($this->input_url, $result->request_uri); + + $msg = 'Identity URL mismatch: actual = %s, expected = %s'; + $msg = sprintf($msg, $result->uri, $this->expected->uri); + $this->assertEquals($this->expected->uri, $result->uri, $msg); + + $msg = 'Content mismatch: actual = %s, expected = %s'; + $msg = sprintf($msg, $result->body, $this->expected->body); + $this->assertEquals($this->expected->body, $result->body, $msg); + + $this->assertEquals($this->expected->xrds_uri, $result->xrds_uri); + $this->assertEquals($this->expected->content_type, $result->content_type); + } + } + + function getName() + { + if ($this->input_url) { + return $this->input_url; + } else { + return $this->input_name; + } + } +} + +class Tests_Services_Yadis_Discover extends PHPUnit_TestSuite { + + function getName() + { + return "Tests_Services_Yadis_Discover"; + } + + function Tests_Services_Yadis_Discover() + { + global $testlist; + + foreach ($testlist as $test) { + list($success, $input_name, $id_name, $result_name) = $test; + $this->addTest(new _TestCase($input_name, $id_name, $result_name, $success)); + } + } +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/DiscoverData.php b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/DiscoverData.php new file mode 100644 index 000000000..5fb9865ef --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/DiscoverData.php @@ -0,0 +1,148 @@ +', $example_xrds), + array('YADIS_HEADER', 'X-XRDS-Location'), + array('NAME', $test_name)); + + foreach ($mapping as $pair) { + list($k, $v) = $pair; + $template = str_replace($k, $v, $template); + } + + return $template; +} + +function generateSample($test_name, $base_url, + $_example_xrds = null, $filename = null) +{ + global $example_xrds, $default_test_file; + + if ($_example_xrds === null) { + $_example_xrds = $example_xrds; + } + + if ($filename === null) { + $filename = $default_test_file; + } + + $template = getData($filename, $test_name); + + if ($template === null) { + return null; + } + + return fillTemplate($test_name, $template, $base_url, $_example_xrds); +} + +function generateResult($base_url, $input_name, $id_name, $result_name, $success) +{ + $input_url = $base_url . $input_name; // urlparse.urljoin(base_url, input_name) + + // If the name is null then we expect the protocol to fail, which + // we represent by null + if ($id_name === null) { + // assert result_name is null + return array($input_url, null); // DiscoveryFailure + } + + $result = generateSample($result_name, $base_url); + list($headers, $content) = explode("\n\n", $result, 2); + $header_lines = explode("\n", $headers); + $ctype = null; + foreach ($header_lines as $header_line) { + if (strpos($header_line, 'Content-Type:') === 0) { + list($temp, $ctype) = explode(":", $header_line, 2); + $ctype = trim($ctype); + break; + } + } + + $id_url = $base_url . $id_name; + + $result = new Services_Yadis_Yadis(); + $result->uri = $id_url; + if ($success) { + $result->xrds_uri = $base_url . $result_name; + } else { + $result->xrds_uri = null; + } + $result->content_type = $ctype; + $result->body = $content; + return array($input_url, $result); +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/ParseHTML.php b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/ParseHTML.php new file mode 100644 index 000000000..744af4567 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/ParseHTML.php @@ -0,0 +1,88 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +require_once 'Tests/Services/Yadis/TestUtil.php'; +require_once 'Services/Yadis/ParseHTML.php'; +require_once 'PHPUnit.php'; + +class Tests_Services_Yadis_ParseTest extends PHPUnit_TestCase { + function Tests_Services_Yadis_ParseTest($case) + { + list($result, $comment, $html) = $case; + + $this->result = $result; + $this->comment = $comment; + $this->html_string = $html; + $this->parser = new Services_Yadis_ParseHTML(); + } + + function getName() + { + return $this->comment; + } + + function runTest() + { + $value = $this->parser->getHTTPEquiv($this->html_string); + + if ($this->result == "EOF") { + $this->assertTrue($value === null); + } else if ($this->result == "None") { + $this->assertTrue($value === null); + } else { + $this->assertEquals($this->result, $value); + } + } +} + +class Tests_Services_Yadis_ParseHTML extends PHPUnit_TestSuite { + + function getName() + { + return "Tests_Services_Yadis_Parse"; + } + + function parseTests($s) + { + $tests = array(); + + $cases = preg_split("/\f\n/", $s); + + foreach ($cases as $case) { + // Split the case text on newline, and keep the first two + // lines and re-join the rest (those are the HTML). + $parts = explode("\n", $case); + $result = $parts[0]; + $html_comment = $parts[1]; + $html_string = implode("\n", array_slice($parts, 2)); + $tests[] = array($result, $html_comment, $html_string); + } + + return $tests; + } + + function Tests_Services_Yadis_ParseHTML() + { + $test_data = Tests_Services_Yadis_readdata('test1-parsehtml.txt'); + + $test_cases = $this->parseTests($test_data); + + foreach ($test_cases as $case) { + $this->addTest(new Tests_Services_Yadis_ParseTest($case)); + } + } +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/TestUtil.php b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/TestUtil.php new file mode 100644 index 000000000..e6d7a57ac --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/TestUtil.php @@ -0,0 +1,28 @@ + 1, + 'pip.xrds' => 2 + ); + + foreach ($files as $filename => $service_count) { + $xml = Tests_Services_Yadis_readdata($filename); + $xrds = Services_Yadis_XRDS::parseXRDS($xml); + + $this->assertTrue($xrds !== null); + + if ($xrds) { + $this->assertEquals(count($xrds->services()), $service_count); + } else { + $this->fail("Could not test XRDS service list because the ". + "XRDS object is null"); + } + } + } + + function test_good_multi() + { + $xml = Tests_Services_Yadis_readdata("brian.multi.xrds"); + $xrds = Services_Yadis_XRDS::parseXRDS($xml); + $this->assertTrue($xrds !== null); + $this->assertEquals(count($xrds->services()), 1); + $s = $xrds->services(); + $s = $s[0]; + + $types = $s->getTypes(); + + $this->assertTrue(count($types) == 1); + $this->assertEquals('http://openid.net/signon/1.0', + $types[0]); + } + + function test_good_uri_multi() + { + $xml = Tests_Services_Yadis_readdata("brian.multi_uri.xrds"); + $xrds = Services_Yadis_XRDS::parseXRDS($xml); + $this->assertTrue($xrds !== null); + $this->assertEquals(1, count($xrds->services())); + } + + function test_uri_sorting() + { + $xml = Tests_Services_Yadis_readdata("uri_priority.xrds"); + $xrds = Services_Yadis_XRDS::parseXRDS($xml); + $services = $xrds->services(); + $uris = $services[0]->getURIs(); + + $expected_uris = array( + "http://zero.priority/", + "http://one.priority/", + "http://no.priority/" + ); + + $this->assertEquals($uris, $expected_uris); + } + + function test_bad() + { + $this->assertTrue(Services_Yadis_XRDS::parseXRDS(null) === null); + $this->assertTrue(Services_Yadis_XRDS::parseXRDS(5) === null); + $this->assertTrue(Services_Yadis_XRDS::parseXRDS('') === null); + $this->assertTrue(Services_Yadis_XRDS::parseXRDS('') === + null); + $this->assertTrue(Services_Yadis_XRDS::parseXRDS("\x00") === null); + } + + function test_getCanonicalID() + { + $canonicalIDtests = array( + array("@ootao*test1", "delegated-20060809.xrds", + "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"), + array("@ootao*test1", "delegated-20060809-r1.xrds", + "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"), + array("@ootao*test1", "delegated-20060809-r2.xrds", + "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"), + array("@ootao*test1", "sometimesprefix.xrds", + "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"), + array("@ootao*test1", "prefixsometimes.xrds", + "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"), + array("=keturn*isDrummond", "spoof1.xrds", null), + array("=keturn*isDrummond", "spoof2.xrds", null), + array("@keturn*is*drummond", "spoof3.xrds", null), + // Don't let IRI authorities be canonical for the GCS. + array("phreak.example.com", "delegated-20060809-r2.xrds", null) + // TODO: Refs + // ("@ootao*test.ref", "ref.xrds", "@!BAE.A650.823B.2475") + ); + + foreach ($canonicalIDtests as $tupl) { + list($iname, $filename, $expectedID) = $tupl; + + $xml = Tests_Services_Yadis_readdata($filename); + $xrds = Services_Yadis_XRDS::parseXRDS($xml); + $this->_getCanonicalID($iname, $xrds, $expectedID); + } + } + + function _getCanonicalID($iname, $xrds, $expectedID) + { + if ($expectedID === null) { + $result = Services_Yadis_getCanonicalID($iname, $xrds); + if ($result !== false) { + $this->fail($iname.' (got '.$result.')'); + } + } else { + $cid = Services_Yadis_getCanonicalID($iname, $xrds); + $this->assertEquals(Services_Yadis_XRI($expectedID), $cid); + } + } + + function test_services_filters() + { + // First, just be sure that service objects do the right + // thing. + $xml = Tests_Services_Yadis_readdata("brian_priority.xrds"); + $xrds = Services_Yadis_XRDS::parseXRDS($xml, + array('openid' => + 'http://openid.net/xmlns/1.0')); + $this->assertTrue($xrds !== null); + + // Get list of service objects. + $services = $xrds->services(); + $this->assertEquals(count($services), 2, "first service count"); + + // Query the two service objecs. + $s1 = $services[0]; + $this->assertEquals($s1->getPriority(), 1, "first priority check"); + $types = $s1->getTypes(); + $this->assertEquals(count($types), 1, "first type check"); + + $s2 = $services[1]; + $this->assertEquals($s2->getPriority(), 2, "second priority check"); + $types = $s2->getTypes(); + $this->assertEquals(count($types), 1, "second type check"); + + function _DelegateFilter(&$service) + { + if ($service->getElements('openid:Delegate')) { + return true; + } + return false; + } + + // Make sure that a filter which matches both DOES match both. + $this->assertEquals(count( + $xrds->services(array("_DelegateFilter"))), 2, + "_DelegateFilter check"); + + // This filter should match all services in the document. + function _HasTypeAndURI(&$service) + { + if ($service->getTypes() && + $service->getURIs()) { + return true; + } + return false; + } + + // This filter should only match one. + function _URIMatchesSchtuff(&$service) + { + $uris = $service->getURIs(); + + foreach ($uris as $uri) { + if (preg_match("|schtuff|", $uri)) { + return true; + } + } + return false; + } + + // This filter should only match one. + function _URIMatchesMyOpenID(&$service) + { + $uris = $service->getURIs(); + + foreach ($uris as $uri) { + if (preg_match("|myopenid|", $uri)) { + return true; + } + } + return false; + } + + // Make sure a pair of filters in ALL mode only match one service. + $this->assertEquals(count( + $xrds->services(array("_HasTypeAndURI", + "_URIMatchesSchtuff"), + SERVICES_YADIS_MATCH_ALL)), 1, + "_HasTypeAndURI / _URIMatchesSchtuff check"); + + // Make sure a pair of filters in ALL mode only match one service. + $this->assertEquals(count( + $xrds->services(array("_HasTypeAndURI", + "_URIMatchesMyOpenID"), + SERVICES_YADIS_MATCH_ALL)), 1, + "_HasTypeAndURI / _URIMatchesMyOpenID check"); + + // Make sure a pair of filters in ANY mode matches both services. + $this->assertEquals(count( + $xrds->services(array("_URIMatchesMyOpenID", + "_URIMatchesSchtuff"))), 2, + "_URIMatchesMyOpenID / _URIMatchesSchtuff check"); + + // Make sure the order of the services returned (when using + // filters) is correct. + $s = $xrds->services(array("_URIMatchesMyOpenID", + "_URIMatchesSchtuff")); + + $this->assertTrue($s[0]->getPriority() === 1, "s[0] priority check"); + $this->assertTrue($s[1]->getPriority() === 2, "s[1] priority check"); + + // Make sure a bad filter mode gets us a null service list. + $this->assertTrue($xrds->services(array("_URIMatchesMyOpenID", + "_URIMatchesSchtuff"), + "bogus") === null, + "bogus filter check"); + } +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/XRI.php b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/XRI.php new file mode 100644 index 000000000..f00fef136 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/XRI.php @@ -0,0 +1,141 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +require_once "PHPUnit.php"; +require_once "Services/Yadis/XRIRes.php"; +require_once "Services/Yadis/XRI.php"; +require_once "Services/Yadis/Yadis.php"; + +class Tests_Services_Yadis_XriDiscoveryTestCase extends PHPUnit_TestCase { + function runTest() + { + $this->assertEquals( + Services_Yadis_identifierScheme('=john.smith'), 'XRI'); + + $this->assertEquals( + Services_Yadis_identifierScheme('@smiths/john'), 'XRI'); + + $this->assertEquals( + Services_Yadis_identifierScheme('smoker.myopenid.com'), 'URI'); + + $this->assertEquals( + Services_Yadis_identifierScheme('xri://=john'), 'XRI'); + } +} + +class Tests_Services_Yadis_XriEscapingTestCase extends PHPUnit_TestCase { + function test_escaping_percents() + { + $this->assertEquals(Services_Yadis_escapeForIRI('@example/abc%2Fd/ef'), + '@example/abc%252Fd/ef'); + } + + function runTest() + { + // no escapes + $this->assertEquals('@example/foo/(@bar)', + Services_Yadis_escapeForIRI('@example/foo/(@bar)')); + + // escape slashes + $this->assertEquals('@example/foo/(@bar%2Fbaz)', + Services_Yadis_escapeForIRI('@example/foo/(@bar/baz)')); + + $this->assertEquals('@example/foo/(@bar%2Fbaz)/(+a%2Fb)', + Services_Yadis_escapeForIRI('@example/foo/(@bar/baz)/(+a/b)')); + + // escape query ? and fragment + $this->assertEquals('@example/foo/(@baz%3Fp=q%23r)?i=j#k', + Services_Yadis_escapeForIRI('@example/foo/(@baz?p=q#r)?i=j#k')); + } +} + +class Tests_Services_Yadis_ProxyQueryTestCase extends PHPUnit_TestCase { + function setUp() + { + $this->proxy_url = 'http://xri.example.com/'; + $this->fetcher = Services_Yadis_Yadis::getHTTPFetcher(); + $this->proxy = new Services_Yadis_ProxyResolver($fetcher, + $this->proxy_url); + $this->servicetype = 'xri://+i-service*(+forwarding)*($v*1.0)'; + $this->servicetype_enc = 'xri%3A%2F%2F%2Bi-service%2A%28%2Bforwarding%29%2A%28%24v%2A1.0%29'; + } + + function runTest() + { + $st = $this->servicetype; + $ste = $this->servicetype_enc; + $args_esc = "_xrd_r=application%2Fxrds%2Bxml&_xrd_t=" . $ste; + $h = $this->proxy_url; + $this->assertEquals($h . '=foo?' . $args_esc, + $this->proxy->queryURL('=foo', $st)); + $this->assertEquals($h . '=foo/bar?baz&' . $args_esc, + $this->proxy->queryURL('=foo/bar?baz', $st)); + $this->assertEquals($h . '=foo/bar?baz=quux&' . $args_esc, + $this->proxy->queryURL('=foo/bar?baz=quux', $st)); + $this->assertEquals($h . '=foo/bar?mi=fa&so=la&' . $args_esc, + $this->proxy->queryURL('=foo/bar?mi=fa&so=la', $st)); + + $args_esc = "_xrd_r=application%2Fxrds%2Bxml&_xrd_t=" . $ste; + $h = $this->proxy_url; + $this->assertEquals($h . '=foo/bar??' . $args_esc, + $this->proxy->queryURL('=foo/bar?', $st)); + $this->assertEquals($h . '=foo/bar????' . $args_esc, + $this->proxy->queryURL('=foo/bar???', $st)); + } +} + +class Tests_Services_Yadis_TestGetRootAuthority extends PHPUnit_TestCase { + function runTest() + { + $xris = array( + array("@foo", "@"), + array("@foo*bar", "@"), + array("@*foo*bar", "@"), + array("@foo/bar", "@"), + array("!!990!991", "!"), + array("!1001!02", "!"), + array("=foo*bar", "="), + array("(example.com)/foo", "(example.com)"), + array("(example.com)*bar/foo", "(example.com)"), + array("baz.example.com/foo", "baz.example.com"), + array("baz.example.com:8080/foo", "baz.example.com:8080") + // Looking at the ABNF in XRI Syntax 2.0, I don't think you can + // have example.com*bar. You can do (example.com)*bar, but that + // would mean something else. + // ("example.com*bar/(=baz)", "example.com*bar"), + // ("baz.example.com!01/foo", "baz.example.com!01"), + ); + + foreach ($xris as $tupl) { + list($thexri, $expected_root) = $tupl; + $this->assertEquals(Services_Yadis_XRI($expected_root), + Services_Yadis_rootAuthority($thexri), + 'rootAuthority test ('.$thexri.')'); + } + } +} + +class Tests_Services_Yadis_XRI extends PHPUnit_TestSuite { + function getName() + { + return "Tests_Services_Yadis_XRI"; + } + + function Tests_Services_Yadis_XRI() + { + $this->addTest(new Tests_Services_Yadis_ProxyQueryTestCase()); + $this->addTest(new Tests_Services_Yadis_XriEscapingTestCase()); + $this->addTest(new Tests_Services_Yadis_XriDiscoveryTestCase()); + $this->addTest(new Tests_Services_Yadis_TestGetRootAuthority()); + } +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/Yadis.php b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/Yadis.php new file mode 100644 index 000000000..5fbfe4aad --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/Yadis.php @@ -0,0 +1,91 @@ +input_url = $input_url; + $this->redir_uri = $redir_uri; + $this->xrds_uri = $xrds_uri; + $this->num = $num; + } + + function getName() + { + return "Yadis discovery test ".$this->num; + } + + function runTest() + { + $http_response = null; + $fetcher = Services_Yadis_Yadis::getHTTPFetcher(); + $y = Services_Yadis_Yadis::discover( + $this->input_url, $http_response, $fetcher); + $this->assertTrue($y !== null); + + // Compare parts of returned Yadis object to expected URLs. + $this->assertEquals($this->redir_uri, $y->uri); + + if ($this->xrds_uri) { + $this->assertEquals($this->xrds_uri, $y->xrds_uri); + // Compare contents of actual HTTP GET with that of Yadis + // response. + $f = Services_Yadis_Yadis::getHTTPFetcher(); + $response = $f->get($this->xrds_uri); + + $this->assertEquals($response->body, $y->body); + } else { + $this->assertTrue($y->xrds_uri === null); + } + } +} + +class Tests_Services_Yadis_Yadis extends PHPUnit_TestSuite { + + function getName() + { + return "Tests_Services_Yadis_Yadis"; + } + + function parseTests($data) + { + $cases = explode("\n", $data); + $tests = array(); + + foreach ($cases as $line) { + if ($line && ($line[0] != "#")) { + $tests[] = explode("\t", $line, 3); + } + } + + return $tests; + } + + function Tests_Services_Yadis_Yadis() + { + $test_data = Tests_Services_Yadis_readdata('manifest.txt'); + + $test_cases = $this->parseTests($test_data); + + $i = 0; + foreach ($test_cases as $case) { + $i++; + list($input, $redir, $xrds) = $case; + $this->addTest(new Tests_Services_Yadis_DiscoveryTest($input, + $redir, + $xrds, $i)); + } + } + +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/README b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/README new file mode 100644 index 000000000..3739cf1c7 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/README @@ -0,0 +1,12 @@ +delegated-20060809.xrds - results from proxy.xri.net, determined by + Drummond and Kevin to be incorrect. +delegated-20060809-r1.xrds - Drummond's 1st correction +delegated-20060809-r2.xrds - Drummond's 2nd correction + +spoofs: keturn's (=!E4)'s attempts to log in with Drummond's i-number (=!D2) +spoof1.xrds +spoof2.xrds +spoof3.xrds - attempt to steal @!C0!D2 by having "at least one" CanonicalID + match the $res service ProviderID. + +ref.xrds - resolving @ootao*test.ref, which refers to a neustar XRI. diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/accept.txt b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/accept.txt new file mode 100644 index 000000000..0853321a8 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/accept.txt @@ -0,0 +1,118 @@ +# Accept: [Accept: header value from RFC2616, +# http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html] +# Available: [whitespace-separated content types] +# Expected: [Accept-header like list, containing the available content +# types with their q-values] + +Accept: */* +Available: text/plain +Expected: text/plain; q=1.0 + +Accept: */* +Available: text/plain, text/html +Expected: text/plain; q=1.0, text/html; q=1.0 + +# The order matters +Accept: */* +Available: text/html, text/plain +Expected: text/html; q=1.0, text/plain; q=1.0 + +Accept: text/*, */*; q=0.9 +Available: text/plain, image/jpeg +Expected: text/plain; q=1.0, image/jpeg; q=0.9 + +Accept: text/*, */*; q=0.9 +Available: image/jpeg, text/plain +Expected: text/plain; q=1.0, image/jpeg; q=0.9 + +# wildcard subtypes still reject differing main types +Accept: text/* +Available: image/jpeg, text/plain +Expected: text/plain; q=1.0 + +Accept: text/html +Available: text/html +Expected: text/html; q=1.0 + +Accept: text/html, text/* +Available: text/html +Expected: text/html; q=1.0 + +Accept: text/html, text/* +Available: text/plain, text/html +Expected: text/plain; q=1.0, text/html; q=1.0 + +Accept: text/html, text/*; q=0.9 +Available: text/plain, text/html +Expected: text/html; q=1.0, text/plain; q=0.9 + +# If a more specific type has a higher q-value, then the higher value wins +Accept: text/*; q=0.9, text/html +Available: text/plain, text/html +Expected: text/html; q=1.0, text/plain; q=0.9 + +Accept: */*, text/*; q=0.9, text/html; q=0.1 +Available: text/plain, text/html, image/monkeys +Expected: image/monkeys; q=1.0, text/plain; q=0.9, text/html; q=0.1 + +Accept: text/*, text/html; q=0 +Available: text/html +Expected: + +Accept: text/*, text/html; q=0 +Available: text/html, text/plain +Expected: text/plain; q=1.0 + +Accept: text/html +Available: text/plain +Expected: + +Accept: application/xrds+xml, text/html; q=0.9 +Available: application/xrds+xml, text/html +Expected: application/xrds+xml; q=1.0, text/html; q=0.9 + +Accept: application/xrds+xml, */*; q=0.9 +Available: application/xrds+xml, text/html +Expected: application/xrds+xml; q=1.0, text/html; q=0.9 + +Accept: application/xrds+xml, application/xhtml+xml; q=0.9, text/html; q=0.8, text/xml; q=0.7 +Available: application/xrds+xml, text/html +Expected: application/xrds+xml; q=1.0, text/html; q=0.8 + +# See http://www.rfc-editor.org/rfc/rfc3023.txt, section A.13 +Accept: application/xrds +Available: application/xrds+xml +Expected: + +Accept: application/xrds+xml +Available: application/xrds +Expected: + +Accept: application/xml +Available: application/xrds+xml +Expected: + +Available: application/xrds+xml +Accept: application/xml +Expected: + + + +################################################# +# The tests below this line are documentation of how this library +# works. If the implementation changes, it's acceptable to change the +# test to reflect that. These are specified so that we can make sure +# that the current implementation actually works the way that we +# expect it to given these inputs. + +Accept: text/html;level=1 +Available: text/html +Expected: text/html; q=1.0 + +Accept: text/html; level=1, text/html; level=9; q=0.1 +Available: text/html +Expected: text/html; q=1.0 + +Accept: text/html; level=9; q=0.1, text/html; level=1 +Available: text/html +Expected: text/html; q=1.0 diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian.multi.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian.multi.xrds new file mode 100644 index 000000000..1bc95dea9 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian.multi.xrds @@ -0,0 +1,38 @@ + + + + + + http://openid.net/signon/1.1 + http://www.myopenid.com/server + http://frank.myopenid.com/ + + + + + + + http://bar.com/ + http://bar.com/server + + + + http://foo.com + http://foo.com/server + + + + + + + http://openid.net/signon/1.0 + http://www.myopenid.com/server + http://brian.myopenid.com/ + + + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian.multi_uri.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian.multi_uri.xrds new file mode 100644 index 000000000..fce5ef72f --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian.multi_uri.xrds @@ -0,0 +1,16 @@ + + + + + + http://openid.net/signon/1.0 + http://www.myopenid.com/server + http://example.com/server + + + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian.xrds new file mode 100644 index 000000000..c7539fe1b --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian.xrds @@ -0,0 +1,16 @@ + + + + + + http://openid.net/signon/1.0 + http://www.myopenid.com/server + http://brian.myopenid.com/ + + + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian_priority.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian_priority.xrds new file mode 100644 index 000000000..273077dfa --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/brian_priority.xrds @@ -0,0 +1,22 @@ + + + + + + http://openid.net/signon/1.0 + http://www.schtuff.com/?action=openid_server + http://users.schtuff.com/brian + + + + http://openid.net/signon/1.0 + http://www.myopenid.com/server + http://brian.myopenid.com/ + + + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/delegated-20060809-r1.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/delegated-20060809-r1.xrds new file mode 100644 index 000000000..f994b140e --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/delegated-20060809-r1.xrds @@ -0,0 +1,34 @@ + + + + *ootao + + 2006-08-09T22:07:13.000Z + xri://@ + !5BAD.2AA.3C72.AF46 + @!5BAD.2AA.3C72.AF46 + + xri://$res*auth*($v*2.0) + xri://!!1003 + application/xrds+xml;trust=none + http://resolve.ezibroker.net/resolve/@ootao/ + + + http://openid.net/signon/1.0 + + https://linksafe.ezibroker.net/server/ + + + + *test1 + SUCCESS + xri://!!1003 + !0000.0000.3B9A.CA01 + @!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01 + + http://openid.net/signon/1.0 + + https://linksafe.ezibroker.net/server/ + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/delegated-20060809-r2.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/delegated-20060809-r2.xrds new file mode 100644 index 000000000..68c08dc44 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/delegated-20060809-r2.xrds @@ -0,0 +1,34 @@ + + + + *ootao + + 2006-08-09T22:07:13.000Z + xri://@ + !5BAD.2AA.3C72.AF46 + @!5BAD.2AA.3C72.AF46 + + xri://$res*auth*($v*2.0) + xri://@!5BAD.2AA.3C72.AF46 + application/xrds+xml;trust=none + http://resolve.ezibroker.net/resolve/@ootao/ + + + http://openid.net/signon/1.0 + + https://linksafe.ezibroker.net/server/ + + + + *test1 + SUCCESS + xri://@!5BAD.2AA.3C72.AF46 + !0000.0000.3B9A.CA01 + @!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01 + + http://openid.net/signon/1.0 + + https://linksafe.ezibroker.net/server/ + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/delegated-20060809.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/delegated-20060809.xrds new file mode 100644 index 000000000..073ee6889 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/delegated-20060809.xrds @@ -0,0 +1,34 @@ + + + + *ootao + + 2006-08-09T22:07:13.000Z + xri://@ + !5BAD.2AA.3C72.AF46 + @!5BAD.2AA.3C72.AF46 + + xri://$res*auth*($v*2.0) + + application/xrds+xml;trust=none + http://resolve.ezibroker.net/resolve/@ootao/ + + + http://openid.net/signon/1.0 + + https://linksafe.ezibroker.net/server/ + + + + *test1 + SUCCESS + xri://!!1003 + !0000.0000.3B9A.CA01 + @!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01 + + http://openid.net/signon/1.0 + + https://linksafe.ezibroker.net/server/ + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/example-xrds.xml b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/example-xrds.xml new file mode 100644 index 000000000..101ba3bd5 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/example-xrds.xml @@ -0,0 +1,14 @@ + + + + + + + http://example.com/ + http://www.openidenabled.com/ + + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/manifest.txt b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/manifest.txt new file mode 100644 index 000000000..2f05d5e6c --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/manifest.txt @@ -0,0 +1,30 @@ +# This file contains test cases for doing YADIS identity URL and +# service discovery. For each case, there are three URLs. The first +# URL is the user input. The second is the identity URL and the third +# is the URL from which the XRDS document should be read. +# +# The file format is as follows: +# User URL Identity URL XRDS URL +# +# blank lines and lines starting with # should be ignored. +# +# To use this test: +# +# 1. Run your discovery routine on the User URL. +# +# 2. Compare the identity URL returned by the discovery routine to the +# identity URL on that line of the file. It must be an EXACT match. +# +# 3. Do a regular HTTP GET on the XRDS URL. Compare the content that +# was returned by your discovery routine with the content returned +# from that URL. It should also be an exact match. + +http://www.openidenabled.com/resources/yadis-test/discover/equiv http://www.openidenabled.com/resources/yadis-test/discover/equiv http://www.openidenabled.com/resources/yadis-test/discover/xrds +http://www.openidenabled.com/resources/yadis-test/discover/header http://www.openidenabled.com/resources/yadis-test/discover/header http://www.openidenabled.com/resources/yadis-test/discover/xrds +http://www.openidenabled.com/resources/yadis-test/discover/xrds http://www.openidenabled.com/resources/yadis-test/discover/xrds http://www.openidenabled.com/resources/yadis-test/discover/xrds +http://www.openidenabled.com/resources/yadis-test/discover/xrds_html http://www.openidenabled.com/resources/yadis-test/discover/xrds_html +http://www.openidenabled.com/resources/yadis-test/discover/redir_equiv http://www.openidenabled.com/resources/yadis-test/discover/equiv http://www.openidenabled.com/resources/yadis-test/discover/xrds +http://www.openidenabled.com/resources/yadis-test/discover/redir_header http://www.openidenabled.com/resources/yadis-test/discover/header http://www.openidenabled.com/resources/yadis-test/discover/xrds +http://www.openidenabled.com/resources/yadis-test/discover/redir_xrds http://www.openidenabled.com/resources/yadis-test/discover/xrds http://www.openidenabled.com/resources/yadis-test/discover/xrds +http://www.openidenabled.com/resources/yadis-test/discover/redir_xrds_html http://www.openidenabled.com/resources/yadis-test/discover/xrds_html +http://www.openidenabled.com/resources/yadis-test/discover/redir_redir_equiv http://www.openidenabled.com/resources/yadis-test/discover/equiv http://www.openidenabled.com/resources/yadis-test/discover/xrds diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/no-xrd.xml b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/no-xrd.xml new file mode 100644 index 000000000..ca66f7359 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/no-xrd.xml @@ -0,0 +1,7 @@ + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/not-xrds.xml b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/not-xrds.xml new file mode 100644 index 000000000..7f5bfd511 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/not-xrds.xml @@ -0,0 +1,2 @@ + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/pip.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/pip.xrds new file mode 100644 index 000000000..ca271ab19 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/pip.xrds @@ -0,0 +1,22 @@ + + + + + + http://openid.net/signon/1.1 + http://openid.net/sreg/1.0 + https://pip.verisignlabs.com/server + + + + http://openid.net/signon/1.0 + http://openid.net/sreg/1.0 + https://pip.verisignlabs.com/server + + + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/prefixsometimes.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/prefixsometimes.xrds new file mode 100644 index 000000000..5522a6e5e --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/prefixsometimes.xrds @@ -0,0 +1,34 @@ + + + + *ootao + + 2006-08-09T22:07:13.000Z + xri://@ + !5BAD.2AA.3C72.AF46 + @!5BAD.2AA.3C72.AF46 + + xri://$res*auth*($v*2.0) + xri://@!5BAD.2AA.3C72.AF46 + application/xrds+xml;trust=none + http://resolve.ezibroker.net/resolve/@ootao/ + + + http://openid.net/signon/1.0 + + https://linksafe.ezibroker.net/server/ + + + + *test1 + SUCCESS + xri://@!5BAD.2AA.3C72.AF46 + !0000.0000.3B9A.CA01 + xri://@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01 + + http://openid.net/signon/1.0 + + https://linksafe.ezibroker.net/server/ + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/ref.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/ref.xrds new file mode 100644 index 000000000..69cf683db --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/ref.xrds @@ -0,0 +1,109 @@ + + + + *ootao + + 2006-08-15T18:56:09.000Z + xri://@ + !5BAD.2AA.3C72.AF46 + @!5BAD.2AA.3C72.AF46 + + xri://$res*auth*($v*2.0) + + application/xrds+xml;trust=none + http://resolve.ezibroker.net/resolve/@ootao/ + + + http://openid.net/signon/1.0 + + https://linksafe.ezibroker.net/server/ + + + + *test.ref + SUCCESS + xri://!!1003 + !0000.0000.3B9A.CA03 + @!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA03 + @!BAE.A650.823B.2475 + + http://openid.net/signon/1.0 + + https://linksafe.ezibroker.net/server/ + + + + + !BAE.A650.823B.2475 + + 2006-08-15T18:56:10.000Z + xri://@ + !BAE.A650.823B.2475 + @!BAE.A650.823B.2475 + + (+wdnc) + + (+wdnc) + http://www.tcpacompliance.us + + + xri://$res*auth*($v*2.0) + + application/xrds+xml;trust=none + http://dev.dready.org/cgi-bin/xri + + + (+i-name) + + (+i-name) + http://www.inames.net + + + xri://+i-service*(+contact)*($v*1.0) + + xri://!!1001 + (+contact) + + text/html + + http://www.neustar.biz + + + + + !BAE.A650.823B.2475 + + 2006-08-15T18:56:10.000Z + xri://@ + !BAE.A650.823B.2475 + @!BAE.A650.823B.2475 + + (+wdnc) + + (+wdnc) + http://www.tcpacompliance.us + + + xri://$res*auth*($v*2.0) + + application/xrds+xml;trust=none + http://dev.dready.org/cgi-bin/xri + + + (+i-name) + + (+i-name) + http://www.inames.net + + + xri://+i-service*(+contact)*($v*1.0) + + xri://!!1001 + (+contact) + + text/html + + http://www.neustar.biz + + + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/sometimesprefix.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/sometimesprefix.xrds new file mode 100644 index 000000000..eff755543 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/sometimesprefix.xrds @@ -0,0 +1,34 @@ + + + + *ootao + + 2006-08-09T22:07:13.000Z + xri://@ + !5BAD.2AA.3C72.AF46 + xri://@!5BAD.2AA.3C72.AF46 + + xri://$res*auth*($v*2.0) + xri://@!5BAD.2AA.3C72.AF46 + application/xrds+xml;trust=none + http://resolve.ezibroker.net/resolve/@ootao/ + + + http://openid.net/signon/1.0 + + https://linksafe.ezibroker.net/server/ + + + + *test1 + SUCCESS + xri://@!5BAD.2AA.3C72.AF46 + !0000.0000.3B9A.CA01 + @!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01 + + http://openid.net/signon/1.0 + + https://linksafe.ezibroker.net/server/ + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/spoof1.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/spoof1.xrds new file mode 100644 index 000000000..8e870c815 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/spoof1.xrds @@ -0,0 +1,25 @@ + + + + *keturn + xri://= + !E4 + =!E4 + + + xri://$res*auth*($v*2.0) + http://keturn.example.com/resolve/ + =!E4 + + + + *isDrummond + =!E4 + !D2 + =!D2 + + http://openid.net/signon/1.0 + http://keturn.example.com/openid + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/spoof2.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/spoof2.xrds new file mode 100644 index 000000000..7547561e1 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/spoof2.xrds @@ -0,0 +1,25 @@ + + + + *keturn + xri://= + !E4 + =!E4 + + + xri://$res*auth*($v*2.0) + http://keturn.example.com/resolve/ + xri://= + + + + *isDrummond + xri://= + !D2 + =!D2 + + http://openid.net/signon/1.0 + http://keturn.example.com/openid + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/spoof3.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/spoof3.xrds new file mode 100644 index 000000000..f4c43c9b4 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/spoof3.xrds @@ -0,0 +1,37 @@ + + + + *keturn + xri://@ + @E4 + @!E4 + + + xri://$res*auth*($v*2.0) + http://keturn.example.com/resolve/ + @!E4 + + + + *is + @!E4 + !D2 + =!C0 + =!E4!01 + + xri://$res*auth*($v*2.0) + http://keturn.example.com/resolve/ + @!C0 + + + + *drummond + @!C0 + !D2 + @!C0!D2 + + http://openid.net/signon/1.0 + http://keturn.example.com/openid + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/test1-discover.txt b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/test1-discover.txt new file mode 100644 index 000000000..7ec9b8788 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/test1-discover.txt @@ -0,0 +1,137 @@ +equiv +Status: 200 OK +Content-Type: text/html + + + + +Joe Schmoe's Homepage + + +

Joe Schmoe's Homepage

+

Blah blah blah blah blah blah blah

+ + + +header +Status: 200 OK +Content-Type: text/html +YADIS_HEADER: URL_BASE/xrds + + + +Joe Schmoe's Homepage + + +

Joe Schmoe's Homepage

+

Blah blah blah blah blah blah blah

+ + +xrds +Status: 200 OK +Content-Type: application/xrds+xml + + + +xrds_ctparam +Status: 200 OK +Content-Type: application/xrds+xml; charset=UTF8 + + + +xrds_ctcase +Status: 200 OK +Content-Type: appliCATION/XRDS+xml + + + +xrds_html +Status: 200 OK +Content-Type: text/html + + + +redir_equiv +Status: 302 Found +Content-Type: text/plain +Location: URL_BASE/equiv + +You are presently being redirected. + +redir_header +Status: 302 Found +Content-Type: text/plain +Location: URL_BASE/header + +You are presently being redirected. + +redir_xrds +Status: 302 Found +Content-Type: application/xrds+xml +Location: URL_BASE/xrds + + + +redir_xrds_html +Status: 302 Found +Content-Type: text/plain +Location: URL_BASE/xrds_html + +You are presently being redirected. + +redir_redir_equiv +Status: 302 Found +Content-Type: text/plain +Location: URL_BASE/redir_equiv + +You are presently being redirected. + +lowercase_header +Status: 200 OK +Content-Type: text/html +x-xrds-location: URL_BASE/xrds + + + +Joe Schmoe's Homepage + + +

Joe Schmoe's Homepage

+

Blah blah blah blah blah blah blah

+ + +404_server_response +Status: 404 Not Found + +EEk! + +500_server_response +Status: 500 Server error + +EEk! + +201_server_response +Status: 201 Created + +EEk! + +404_with_header +Status: 404 Not Found +YADIS_HEADER: URL_BASE/xrds + +EEk! + +404_with_meta +Status: 404 Not Found +Content-Type: text/html + + + + +Joe Schmoe's Homepage + + +

Joe Schmoe's Homepage

+

Blah blah blah blah blah blah blah

+ + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/test1-parsehtml.txt b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/test1-parsehtml.txt new file mode 100644 index 000000000..b005c253c --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/test1-parsehtml.txt @@ -0,0 +1,133 @@ +found + + + +found + + + +found + + + +found + + + +found + + + +found + + + +found + + + + + +& + + + +found + + + + + + + +found + + + + + + + +/ + + + + + + + + + + + +EOF + + +None + + + + A boring document + + +

A boring document

+

There's really nothing interesting about this

+ + + +EOF + + + +EOF + + + +None + + + +None + + + +None + + + +None + + + + + + + +None + + + + Someone's blog + + +

My blog

+

This is my blog

+

Comments

+

+ + + +None + + + + +None + + + + +None + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/test1-xrd.xml b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/test1-xrd.xml new file mode 100644 index 000000000..60e5ca7b1 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/test1-xrd.xml @@ -0,0 +1,39 @@ + + + + + + http://openid.net/signon/1.0 + http://www.myopenid.com/server + http://josh.myopenid.com/ + + + + http://lid.netmesh.org/sso/2.0b5 + http://lid.netmesh.org/2.0b5 + http://mylid.net/josh + + + + http://openid.net/signon/1.0 + http://www.livejournal.com/openid/server.bml + http://www.livejournal.com/users/nedthealpaca/ + + + + http://typekey.com/services/1.0 + joshhoyt + + + + http://openid.net/signon/1.0 + http://www.schtuff.com/openid + http://users.schtuff.com/josh + + + + diff --git a/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/uri_priority.xrds b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/uri_priority.xrds new file mode 100644 index 000000000..b1a2f65c3 --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/Services/Yadis/data/uri_priority.xrds @@ -0,0 +1,16 @@ + + + + + + http://openid.net/signon/1.0 + http://no.priority/ + http://one.priority/ + http://zero.priority/ + + + + diff --git a/modules/member/php-openid-1.2.3/Tests/TestDriver.php b/modules/member/php-openid-1.2.3/Tests/TestDriver.php new file mode 100644 index 000000000..621773b2d --- /dev/null +++ b/modules/member/php-openid-1.2.3/Tests/TestDriver.php @@ -0,0 +1,189 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +require_once 'PHPUnit.php'; +require_once 'PHPUnit/GUI/HTML.php'; + +error_reporting(E_ALL); + +$__test_errors = array(); + +function __handler($code, $message) +{ + global $__test_errors; + + if ($code == E_USER_WARNING) { + $__test_errors[] = $message; + } +} + +function __raiseError($message) +{ + set_error_handler('__handler'); + trigger_error($message, E_USER_WARNING); + restore_error_handler(); +} + +function __getError() +{ + global $__test_errors; + if ($__test_errors) { + return array_pop($__test_errors); + } + return null; +} + +/** + * Load the tests that are defined in the named modules. + * + * If you have Tests/Foo.php which defines a test class called + * Tests_Foo, the call would look like: + * + * loadTests('Tests/', array('Foo')) + * + * @param string $test_dir The root of the test hierarchy. Must end + * with a / + * + * @param array $test_names The names of the modules in which the + * tests are defined. This should not include the root of the test + * hierarchy. + */ +function loadTests($test_dir, $test_names) +{ + $suites = array(); + + foreach ($test_names as $filename) { + $filename = $test_dir . $filename . '.php'; + $class_name = str_replace('/', '_', $filename); + $class_name = basename($class_name, '.php'); + if (!global_require_once($filename)) { + continue; + } + $test = new $class_name($class_name); + + if (is_a($test, 'PHPUnit_TestCase')) { + $s = new PHPUnit_TestSuite(); + $s->setName($class_name); + $s->addTestSuite($class_name); + $test = $s; + + $tc_array_name = $class_name . '_other'; + if (array_key_exists($tc_array_name, $GLOBALS) && + is_array($GLOBALS[$tc_array_name])) { + foreach ($GLOBALS[$tc_array_name] as $tc) { + $test->addTestSuite(get_class($tc)); + } + } + } + + $suites[] = $test; + } + + return $suites; +} + +function global_require_once($name) +{ + $f = @include_once $name; + if (!$f) { + return false; + } + foreach (get_defined_vars() as $k => $v) { + if (!in_array($k, array('name', 'GLOBALS'))) { + $GLOBALS[$k] = $v; + } + } + return true; +} + +$_tests = array( + array( + 'dir' => 'Tests/Auth/OpenID/', + 'files' => array( + 'Association', + 'BigMath', + 'Consumer', + 'CryptUtil', + 'DiffieHellman', + 'HMACSHA1', + 'KVForm', + 'Util', + 'Parse', + 'StoreTest', + 'Server', + 'TrustRoot', + 'Discover', + 'OpenID_Yadis', + 'URINorm'), + ), + array( + 'dir' => 'Tests/Services/Yadis/', + 'files' => array( + 'ParseHTML', + 'XRDS', + 'Yadis', + 'Discover', + 'XRI' + ) + ) + ); + +function selectTests($names) +{ + global $_tests; + $lnames = array_map('strtolower', $names); + $include = array(); + $exclude = array(); + foreach ($_tests as $package) { + foreach ($package['files'] as $t) { + $l = strtolower($t); + if (in_array($l, $lnames)) { + $include[] = $t; + } + + if (in_array("/$l", $lnames)) { + $exclude[] = $t; + } + } + } + + if (!count($include)) { + $include = array(); + foreach ($_tests as $package) { + $include = array_merge($include, $package['files']); + } + } + + return array_diff($include, $exclude); +} + +// Load OpenID library tests +function loadSuite($names=null) +{ + global $_tests; + if ($names === null) { + $names = array(); + foreach ($_tests as $package) { + $names = array_merge($names, $package['files']); + } + } + $selected = selectTests($names); + $result = array(); + foreach ($_tests as $package) { + $result = array_merge($result, loadTests($package['dir'], $selected)); + } + return $result; +} +?> diff --git a/modules/member/php-openid-1.2.3/admin/adminutil.php b/modules/member/php-openid-1.2.3/admin/adminutil.php new file mode 100644 index 000000000..738983866 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/adminutil.php @@ -0,0 +1,30 @@ + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/admin/brace_style.pl b/modules/member/php-openid-1.2.3/admin/brace_style.pl new file mode 100644 index 000000000..ed8332f31 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/brace_style.pl @@ -0,0 +1,81 @@ +#!/usr/bin/env perl -w + +use strict; + +my $filename = $ARGV[0]; + +if (!$filename) { + print "Usage: modified_otb.pl \n"; + exit(1); +} + +my @results = (); +my $line_num = 0; +my ($NONE, $BRACE, $PAREN) = (0, 1, 2); +my $looking_for = $NONE; +my $last_func_name = ""; + +open(HANDLE, "<", $filename) or die "Cannot open $filename\n"; + +# Read the file and track the lines with length > $max_length. +while () { + $line_num++; + # Subtract one because the newline doesn't count toward the + # length. + chomp; + + if (!$looking_for && + ($_ =~ /^\s*function/) && + ($_ =~ /\{/)) { + # Done (bad): we found a function whose opening line ends with + # a brace, which goes against the PEAR coding guidelines. + + ($last_func_name) = $_ =~ /function\s*(.*)\(/; + + push @results, "'$last_func_name' prototype ends with opening ". + "brace, line $line_num"; + } elsif (!$looking_for && + ($_ =~ /^\s*function/) && + ($_ !~ /\)/)) { + ($last_func_name) = $_ =~ /function\s*(.*)\(/; + $looking_for = $PAREN; + } elsif (($looking_for == $PAREN) && + ($_ =~ /\)/) && + ($_ =~ /\{/)) { + # Done (bad): function prototype and brace are on the same + # line. + push @results, "'$last_func_name' prototype ends with with ". + "opening brace, line $line_num"; + $looking_for = $NONE; + } elsif (($looking_for == $PAREN) && + ($_ =~ /\)/) && + ($_ !~ /\{/)) { + $looking_for = $BRACE; + } elsif (!$looking_for && + ($_ =~ /^\s*function/) && + ($_ =~ /\)/) && + ($_ !~ /\{/)) { + ($last_func_name) = $_ =~ /function\s*(.*)\(/; + $looking_for = $BRACE; + } elsif (($looking_for == $BRACE) && + ($_ eq "{")) { + $looking_for = $NONE; + # Done (good): the brace was found on the line after the + # function prototype. + } else { + # We got here because we got a line that we're not interested + # in. + $looking_for = $NONE; + } +} + +# If any long lines were found, notify and exit(1); otherwise, +# exit(0). +if (@results) { + foreach my $result (@results) { + print "$filename: $result\n"; + } + exit(1); +} else { + exit(0); +} diff --git a/modules/member/php-openid-1.2.3/admin/checkimport b/modules/member/php-openid-1.2.3/admin/checkimport new file mode 100644 index 000000000..05776d8f4 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/checkimport @@ -0,0 +1,4 @@ +#!/usr/bin/env php + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/admin/checkimports b/modules/member/php-openid-1.2.3/admin/checkimports new file mode 100644 index 000000000..c4fa471a6 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/checkimports @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +./admin/findphp | xargs -L 1 ./admin/checkimport \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/admin/darcs-ignore b/modules/member/php-openid-1.2.3/admin/darcs-ignore new file mode 100644 index 000000000..8291ce2e0 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/darcs-ignore @@ -0,0 +1,3 @@ +~$ +^doc(/|$) +^CHANGELOG$ diff --git a/modules/member/php-openid-1.2.3/admin/docblocks b/modules/member/php-openid-1.2.3/admin/docblocks new file mode 100644 index 000000000..6764ff145 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/docblocks @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +#set -e + +bad_files=$(./admin/findphp | xargs -l1 /usr/bin/env perl admin/docblocks.pl) + +if [ "$bad_files" ] + then + cat <&2 +These files do not start with docblocks: + +$bad_files + +EOF + exit 1 +fi diff --git a/modules/member/php-openid-1.2.3/admin/docblocks.pl b/modules/member/php-openid-1.2.3/admin/docblocks.pl new file mode 100644 index 000000000..0483dbb06 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/docblocks.pl @@ -0,0 +1,26 @@ +#!/usr/bin/env perl -w + +use strict; + +my $filename = $ARGV[0]; + +if (!$filename) { + print "Usage: docblocks.pl \n"; + exit(1); +} + +my %allowed = ("" => 1, + " 1); + +open(HANDLE, "<", $filename) or die "Cannot open $filename\n"; + +while () { + chomp; + + if ($_ =~ /\/\*\*/) { + exit(0); + } elsif (!$allowed{$_}) { + print $filename."\n"; + exit(1); + } +} diff --git a/modules/member/php-openid-1.2.3/admin/findglobals b/modules/member/php-openid-1.2.3/admin/findglobals new file mode 100644 index 000000000..2fcb0e61e --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/findglobals @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +# Find all PHP modules that are likely to have global variables +set -e + +./admin/findphp | xargs grep '^\$' diff --git a/modules/member/php-openid-1.2.3/admin/findphp b/modules/member/php-openid-1.2.3/admin/findphp new file mode 100644 index 000000000..d529af716 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/findphp @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +find Auth Tests \ + -name _darcs -prune -o \ + \( -type f \ + -a -name \*.php \ + -a ! -name .\* \ + \) | grep -v Tests diff --git a/modules/member/php-openid-1.2.3/admin/fixperms b/modules/member/php-openid-1.2.3/admin/fixperms new file mode 100644 index 000000000..2b710d13a --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/fixperms @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +cat < [length]\n"; + exit(1); +} + +# Set a default maximum line length. +my $max_length = $ARGV[1] || 80; + +my @lines = (); +my $line_num = 0; + +open(HANDLE, "<", $filename) or die "Cannot open $filename\n"; + +# Read the file and track the lines with length > $max_length. +while () { + $line_num++; + # Subtract one because the newline doesn't count toward the + # length. + if (length($_) - 1 > $max_length) { + push @lines, $line_num; + } +} + +# If more than five long lines were found, truncate to five and +# indicate that others were present, too. +if (@lines > 5) { + @lines = @lines[0..4]; + push @lines, "and others"; +} + +# If any long lines were found, notify and exit(1); otherwise, +# exit(0). +if (@lines) { + print $filename." (line".((@lines > 1) ? "s" : "")." ". + join(", ", @lines)." exceed".((@lines == 1) ? "s" : ""). + " length $max_length)\n"; + exit(1); +} else { + exit(0); +} diff --git a/modules/member/php-openid-1.2.3/admin/makedoc.sh b/modules/member/php-openid-1.2.3/admin/makedoc.sh new file mode 100644 index 000000000..b8411e307 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/makedoc.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -v +phpdoc -p on -t doc -d Auth,admin/tutorials,Services -ti "JanRain OpenID Library" \ + --ignore \*~,BigMath.php,Discover.php,CryptUtil.php,DiffieHellman.php,HMACSHA1.php,KVForm.php,Parse.php,TrustRoot.php,HTTPFetcher.php,ParanoidHTTPFetcher.php,PlainHTTPFetcher.php,ParseHTML.php,URINorm.php,XRI.php,XRIRes.php,Misc.php \ + -dn "OpenID" -o "HTML:frames:phphtmllib" diff --git a/modules/member/php-openid-1.2.3/admin/mathlib b/modules/member/php-openid-1.2.3/admin/mathlib new file mode 100644 index 000000000..53f50d06c --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/mathlib @@ -0,0 +1,18 @@ +#!/usr/bin/env php +type; +} + +?> diff --git a/modules/member/php-openid-1.2.3/admin/nobadbraces b/modules/member/php-openid-1.2.3/admin/nobadbraces new file mode 100644 index 000000000..90769d313 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/nobadbraces @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -e + +./admin/findphp | xargs -l1 /usr/bin/env perl admin/brace_style.pl diff --git a/modules/member/php-openid-1.2.3/admin/nobadcase b/modules/member/php-openid-1.2.3/admin/nobadcase new file mode 100644 index 000000000..104a7af49 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/nobadcase @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +bad=$(./admin/findphp | xargs egrep -n '\b(TRUE|FALSE|NULL)\b') + +if [ ! -z "$bad" ] + then + cat <&2 +These files contain wrongly capitalized constants: + +$bad + +EOF + exit 1 +fi diff --git a/modules/member/php-openid-1.2.3/admin/nolonglines b/modules/member/php-openid-1.2.3/admin/nolonglines new file mode 100644 index 000000000..48d1c7d7f --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/nolonglines @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +files_with_long_lines=$(./admin/findphp | + xargs -l1 wc -L | + awk '$1 > 80 { print $2 }' | + xargs -l1 --replace=FILENAME /usr/bin/env perl admin/longlines.pl FILENAME 80) + +if [ "$files_with_long_lines" ] + then + cat <&2 +Found lines > 80 characters in: + +$files_with_long_lines +EOF + exit 1 +fi diff --git a/modules/member/php-openid-1.2.3/admin/notabs b/modules/member/php-openid-1.2.3/admin/notabs new file mode 100644 index 000000000..b6a7df012 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/notabs @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +# +# Look in the local directory for PHP files that have tabs in them. If +# there are files with tabs, print the list of files and exit with +# non-zero status. + +tabs=$(./admin/findphp | xargs egrep -n ' ' | sort) + +if [ ! -z "$tabs" ] + then + cat <&2 +Found tabs in: +$tabs +EOF + exit 1 +fi diff --git a/modules/member/php-openid-1.2.3/admin/open_tag b/modules/member/php-openid-1.2.3/admin/open_tag new file mode 100644 index 000000000..c9f464494 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/open_tag @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +bad_files=$(./admin/findphp | + xargs -l1 grep -H -m 1 "&2 +These PHP files do NOT begin with \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/admin/package.xml b/modules/member/php-openid-1.2.3/admin/package.xml new file mode 100644 index 000000000..c959ba9ec --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/package.xml @@ -0,0 +1,24 @@ + + + %(package_name)s + %(package_summary)s + + %(package_description)s + + %(license_name)s + %(maintainers)s + + %(version)s + %(date)s + %(release_stability)s + + + + %(contents_version_1)s + + + + + diff --git a/modules/member/php-openid-1.2.3/admin/package2.xml b/modules/member/php-openid-1.2.3/admin/package2.xml new file mode 100644 index 000000000..d3bd5251f --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/package2.xml @@ -0,0 +1,74 @@ + + + %(package_name)s + %(uri)s + %(package_summary)s + + %(package_description)s + + %(leads)s + %(date)s + + %(version)s + %(version)s + + + %(release_stability)s + %(release_stability)s + + %(license_name)s + + + + + %(contents)s + + + + + 4.3.0 + + + 1.4.5 + + + + + PHPUnit + pear.php.net + 1.1.1 + + + PEAR_DB + pear.php.net + 1.80 + + + pgsql + + + mysql + + + sqlite + + + bcmath + + + gmp + + + + + + diff --git a/modules/member/php-openid-1.2.3/admin/packagexml.py b/modules/member/php-openid-1.2.3/admin/packagexml.py new file mode 100644 index 000000000..e83240594 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/packagexml.py @@ -0,0 +1,155 @@ +#!/usr/bin/python + +import os +import os.path + +def makeMaintainerXML(leads): + maintainer_template = """ + + %(user)s + %(name)s + %(email)s + lead + + """ + + return "" + \ + "".join([maintainer_template % l for l in leads]) + \ + "" + +def makeLeadXML(leads): + lead_template = """ + + %(name)s + %(user)s + %(email)s + %(active)s + + """ + + return "".join([lead_template % l for l in leads]) + +INDENT_STRING = " " + +def buildContentsXMLFordir(dir_or_file, roles, depth=0, dir_role=None, + all_files=False): + """ + Returns a list of strings, each of which is either a XML + element for the given file or a element which contains other + elements. + """ + + try: + entries = os.listdir(dir_or_file) + dir_role_s = '' + if dir_role: + dir_role_s = ' role="%s"' % (dir_role) + lines = ['%s' % (INDENT_STRING * depth, + os.path.basename(dir_or_file), + dir_role_s)] + + for entry in entries: + lines += buildContentsXMLFordir(dir_or_file + os.sep + entry, roles, + depth + 1, dir_role, all_files) + + lines.append('%s' % (INDENT_STRING * depth)) + + return lines + except OSError: + try: + extension = dir_or_file.split(".")[-1] + except: + if not all_files: + return [] + + if all_files and dir_role: + return ['%s' % + (INDENT_STRING * depth, os.path.basename(dir_or_file), dir_role)] + elif extension in roles: # Ends in an extension we care about + return ['%s' % + (INDENT_STRING * depth, os.path.basename(dir_or_file), + roles[extension])] + else: + return [] + +def buildContentsXML(roles, *dirs): + lines = [] + + for directory in dirs: + lines.append("\n".join(buildContentsXMLFordir(directory, roles, 1))) + + return "\n".join(lines) + +def buildDocsXML(*dirs): + lines = [] + + for directory in dirs: + lines.append("\n".join(buildContentsXMLFordir(directory, {}, 1, 'doc', + all_files=True))) + + return "\n".join(lines) + +if __name__ == "__main__": + def usage(progname): + print "Usage: %s " % (progname) + + import sys + import time + + try: + import xmlconfig + except: + print "Could not import XML configuration module xmlconfig" + sys.exit(1) + + # Expect sys.argv[2] to be the name of the XML file template to + # use for processing. + try: + template_f = open(sys.argv[2], 'r') + except Exception, e: + usage(sys.argv[0]) + print "Could not open template file:", str(e) + sys.exit(1) + + # Expect sys.argv[1] to be the version number to include in the + # package.xml file. + try: + version = sys.argv[1] + except: + usage(sys.argv[0]) + sys.exit(2) + + # Expect sys.argv[3] to be the name of the release notes file. + try: + release_file = sys.argv[3] + release_file_h = open(release_file, 'r') + release_notes = release_file_h.read().strip() + release_file_h.close() + except Exception, e: + usage(sys.argv[0]) + print str(e) + sys.exit(3) + + data = xmlconfig.__dict__.copy() + + contentsXml = buildContentsXML({'php': 'php'}, *xmlconfig.contents_dirs) + docsXml = buildDocsXML(*xmlconfig.docs_dirs) + + contents = '\n' + contentsXml + \ + "\n" + docsXml + '\n ' + + contents_v1 = '\n' + contentsXml + \ + "\n" + docsXml + '\n ' + + data['contents'] = contents + data['contents_version_1'] = contents_v1 + data['leads'] = makeLeadXML(xmlconfig.leads) + data['maintainers'] = makeMaintainerXML(xmlconfig.leads) + data['date'] = time.strftime("%Y-%m-%d") + data['version'] = version + data['uri'] = "%s%s-%s.tgz" % (data['package_base_uri'], data['package_name'], + version) + data['release_notes'] = release_notes + + template_data = template_f.read() + print template_data % data diff --git a/modules/member/php-openid-1.2.3/admin/phpaliases.py b/modules/member/php-openid-1.2.3/admin/phpaliases.py new file mode 100644 index 000000000..c4ce21684 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/phpaliases.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python + +"""This script searches files for functions that are just aliases in +PHP source code. This is not 100% reliable, so it should not be +automated, but it's useful to run once in a while to make sure that +all of the matches it finds are not really legitimate aliases. + +Usage: + + parse_aliases.py [PHP source code filename]... +""" + +import sys + +# Fetch this URL to get the file that is parsed into the aliases list +alias_url = 'http://www.zend.com/phpfunc/all_aliases.php' + +header_tok = ''; +footer_tok = ''; + +# Example line of the table that we parse: +# 'bzclosephp-src/ext/bz2/bz2.cfclose' + +import re + +line_re = re.compile(r''' +\A + +]+"> + +([^<>]+) + +]+">[^<>]+ + + +(?: + ]+\.php"> + ( [^<>]+ ) + +| ( [^<>]+ ) +) + + + + +\Z +''', re.VERBOSE) + +def parseString(s): + _, rest = s.split(header_tok, 1) + body, _ = rest.split(footer_tok, 1) + + lines = body.split('\n') + assert [s.strip() for s in lines[-2:]] == ['', ''] + assert lines[0].strip().startswith('|\$|)\s*\b(%s)\b' % ('|'.join(aliases.keys()))) + +def checkAliasesFile(alias_re, f): + found = [] + line_num = 1 + for line in f: + for mo in alias_re.finditer(line): + if mo.group(1): + continue + alias = mo.group(2) + found.append((line_num, alias)) + line_num += 1 + return found + +def checkAliases(alias_re, filename): + return checkAliasesFile(alias_re, file(filename, 'r')) + +def checkAliasesFiles(alias_re, filenames): + found = [] + for filename in filenames: + file_found = checkAliases(alias_re, filename) + found.extend([(filename, n, a) for (n, a) in file_found]) + return found + +def dumpResults(aliases, found, out=sys.stdout): + for filename, n, a in found: + print >>out, "%s:%d %s -> %s" % (filename, n, a, aliases[a]) + +def main(alias_file, *filenames): + aliases = parseFileName(alias_file) + alias_re = getAliasRE(aliases) + found = checkAliasesFiles(alias_re, filenames) + dumpResults(aliases, found) + return found + +if __name__ == '__main__': + found = main(*sys.argv[1:]) + if found: + sys.exit(1) diff --git a/modules/member/php-openid-1.2.3/admin/prepare-release b/modules/member/php-openid-1.2.3/admin/prepare-release new file mode 100644 index 000000000..98415a9da --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/prepare-release @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# +# Prepare this repository for release + +REPO_ROOT=$(dirname $(dirname $(readlink --canonicalize "$0"))) +cd "$REPO_ROOT" + +bash ./admin/fixperms + +./admin/makedoc.sh + +darcs changes --from-tag=. --summary > CHANGELOG diff --git a/modules/member/php-openid-1.2.3/admin/runtests b/modules/member/php-openid-1.2.3/admin/runtests new file mode 100644 index 000000000..770c5fb53 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/runtests @@ -0,0 +1,64 @@ +#!/usr/bin/env bash + +HERE=$(readlink --canonicalize $(dirname "$0")) + +test_import () { + ./admin/checkimports +} + +test_tabs () { + /usr/bin/env bash "$HERE/notabs" +} + +test_longlines () { + /usr/bin/env bash "$HERE/nolonglines" +} + +test_nobadbraces () { + /usr/bin/env bash "$HERE/nobadbraces" +} + +test_nobadcase () { + /usr/bin/env bash "$HERE/nobadcase" +} + +test_opentag () { + /usr/bin/env bash "$HERE/open_tag" +} + +test_docblocks () { + /usr/bin/env bash "$HERE/docblocks" +} + +test_php () { + if uname -a | grep -i cygwin >/dev/null 2>/dev/null ; then + /usr/bin/env php "$(dirname "$0")/texttest.php" --insecure-rand + else + /usr/bin/env php "$HERE/texttest.php" + fi +} + +tests="tabs longlines nobadbraces nobadcase opentag docblocks php import" + +failures= + +# Run in repository root (parent of this directory) +cd $(dirname "$HERE") + +chmod +x ./admin/fixperms +./admin/fixperms + +for test_name in $tests + do + echo "Running test $test_name" 1>&2 + if ! eval "test_$test_name" + then + failures="$failures $test_name" + fi +done + +if [ ! -z "$failures" ] + then + echo "Failures in: $failures" 1>&2 + exit 1 +fi diff --git a/modules/member/php-openid-1.2.3/admin/texttest.php b/modules/member/php-openid-1.2.3/admin/texttest.php new file mode 100644 index 000000000..bf174a5dc --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/texttest.php @@ -0,0 +1,173 @@ +failures() as $failure) { + echo $failure->toString(); + } + + foreach ($this->errors() as $failure) { + echo $failure->toString(); + } + } +} + +function microtime_float() +{ + list($usec, $sec) = explode(" ", microtime()); + return ((float)$usec + (float)$sec); +} + +$longopts = array('no-math', + 'math-lib=', + 'insecure-rand', + 'thorough'); + +$con = new Console_Getopt; +$args = $con->readPHPArgv(); +array_shift($args); +$options = $con->getopt2($args, "", $longopts); + +if (PEAR::isError($options)) { + print $options->message . "\n"; + exit(1); +} + +list($flags, $tests_to_run) = $options; + +$math_type = array(); +$thorough = false; +foreach ($flags as $flag) { + list($option, $value) = $flag; + switch ($option) { + case '--insecure-rand': + define('Auth_OpenID_RAND_SOURCE', null); + break; + case '--no-math': + define('Auth_OpenID_NO_MATH_SUPPORT', true); + break; + case '--math-lib': + $math_type[] = $value; + break; + case '--thorough': + define('Tests_Auth_OpenID_thorough', true); + break; + default: + print "Unrecognized option: $option\n"; + exit(1); + } +} + +// ******** Math library selection *********** + +if ($math_type) { + if (defined('Auth_OpenID_NO_MATH_SUPPORT')) { + print "--no-math and --math-lib are mutually exclusive\n"; + exit(1); + } + require_once('Auth/OpenID/BigMath.php'); + $new_extensions = array(); + foreach ($math_type as $lib) { + $found = false; + foreach ($_Auth_OpenID_math_extensions as $ext) { + if ($ext['extension'] == $lib) { + $new_extensions[] = $ext; + $found = true; + break; + } + } + + if (!$found) { + print "Unknown math library specified: $lib\n"; + exit(1); + } + } + $_Auth_OpenID_math_extensions = $new_extensions; +} + +// ******** End math library selection ********** + +$suites = loadSuite($argv); + +$totals = array( + 'run' => 0, + 'error' => 0, + 'failure' => 0, + 'time' => 0 + ); + +foreach ($suites as $suite) { + $name = $suite->getName(); + echo "========================================== +Test suite: $name +------------------------------------------ +"; + + $result = new TextTestResult(); + $before = microtime_float(); + $suite->run($result); + $after = microtime_float(); + + $run = $result->runCount(); + $error = $result->errorCount(); + $failure = $result->failureCount(); + $delta = $after - $before; + $totals['run'] += $run; + $totals['error'] += $error; + $totals['failure'] += $failure; + $totals['time'] += $delta; + $human_delta = round($delta, 3); + echo "\nRan $run tests in $human_delta seconds"; + if ($error || $failure) { + echo " with $error errors, $failure failures"; + } + echo " +========================================== + +"; + + $failures = $result->failures(); + foreach($failures as $failure) { + $test = $failure->failedTest(); + $testName = $test->getName(); + $exception = $failure->thrownException(); + echo "* Failure in $testName: $exception + +"; + } +} + +$before = microtime_float(); +$run = $totals['run']; +$error = $totals['error']; +$failure = $totals['failure']; +$time = round($totals['time'], 3); +echo "Ran a total of $run tests in $time seconds with $error errors, $failure failures\n"; +if ($totals['error'] || $totals['failure']) { + exit(1); +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/admin/tutorials/OpenID/OpenID.pkg b/modules/member/php-openid-1.2.3/admin/tutorials/OpenID/OpenID.pkg new file mode 100644 index 000000000..8df8de9ba --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/tutorials/OpenID/OpenID.pkg @@ -0,0 +1,81 @@ + + + PHP OpenID API + + + + + JanRain, Inc. + + {@link mailto:openid@janrain.com openid@janrain.com} + + + + + + This is a complete implementation of the OpenID authentication + protocol. This package contains: + + + An OpenID server + An OpenID consumer + Stores for MySQL, PostgreSQL, SQLite, and filesystem-based OpenID data storage + PHPUnit unit tests + An example server and consumer + + + + + For Package Users + + + To install this package, copy the Auth/ + directory in this package to a directory in your PHP include path. + Alternatively, modify your PHP include path to include the + directory that contains Auth/. Any + applications that need this package will then be able to use it. + + + + + + For Developers + + + + See the server and consumer examples in the + examples/ directory of the package. For + details on how to run the examples, see + examples/README. If you want to create your + own OpenID data storage class, please see the {@link Auth_OpenID_OpenIDStore} + class. + + + + + + + References + + + + {@link http://www.openidenabled.com/openid/libraries/php PHP OpenID Library} + + + + {@link http://www.janrain.com JanRain, Inc.} + + + + {@link http://lists.openidenabled.com/mailman/listinfo/dev OpenID Development Discussion List} + + + + {@link http://www.openidenabled.com/yadis/libraries/php PHP Yadis Library} + + + + + + + diff --git a/modules/member/php-openid-1.2.3/admin/webtest.php b/modules/member/php-openid-1.2.3/admin/webtest.php new file mode 100644 index 000000000..1076623f0 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/webtest.php @@ -0,0 +1,12 @@ +addSuites($suites); +$gui->show(); + +?> diff --git a/modules/member/php-openid-1.2.3/admin/xmlconfig.py b/modules/member/php-openid-1.2.3/admin/xmlconfig.py new file mode 100644 index 000000000..8042e7b20 --- /dev/null +++ b/modules/member/php-openid-1.2.3/admin/xmlconfig.py @@ -0,0 +1,55 @@ + +""" +This is the package.xml data needed for the PHP OpenID PEAR +package.xml file. Use the 'packagexml.py' program to generate a +package.xml file for a release of this library. +""" + +# This is a list of dicts describing the project leads. This will be +# used to generate XML elements. +leads = [ + {'name': 'Jonathan Daugherty', + 'user': 'cygnus', + 'email': 'cygnus@janrain.com', + 'active': 'yes'}, + {'name': 'Josh Hoyt', + 'user': 'jhoyt', + 'email': 'josh@janrain.com', + 'active': 'yes'} + ] + +# The package name. +package_name = 'Auth_OpenID' + +# The package description. +package_description = 'An implementation of the OpenID single sign-on authentication protocol.' + +# Package summary. +package_summary = 'PHP OpenID' + +# License string. +license_name = 'LGPL' + +# License URI. +license_uri = 'http://www.gnu.org/copyleft/lesser.txt' + +# Director(ies) containing package source, relative to the admin/ +# directory. All .php files in these directories will be included in +# the element of the output XML and will be assigned the +# role 'php'. +contents_dirs = ['../Auth', '../Services'] + +# Director(ies) containing package documentation. All files and +# subdirectories in these directories will be included in the +# element in the output XML and will be assigned the role +# 'doc'. +docs_dirs = ['../doc', '../examples'] + +# The HTTP package base URI. This is the place on the web where the +# PEAR-installable tarballs will live, and this (plus the package +# tarball name) will be the URL that users pass to "pear install". +package_base_uri = 'http://www.openidenabled.com/resources/downloads/php-openid/pear/' + +# The release stability. Maybe this should be a commandline parameter +# since it might differ from release to release. +release_stability = 'stable' diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_AlreadySigned.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_AlreadySigned.html new file mode 100644 index 000000000..20084d45c --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_AlreadySigned.html @@ -0,0 +1,68 @@ + + + + + + Docs For Class Auth_OpenID_AlreadySigned + + + + +
+

Class Auth_OpenID_AlreadySigned

+ + +
+
Description
+ +
+ +

An error that indicates that a response was already signed.

+

+ Located in /Auth/OpenID/Server.php (line 1193) +

+ + +
Auth_OpenID_EncodingError
+   |
+   --Auth_OpenID_AlreadySigned
+ +
+
+ + + + + + + +
+
Methods
+ +
+ +

Inherited Methods

+ + +

Inherited From Auth_OpenID_EncodingError

+
+ Auth_OpenID_EncodingError::Auth_OpenID_EncodingError()
+
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Association.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Association.html new file mode 100644 index 000000000..275babbfa --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Association.html @@ -0,0 +1,210 @@ + + + + + + Docs For Class Auth_OpenID_Association + + + + +
+

Class Auth_OpenID_Association

+ + +
+
Description
+ +
+ +

This class represents an association between a server and a consumer. In general, users of this library will never see instances of this object. The only exception is if you implement a custom Auth_OpenID_OpenIDStore.

+

If you do implement such a store, it will need to store the values of the handle, secret, issued, lifetime, and assoc_type instance variables.

+

+ Located in /Auth/OpenID/Association.php (line 39) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_Association + deserialize + ( $class_name, string $assoc_s) +
+ +
+ bool + equal + ( $other) +
+ +
+ integer + getExpiresIn + ([ $now = null]) +
+ +
+ string + serialize + () +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ deserialize (line 198) +
+ + +

Parse an association as stored by serialize(). This is the inverse of serialize.

+
    +
  • return: instance of this class
  • +
+ +
+ Auth_OpenID_Association + + deserialize + + ( $class_name, string $assoc_s) +
+ +
    +
  • + string + $assoc_s: Association as serialized by serialize()
  • +
  • + + $class_name
  • +
+ + +
+ +
+ +
+ equal (line 159) +
+ + +

This checks to see if two Auth_OpenID_Association instances represent the same association.

+
    +
  • return: true if the two instances represent the same association, false otherwise.
  • +
+ +
+ bool + + equal + + ( $other) +
+ +
    +
  • + + $other
  • +
+ + +
+ +
+ +
+ getExpiresIn (line 143) +
+ + +

This returns the number of seconds this association is still valid for, or 0 if the association is no longer valid.

+
    +
  • return: The number of seconds this association is still valid for, or 0 if the association is no longer valid.
  • +
+ +
+ integer + + getExpiresIn + + ([ $now = null]) +
+ +
    +
  • + + $now
  • +
+ + +
+ +
+ +
+ serialize (line 175) +
+ + +

Convert an association to KV form.

+
    +
  • return: String in KV form suitable for deserialization by deserialize.
  • +
+ +
+ string + + serialize + + () +
+ + + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:27 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_AuthRequest.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_AuthRequest.html new file mode 100644 index 000000000..3bf8f4a03 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_AuthRequest.html @@ -0,0 +1,187 @@ + + + + + + Docs For Class Auth_OpenID_AuthRequest + + + + +
+

Class Auth_OpenID_AuthRequest

+ + +
+
Description
+ +
+ +

This class represents an authentication request from a consumer to an OpenID server.

+

+ Located in /Auth/OpenID/Consumer.php (line 934) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_AuthRequest + Auth_OpenID_AuthRequest + ( $assoc,  $endpoint) +
+ +
+ void + addExtensionArg + (string $namespace, string $key, string $value) +
+ +
+ string + redirectURL + (string $trust_root, string$ $return_to, [ $immediate = false]) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_AuthRequest (line 944) +
+ + +

Initialize an authentication request with the specified token, association, and endpoint.

+

Users of this library should not create instances of this class. Instances of this class are created by the library when needed.

+ +
+ Auth_OpenID_AuthRequest + + Auth_OpenID_AuthRequest + + ( $assoc,  $endpoint) +
+ +
    +
  • + + $assoc
  • +
  • + + $endpoint
  • +
+ + +
+ +
+ +
+ addExtensionArg (line 971) +
+ + +

Add an extension argument to this OpenID authentication request.

+

Use caution when adding arguments, because they will be URL-escaped and appended to the redirect URL, which can easily get quite long.

+ +
+ void + + addExtensionArg + + (string $namespace, string $key, string $value) +
+ +
    +
  • + string + $namespace: The namespace for the extension. For example, the simple registration extension uses the namespace 'sreg'.
  • +
  • + string + $key: The key within the extension namespace. For example, the nickname field in the simple registration extension's key is 'nickname'.
  • +
  • + string + $value: The value to provide to the server for this argument.
  • +
+ + +
+ +
+ +
+ redirectURL (line 990) +
+ + +

Compute the appropriate redirection URL for this request based on a specified trust root and return-to.

+
    +
  • return: The resulting redirect URL that you should send to the user agent.
  • +
+ +
+ string + + redirectURL + + (string $trust_root, string$ $return_to, [ $immediate = false]) +
+ +
    +
  • + string + $trust_root: The trust root URI for your application.
  • +
  • + string$ + $return_to: The return-to URL to be used when the OpenID server redirects the user back to your site.
  • +
  • + + $immediate
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:27 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_CancelResponse.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_CancelResponse.html new file mode 100644 index 000000000..2b0df54ce --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_CancelResponse.html @@ -0,0 +1,169 @@ + + + + + + Docs For Class Auth_OpenID_CancelResponse + + + + +
+

Class Auth_OpenID_CancelResponse

+ + +
+
Description
+ +
+ +

A response with a status of Auth_OpenID_CANCEL. Indicates that the user cancelled the OpenID authentication request. This has two relevant attributes:

+

identity_url - The identity URL for which authentication was attempted, if it can be determined. Otherwise, null.

status - Auth_OpenID_SUCCESS.

+

+ Located in /Auth/OpenID/Consumer.php (line 1147) +

+ + +
Auth_OpenID_ConsumerResponse
+   |
+   --Auth_OpenID_CancelResponse
+ +
+
+ + + + +
+
Variable Summary
+ +
+
+
+ mixed + $status +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_CancelResponse + Auth_OpenID_CancelResponse + ( $endpoint) +
+
+
+
+ + +
+
Variables
+ +
+ + +
+ +
+ + mixed + $status + = Auth_OpenID_CANCEL (line 1148) + +
+ + + + +
+
Redefinition of:
+
+
Auth_OpenID_ConsumerResponse::$status
+
+ + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_CancelResponse (line 1150) +
+ + + +
+ Auth_OpenID_CancelResponse + + Auth_OpenID_CancelResponse + + ( $endpoint) +
+ +
    +
  • + + $endpoint
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Consumer.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Consumer.html new file mode 100644 index 000000000..93cffc1e7 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Consumer.html @@ -0,0 +1,216 @@ + + + + + + Docs For Class Auth_OpenID_Consumer + + + + +
+

Class Auth_OpenID_Consumer

+ + +
+
Description
+ +
+ +

An OpenID consumer implementation that performs discovery and does session management. See the Consumer.php file documentation for more information.

+

+ Located in /Auth/OpenID/Consumer.php (line 222) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_Consumer + Auth_OpenID_Consumer + ( &$store, [mixed $session = null], Auth_OpenID_OpenIDStore $store) +
+ +
+ Auth_OpenID_AuthRequest + begin + (User_url: $user_url) +
+ +
+ Auth_OpenID_AuthRequest + &beginWithoutDiscovery + (Auth_OpenID_ServiceEndpoint $endpoint) +
+ +
+ Auth_OpenID_ConsumerResponse + complete + (array $query) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_Consumer (line 259) +
+ + +

Initialize a Consumer instance.

+

You should create a new instance of the Consumer object with every HTTP request that handles OpenID transactions.

+ +
+ Auth_OpenID_Consumer + + Auth_OpenID_Consumer + + ( &$store, [mixed $session = null], Auth_OpenID_OpenIDStore $store) +
+ +
    +
  • + Auth_OpenID_OpenIDStore + $store: This must be an object that implements the interface in Auth_OpenID_OpenIDStore. Several concrete implementations are provided, to cover most common use cases. For stores backed by MySQL, PostgreSQL, or SQLite, see the Auth_OpenID_SQLStore class and its sublcasses. For a filesystem-backed store, see the Auth_OpenID_FileStore module. As a last resort, if it isn't possible for the server to store state at all, an instance of Auth_OpenID_DumbStore can be used.
  • +
  • + mixed + $session: session An object which implements the interface of the Services_Yadis_Session class. Particularly, this object is expected to have these methods: get($key), set($key, $value), and del($key). This defaults to a session object which wraps PHP's native session machinery. You should only need to pass something here if you have your own sessioning implementation.
  • +
  • + + &$store
  • +
+ + +
+ +
+ +
+ begin (line 287) +
+ + +

Start the OpenID authentication process. See steps 1-2 in the overview at the top of this file.

+
    +
  • return: An object containing the discovered information will be returned, with a method for building a redirect URL to the server, as described in step 3 of the overview. This object may also be used to add extension arguments to the request, using its 'addExtensionArg' method.
  • +
+ +
+ Auth_OpenID_AuthRequest + + begin + + (User_url: $user_url) +
+ +
    +
  • + User_url: + $user_url: Identity URL given by the user. This method performs a textual transformation of the URL to try and make sure it is normalized. For example, a user_url of example.com will be normalized to http://example.com/ normalizing and resolving any redirects the server might issue.
  • +
+ + +
+ +
+ +
+ beginWithoutDiscovery (line 350) +
+ + +

Start OpenID verification without doing OpenID server

+

discovery. This method is used internally by Consumer.begin after discovery is performed, and exists to provide an interface for library users needing to perform their own discovery.

+
    +
  • return: An OpenID authentication request object.
  • +
+ +
+ Auth_OpenID_AuthRequest + + &beginWithoutDiscovery + + (Auth_OpenID_ServiceEndpoint $endpoint) +
+ +
    +
  • + Auth_OpenID_ServiceEndpoint + $endpoint: an OpenID service endpoint descriptor.
  • +
+ + +
+ +
+ +
+ complete (line 372) +
+ + +

Called to interpret the server's response to an OpenID request. It is called in step 4 of the flow described in the consumer overview.

+
    +
  • return: A instance of an Auth_OpenID_ConsumerResponse subclass. The type of response is indicated by the status attribute, which will be one of SUCCESS, CANCEL, FAILURE, or SETUP_NEEDED.
  • +
+ +
+ Auth_OpenID_ConsumerResponse + + complete + + (array $query) +
+ +
    +
  • + array + $query: An array of the query parameters (key => value pairs) for this HTTP request.
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_ConsumerResponse.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_ConsumerResponse.html new file mode 100644 index 000000000..91d094ca5 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_ConsumerResponse.html @@ -0,0 +1,153 @@ + + + + + + Docs For Class Auth_OpenID_ConsumerResponse + + + + +
+

Class Auth_OpenID_ConsumerResponse

+ + +
+
Description
+ +
+ +

The base class for responses from the Auth_OpenID_Consumer.

+

+ Located in /Auth/OpenID/Consumer.php (line 1022) +

+ + +

+	
+			
+
+ + +
+
Direct descendents
+ +
+ + + + + + + + + + + + + + + + + + + + + +
ClassDescription
Auth_OpenID_SuccessResponse + A response with a status of Auth_OpenID_SUCCESS. Indicates that +
Auth_OpenID_FailureResponse + A response with a status of Auth_OpenID_FAILURE. Indicates that the OpenID protocol has failed. This could be locally or remotely triggered. This has three relevant attributes: +
Auth_OpenID_CancelResponse + A response with a status of Auth_OpenID_CANCEL. Indicates that the user cancelled the OpenID authentication request. This has two relevant attributes: +
Auth_OpenID_SetupNeededResponse + A response with a status of Auth_OpenID_SETUP_NEEDED. Indicates that the request was in immediate mode, and the server is unable to authenticate the user without further interaction. +
+
+
+ + + +
+
Variable Summary
+ +
+
+
+ mixed + $status +
+
+
+
+ + + +
+
Variables
+ +
+ + +
+ +
+ + mixed + $status + = null (line 1023) + +
+ + + + + +
+
Redefined in descendants as:
+ + + +
+ +
+
+ + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DatabaseConnection.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DatabaseConnection.html new file mode 100644 index 000000000..afebb38a5 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DatabaseConnection.html @@ -0,0 +1,337 @@ + + + + + + Docs For Class Auth_OpenID_DatabaseConnection + + + + +
+

Class Auth_OpenID_DatabaseConnection

+ + +
+
Description
+ +
+ +

An empty base class intended to emulate PEAR connection

+

functionality in applications that supply their own database abstraction mechanisms. See Auth_OpenID_SQLStore for more information. You should subclass this class if you need to create an SQL store that needs to access its database using an application's database abstraction layer instead of a PEAR database connection. Any subclass of Auth_OpenID_DatabaseConnection MUST adhere to the interface specified here.

+

+ Located in /Auth/OpenID/DatabaseConnection.php (line 25) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ void + autoCommit + (bool $mode) +
+ +
+ void + begin + () +
+ +
+ void + commit + () +
+ +
+ array + getAll + (string $sql, [array $params = array()]) +
+ +
+ mixed + getOne + (string $sql, [array $params = array()]) +
+ +
+ array + getRow + (string $sql, [array $params = array()]) +
+ +
+ mixed + query + (string $sql, [array $params = array()]) +
+ +
+ void + rollback + () +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ autoCommit (line 32) +
+ + +

Sets auto-commit mode on this database connection.

+ +
+ void + + autoCommit + + (bool $mode) +
+ +
    +
  • + bool + $mode: True if auto-commit is to be used; false if not.
  • +
+ + +
+ +
+ +
+ begin (line 58) +
+ + +

Starts a transaction on this connection, if supported.

+ +
+ void + + begin + + () +
+ + + +
+ +
+ +
+ commit (line 65) +
+ + +

Commits a transaction on this connection, if supported.

+ +
+ void + + commit + + () +
+ + + +
+ +
+ +
+ getAll (line 126) +
+ + +

Run an SQL query with the specified parameters, if any.

+
    +
  • return: An array of arrays representing the result of the query; each array is keyed on column name.
  • +
+ +
+ array + + getAll + + (string $sql, [array $params = array()]) +
+ +
    +
  • + string + $sql: An SQL string with placeholders. The placeholders are assumed to be specific to the database engine for this connection.
  • +
  • + array + $params: An array of parameters to insert into the SQL string using this connection's escaping mechanism.
  • +
+ + +
+ +
+ +
+ getOne (line 91) +
+ + +

Run an SQL query and return the first column of the first row of the result set, if any.

+
    +
  • return: The value of the first column of the first row of the result set. False if no such result was found.
  • +
+ +
+ mixed + + getOne + + (string $sql, [array $params = array()]) +
+ +
    +
  • + string + $sql: An SQL string with placeholders. The placeholders are assumed to be specific to the database engine for this connection.
  • +
  • + array + $params: An array of parameters to insert into the SQL string using this connection's escaping mechanism.
  • +
+ + +
+ +
+ +
+ getRow (line 109) +
+ + +

Run an SQL query and return the first row of the result set, if any.

+
    +
  • return: The first row of the result set, if any, keyed on column name. False if no such result was found.
  • +
+ +
+ array + + getRow + + (string $sql, [array $params = array()]) +
+ +
    +
  • + string + $sql: An SQL string with placeholders. The placeholders are assumed to be specific to the database engine for this connection.
  • +
  • + array + $params: An array of parameters to insert into the SQL string using this connection's escaping mechanism.
  • +
+ + +
+ +
+ +
+ query (line 51) +
+ + +

Run an SQL query with the specified parameters, if any.

+
    +
  • return: The result of calling this connection's internal query function. The type of result depends on the underlying database engine. This method is usually used when the result of a query is not important, like a DDL query.
  • +
+ +
+ mixed + + query + + (string $sql, [array $params = array()]) +
+ +
    +
  • + string + $sql: An SQL string with placeholders. The placeholders are assumed to be specific to the database engine for this connection.
  • +
  • + array + $params: An array of parameters to insert into the SQL string using this connection's escaping mechanism.
  • +
+ + +
+ +
+ +
+ rollback (line 72) +
+ + +

Performs a rollback on this connection, if supported.

+ +
+ void + + rollback + + () +
+ + + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Decoder.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Decoder.html new file mode 100644 index 000000000..86a69fe79 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Decoder.html @@ -0,0 +1,160 @@ + + + + + + Docs For Class Auth_OpenID_Decoder + + + + +
+

Class Auth_OpenID_Decoder

+ + +
+
Description
+ +
+ +

Decode an incoming Auth_OpenID_WebResponse into an Auth_OpenID_Request.

+

+ Located in /Auth/OpenID/Server.php (line 1114) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_Decoder + Auth_OpenID_Decoder + () +
+ +
+ void + decode + ( $query) +
+ +
+ void + defaultDecoder + ( $query) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_Decoder (line 1116) +
+ + + +
+ Auth_OpenID_Decoder + + Auth_OpenID_Decoder + + () +
+ + + +
+ +
+ +
+ decode (line 1133) +
+ + +

Given an HTTP query in an array (key-value pairs), decode it into an Auth_OpenID_Request object.

+ +
+ void + + decode + + ( $query) +
+ +
    +
  • + + $query
  • +
+ + +
+ +
+ +
+ defaultDecoder (line 1168) +
+ + + +
+ void + + defaultDecoder + + ( $query) +
+ +
    +
  • + + $query
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DiffieHellmanConsumerSession.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DiffieHellmanConsumerSession.html new file mode 100644 index 000000000..a6d16f343 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DiffieHellmanConsumerSession.html @@ -0,0 +1,217 @@ + + + + + + Docs For Class Auth_OpenID_DiffieHellmanConsumerSession + + + + +
+

Class Auth_OpenID_DiffieHellmanConsumerSession

+ + +
+
Description
+ +
+ +

+ Located in /Auth/OpenID/Consumer.php (line 403) +

+ + +

+	
+			
+
+ + + + +
+
Variable Summary
+ +
+
+
+ mixed + $session_type +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_DiffieHellmanConsumerSession + Auth_OpenID_DiffieHellmanConsumerSession + ([ $dh = null]) +
+ +
+ void + extractSecret + ( $response) +
+ +
+ void + getRequest + () +
+
+
+
+ + +
+
Variables
+ +
+ + +
+ +
+ + mixed + $session_type + = 'DH-SHA1' (line 404) + +
+ + + + + + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_DiffieHellmanConsumerSession (line 406) +
+ + + +
+ Auth_OpenID_DiffieHellmanConsumerSession + + Auth_OpenID_DiffieHellmanConsumerSession + + ([ $dh = null]) +
+ +
    +
  • + + $dh
  • +
+ + +
+ +
+ +
+ extractSecret (line 434) +
+ + + +
+ void + + extractSecret + + ( $response) +
+ +
    +
  • + + $response
  • +
+ + +
+ +
+ +
+ getRequest (line 415) +
+ + + +
+ void + + getRequest + + () +
+ + + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DiffieHellmanServerSession.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DiffieHellmanServerSession.html new file mode 100644 index 000000000..49afdb76e --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DiffieHellmanServerSession.html @@ -0,0 +1,226 @@ + + + + + + Docs For Class Auth_OpenID_DiffieHellmanServerSession + + + + +
+

Class Auth_OpenID_DiffieHellmanServerSession

+ + +
+
Description
+ +
+ +

+ Located in /Auth/OpenID/Server.php (line 391) +

+ + +

+	
+			
+
+ + + + +
+
Variable Summary
+ +
+
+
+ mixed + $session_type +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_DiffieHellmanServerSession + Auth_OpenID_DiffieHellmanServerSession + ( $dh,  $consumer_pubkey) +
+ +
+ void + answer + ( $secret) +
+ +
+ void + fromQuery + ( $query) +
+
+
+
+ + +
+
Variables
+ +
+ + +
+ +
+ + mixed + $session_type + = 'DH-SHA1' (line 397) + +
+ + +

An object that knows how to handle association requests with the Diffie-Hellman session type.

+ + + + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_DiffieHellmanServerSession (line 399) +
+ + + +
+ Auth_OpenID_DiffieHellmanServerSession + + Auth_OpenID_DiffieHellmanServerSession + + ( $dh,  $consumer_pubkey) +
+ +
    +
  • + + $dh
  • +
  • + + $consumer_pubkey
  • +
+ + +
+ +
+ +
+ answer (line 460) +
+ + + +
+ void + + answer + + ( $secret) +
+ +
    +
  • + + $secret
  • +
+ + +
+ +
+ +
+ fromQuery (line 405) +
+ + + +
+ void + + fromQuery + + ( $query) +
+ +
    +
  • + + $query
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DumbStore.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DumbStore.html new file mode 100644 index 000000000..793a48090 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_DumbStore.html @@ -0,0 +1,419 @@ + + + + + + Docs For Class Auth_OpenID_DumbStore + + + + +
+

Class Auth_OpenID_DumbStore

+ + +
+
Description
+ +
+ +

This is a store for use in the worst case, when you have no way of saving state on the consumer site. Using this store makes the consumer vulnerable to replay attacks, as it's unable to use nonces. Avoid using this store if it is at all possible.

+

Most of the methods of this class are implementation details. Users of this class need to worry only about the constructor.

+ +

+ Located in /Auth/OpenID/DumbStore.php (line 34) +

+ + +
Auth_OpenID_OpenIDStore
+   |
+   --Auth_OpenID_DumbStore
+ +
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_DumbStore + Auth_OpenID_DumbStore + (string $secret_phrase) +
+ +
+ void + getAssociation + ( $server_url, [ $handle = null]) +
+ +
+ void + getAuthKey + () +
+ +
+ void + isDumb + () +
+ +
+ void + removeAssociation + ( $server_url,  $handle) +
+ +
+ void + storeAssociation + ( $server_url,  $association) +
+ +
+ void + storeNonce + ( $nonce) +
+ +
+ void + useNonce + ( $nonce) +
+
+
+
+ + +
+
Variables
+ +
+ +

Inherited Variables

+ +

Inherited from Auth_OpenID_OpenIDStore

+
+ + Auth_OpenID_OpenIDStore::$AUTH_KEY_LEN
+
+
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_DumbStore (line 53) +
+ + +

Creates a new Auth_OpenID_DumbStore instance. For the security of the tokens generated by the library, this class attempts to at least have a secure implementation of getAuthKey.

+

When you create an instance of this class, pass in a secret phrase. The phrase is hashed with sha1 to make it the correct length and form for an auth key. That allows you to use a long string as the secret phrase, which means you can make it very difficult to guess.

Each Auth_OpenID_DumbStore instance that is created for use by your consumer site needs to use the same $secret_phrase.

+ +
+ Auth_OpenID_DumbStore + + Auth_OpenID_DumbStore + + (string $secret_phrase) +
+ +
    +
  • + string + $secret_phrase: secret_phrase The phrase used to create the auth key returned by getAuthKey
  • +
+ + +
+ +
+ +
+ getAssociation (line 68) +
+ + +

This implementation always returns null.

+ +
+ void + + getAssociation + + ( $server_url, [ $handle = null]) +
+ +
    +
  • + + $server_url
  • +
  • + + $handle
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::getAssociation()
+
This method returns an Association object from storage that matches the server URL and, if specified, handle. It returns null if no such association is found or if the matching association is expired.
+
+ +
+ +
+ +
+ getAuthKey (line 101) +
+ + +

This method returns the auth key generated by the constructor.

+ +
+ void + + getAuthKey + + () +
+ + +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::getAuthKey()
+
This method returns a key used to sign the tokens, to ensure that they haven't been tampered with in transit. It should return the same key every time it is called. The key returned should be AUTH_KEY_LEN bytes long.
+
+ +
+ +
+ +
+ isDumb (line 110) +
+ + +

This store is a dumb mode store, so this method is overridden to return true.

+ +
+ void + + isDumb + + () +
+ + +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::isDumb()
+
This method must return true if the store is a dumb-mode-style store. Unlike all other methods in this class, this one provides a default implementation, which returns false.
+
+ +
+ +
+ +
+ removeAssociation (line 76) +
+ + +

This implementation always returns false.

+ +
+ void + + removeAssociation + + ( $server_url,  $handle) +
+ +
    +
  • + + $server_url
  • +
  • + + $handle
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::removeAssociation()
+
This method removes the matching association if it's found, and returns whether the association was removed or not.
+
+ +
+ +
+ +
+ storeAssociation (line 61) +
+ + +

This implementation does nothing.

+ +
+ void + + storeAssociation + + ( $server_url,  $association) +
+ +
    +
  • + + $server_url
  • +
  • + + $association
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::storeAssociation()
+
This method puts an Association object into storage, retrievable by server URL and handle.
+
+ +
+ +
+ +
+ storeNonce (line 84) +
+ + +

This implementation does nothing.

+ +
+ void + + storeNonce + + ( $nonce) +
+ +
    +
  • + + $nonce
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::storeNonce()
+
Stores a nonce. This is used by the consumer to prevent replay attacks.
+
+ +
+ +
+ +
+ useNonce (line 93) +
+ + +

In a system truly limited to dumb mode, nonces must all be accepted. This therefore always returns true, which makes replay attacks feasible.

+ +
+ void + + useNonce + + ( $nonce) +
+ +
    +
  • + + $nonce
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::useNonce()
+
This method is called when the library is attempting to use a nonce. If the nonce is in the store, this method removes it and returns a value which evaluates as true. Otherwise it returns a value which evaluates as false.
+
+ +
+

Inherited Methods

+ + +

Inherited From Auth_OpenID_OpenIDStore

+
+ Auth_OpenID_OpenIDStore::getAssociation()
+ Auth_OpenID_OpenIDStore::getAuthKey()
+ Auth_OpenID_OpenIDStore::isDumb()
+ Auth_OpenID_OpenIDStore::removeAssociation()
+ Auth_OpenID_OpenIDStore::reset()
+ Auth_OpenID_OpenIDStore::storeAssociation()
+ Auth_OpenID_OpenIDStore::storeNonce()
+ Auth_OpenID_OpenIDStore::useNonce()
+
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Encoder.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Encoder.html new file mode 100644 index 000000000..86c9b838a --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Encoder.html @@ -0,0 +1,200 @@ + + + + + + Docs For Class Auth_OpenID_Encoder + + + + +
+

Class Auth_OpenID_Encoder

+ + +
+
Description
+ +
+ +

Encode an Auth_OpenID_Response to an Auth_OpenID_WebResponse.

+

+ Located in /Auth/OpenID/Server.php (line 1028) +

+ + +

+	
+			
+
+ + +
+
Direct descendents
+ +
+ + + + + + + + + +
ClassDescription
Auth_OpenID_SigningEncoder + An encoder which also takes care of signing fields when required. +
+
+
+ + + +
+
Variable Summary
+ +
+
+
+ mixed + $responseFactory +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ void + encode + ( &$response) +
+
+
+
+ + +
+
Variables
+ +
+ + +
+ +
+ + mixed + $responseFactory + = 'Auth_OpenID_WebResponse' (line 1030) + +
+ + + + + + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ encode (line 1036) +
+ + +

Encode an Auth_OpenID_Response and return an Auth_OpenID_WebResponse.

+ +
+ void + + encode + + ( &$response) +
+ +
    +
  • + + &$response
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_EncodingError.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_EncodingError.html new file mode 100644 index 000000000..38a99d2b2 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_EncodingError.html @@ -0,0 +1,129 @@ + + + + + + Docs For Class Auth_OpenID_EncodingError + + + + +
+

Class Auth_OpenID_EncodingError

+ + +
+
Description
+ +
+ +

An error that indicates an encoding problem occurred.

+

+ Located in /Auth/OpenID/Server.php (line 1181) +

+ + +

+	
+			
+
+ + +
+
Direct descendents
+ +
+ + + + + + + + + +
ClassDescription
Auth_OpenID_AlreadySigned + An error that indicates that a response was already signed. +
+
+
+ + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_EncodingError + Auth_OpenID_EncodingError + ( &$response) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_EncodingError (line 1182) +
+ + + +
+ Auth_OpenID_EncodingError + + Auth_OpenID_EncodingError + + ( &$response) +
+ +
    +
  • + + &$response
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_FailureResponse.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_FailureResponse.html new file mode 100644 index 000000000..631ee84e7 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_FailureResponse.html @@ -0,0 +1,172 @@ + + + + + + Docs For Class Auth_OpenID_FailureResponse + + + + +
+

Class Auth_OpenID_FailureResponse

+ + +
+
Description
+ +
+ +

A response with a status of Auth_OpenID_FAILURE. Indicates that the OpenID protocol has failed. This could be locally or remotely triggered. This has three relevant attributes:

+

identity_url - The identity URL for which authentication was attempted, if it can be determined. Otherwise, null.

message - A message indicating why the request failed, if one is supplied. Otherwise, null.

status - Auth_OpenID_FAILURE.

+

+ Located in /Auth/OpenID/Consumer.php (line 1120) +

+ + +
Auth_OpenID_ConsumerResponse
+   |
+   --Auth_OpenID_FailureResponse
+ +
+
+ + + + +
+
Variable Summary
+ +
+
+
+ mixed + $status +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_FailureResponse + Auth_OpenID_FailureResponse + ( $endpoint, [ $message = null]) +
+
+
+
+ + +
+
Variables
+ +
+ + +
+ +
+ + mixed + $status + = Auth_OpenID_FAILURE (line 1121) + +
+ + + + +
+
Redefinition of:
+
+
Auth_OpenID_ConsumerResponse::$status
+
+ + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_FailureResponse (line 1123) +
+ + + +
+ Auth_OpenID_FailureResponse + + Auth_OpenID_FailureResponse + + ( $endpoint, [ $message = null]) +
+ +
    +
  • + + $endpoint
  • +
  • + + $message
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_FileStore.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_FileStore.html new file mode 100644 index 000000000..db88e53b3 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_FileStore.html @@ -0,0 +1,528 @@ + + + + + + Docs For Class Auth_OpenID_FileStore + + + + +
+

Class Auth_OpenID_FileStore

+ + +
+
Description
+ +
+ +

This is a filesystem-based store for OpenID associations and

+

nonces. This store should be safe for use in concurrent systems on both windows and unix (excluding NFS filesystems). There are a couple race conditions in the system, but those failure cases have been set up in such a way that the worst-case behavior is someone having to try to log in a second time.

Most of the methods of this class are implementation details. People wishing to just use this store need only pay attention to the constructor.

+ +

+ Located in /Auth/OpenID/FileStore.php (line 39) +

+ + +
Auth_OpenID_OpenIDStore
+   |
+   --Auth_OpenID_FileStore
+ +
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_FileStore + Auth_OpenID_FileStore + (string $directory) +
+ +
+ void + clean + () +
+ +
+ string + createAuthKey + () +
+ +
+ void + destroy + () +
+ +
+ mixed + getAssociation + ( $server_url, [ $handle = null]) +
+ +
+ string + getAssociationFilename + ( $server_url,  $handle) +
+ +
+ string + getAuthKey + () +
+ +
+ mixed + readAuthKey + () +
+ +
+ bool + removeAssociation + ( $server_url,  $handle) +
+ +
+ void + storeAssociation + ( $server_url,  $association) +
+ +
+ void + storeNonce + ( $nonce) +
+ +
+ bool + useNonce + ( $nonce) +
+
+
+
+ + +
+
Variables
+ +
+ +

Inherited Variables

+ +

Inherited from Auth_OpenID_OpenIDStore

+
+ + Auth_OpenID_OpenIDStore::$AUTH_KEY_LEN
+
+
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_FileStore (line 49) +
+ + +

Initializes a new Auth_OpenID_FileStore. This initializes the nonce and association directories, which are subdirectories of the directory passed in.

+ +
+ Auth_OpenID_FileStore + + Auth_OpenID_FileStore + + (string $directory) +
+ +
    +
  • + string + $directory: This is the directory to put the store directories in.
  • +
+ + +
+ +
+ +
+ clean (line 486) +
+ + +

Remove expired entries from the database. This is potentially expensive, so only run when it is acceptable to take time.

+ +
+ void + + clean + + () +
+ + + +
+ +
+ +
+ createAuthKey (line 152) +
+ + +

Generate a new random auth key and safely store it in the location specified by $this->auth_key_name.

+ +
+ string + + createAuthKey + + () +
+ + + +
+ +
+ +
+ destroy (line 79) +
+ + + +
+ void + + destroy + + () +
+ + + +
+ +
+ +
+ getAssociation (line 306) +
+ + +

Retrieve an association. If no handle is specified, return the association with the most recent issue time.

+ +
+ mixed + + getAssociation + + ( $server_url, [ $handle = null]) +
+ +
    +
  • + + $server_url
  • +
  • + + $handle
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::getAssociation()
+
This method returns an Association object from storage that matches the server URL and, if specified, handle. It returns null if no such association is found or if the matching association is expired.
+
+ +
+ +
+ +
+ getAssociationFilename (line 224) +
+ + +

Create a unique filename for a given server url and

+

handle. This implementation does not assume anything about the format of the handle. The filename that is returned will contain the domain name from the server URL for ease of human inspection of the data directory.

+ +
+ string + + getAssociationFilename + + ( $server_url,  $handle) +
+ +
    +
  • + + $server_url
  • +
  • + + $handle
  • +
+ + +
+ +
+ +
+ getAuthKey (line 192) +
+ + +

Retrieve the auth key from the file specified by $this->auth_key_name, creating it if it does not exist.

+ +
+ string + + getAuthKey + + () +
+ + +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::getAuthKey()
+
This method returns a key used to sign the tokens, to ensure that they haven't been tampered with in transit. It should return the same key every time it is called. The key returned should be AUTH_KEY_LEN bytes long.
+
+ +
+ +
+ +
+ readAuthKey (line 128) +
+ + +

Read the auth key from the auth key file. Will return None if there is currently no key.

+ +
+ mixed + + readAuthKey + + () +
+ + + +
+ +
+ +
+ removeAssociation (line 413) +
+ + +

Remove an association if it exists. Do nothing if it does not.

+ +
+ bool + + removeAssociation + + ( $server_url,  $handle) +
+ +
    +
  • + + $server_url
  • +
  • + + $handle
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::removeAssociation()
+
This method removes the matching association if it's found, and returns whether the association was removed or not.
+
+ +
+ +
+ +
+ storeAssociation (line 256) +
+ + +

Store an association in the association directory.

+ +
+ void + + storeAssociation + + ( $server_url,  $association) +
+ +
    +
  • + + $server_url
  • +
  • + + $association
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::storeAssociation()
+
This method puts an Association object into storage, retrievable by server URL and handle.
+
+ +
+ +
+ +
+ storeNonce (line 432) +
+ + +

Mark this nonce as present.

+ +
+ void + + storeNonce + + ( $nonce) +
+ +
    +
  • + + $nonce
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::storeNonce()
+
Stores a nonce. This is used by the consumer to prevent replay attacks.
+
+ +
+ +
+ +
+ useNonce (line 454) +
+ + +

Return whether this nonce is present. As a side effect, mark it as no longer present.

+ +
+ bool + + useNonce + + ( $nonce) +
+ +
    +
  • + + $nonce
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::useNonce()
+
This method is called when the library is attempting to use a nonce. If the nonce is in the store, this method removes it and returns a value which evaluates as true. Otherwise it returns a value which evaluates as false.
+
+ +
+

Inherited Methods

+ + +

Inherited From Auth_OpenID_OpenIDStore

+
+ Auth_OpenID_OpenIDStore::getAssociation()
+ Auth_OpenID_OpenIDStore::getAuthKey()
+ Auth_OpenID_OpenIDStore::isDumb()
+ Auth_OpenID_OpenIDStore::removeAssociation()
+ Auth_OpenID_OpenIDStore::reset()
+ Auth_OpenID_OpenIDStore::storeAssociation()
+ Auth_OpenID_OpenIDStore::storeNonce()
+ Auth_OpenID_OpenIDStore::useNonce()
+
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_MalformedReturnURL.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_MalformedReturnURL.html new file mode 100644 index 000000000..aca26bf51 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_MalformedReturnURL.html @@ -0,0 +1,118 @@ + + + + + + Docs For Class Auth_OpenID_MalformedReturnURL + + + + +
+

Class Auth_OpenID_MalformedReturnURL

+ + +
+
Description
+ +
+ +

An error indicating that the return_to URL is malformed.

+

+ Located in /Auth/OpenID/Server.php (line 249) +

+ + +
Auth_OpenID_ServerError
+   |
+   --Auth_OpenID_MalformedReturnURL
+ +
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_MalformedReturnURL + Auth_OpenID_MalformedReturnURL + ( $query,  $return_to) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_MalformedReturnURL (line 250) +
+ + + +
+ Auth_OpenID_MalformedReturnURL + + Auth_OpenID_MalformedReturnURL + + ( $query,  $return_to) +
+ +
    +
  • + + $query
  • +
  • + + $return_to
  • +
+ + +
+

Inherited Methods

+ + +

Inherited From Auth_OpenID_ServerError

+
+ Auth_OpenID_ServerError::encodeToKVForm()
+ Auth_OpenID_ServerError::encodeToURL()
+ Auth_OpenID_ServerError::hasReturnTo()
+ Auth_OpenID_ServerError::toString()
+ Auth_OpenID_ServerError::whichEncoding()
+
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_MalformedTrustRoot.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_MalformedTrustRoot.html new file mode 100644 index 000000000..2aa34ef2b --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_MalformedTrustRoot.html @@ -0,0 +1,116 @@ + + + + + + Docs For Class Auth_OpenID_MalformedTrustRoot + + + + +
+

Class Auth_OpenID_MalformedTrustRoot

+ + +
+
Description
+ +
+ +

This error is returned when the trust_root value is malformed.

+

+ Located in /Auth/OpenID/Server.php (line 262) +

+ + +
Auth_OpenID_ServerError
+   |
+   --Auth_OpenID_MalformedTrustRoot
+ +
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ void + toString + () +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ toString (line 263) +
+ + + +
+ void + + toString + + () +
+ + +
+
Redefinition of:
+
+
Auth_OpenID_ServerError::toString()
+
Returns this error message.
+
+ +
+

Inherited Methods

+ + +

Inherited From Auth_OpenID_ServerError

+
+ Auth_OpenID_ServerError::encodeToKVForm()
+ Auth_OpenID_ServerError::encodeToURL()
+ Auth_OpenID_ServerError::hasReturnTo()
+ Auth_OpenID_ServerError::toString()
+ Auth_OpenID_ServerError::whichEncoding()
+
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_MySQLStore.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_MySQLStore.html new file mode 100644 index 000000000..33ed8d24a --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_MySQLStore.html @@ -0,0 +1,128 @@ + + + + + + Docs For Class Auth_OpenID_MySQLStore + + + + +
+

Class Auth_OpenID_MySQLStore

+ + +
+
Description
+ +
+ +

An SQL store that uses MySQL as its backend.

+ +

+ Located in /Auth/OpenID/MySQLStore.php (line 19) +

+ + +
Auth_OpenID_OpenIDStore
+   |
+   --Auth_OpenID_SQLStore
+      |
+      --Auth_OpenID_MySQLStore
+ +
+
+ + + + + + +
+
Variables
+ +
+ +

Inherited Variables

+ +

Inherited from Auth_OpenID_OpenIDStore

+
+ + Auth_OpenID_OpenIDStore::$AUTH_KEY_LEN
+
+
+ +
+
+ + + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_OpenIDStore.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_OpenIDStore.html new file mode 100644 index 000000000..819185451 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_OpenIDStore.html @@ -0,0 +1,550 @@ + + + + + + Docs For Class Auth_OpenID_OpenIDStore + + + + +
+

Class Auth_OpenID_OpenIDStore

+ + +
+
Description
+ +
+ +

This is the interface for the store objects the OpenID library

+

uses. It is a single class that provides all of the persistence mechanisms that the OpenID library needs, for both servers and consumers. If you want to create an SQL-driven store, please see then Auth_OpenID_SQLStore class.

+ +

+ Located in /Auth/OpenID/Interface.php (line 26) +

+ + +

+	
+			
+
+ + +
+
Direct descendents
+ +
+ + + + + + + + + + + + + + + + + +
ClassDescription
Auth_OpenID_DumbStore + This is a store for use in the worst case, when you have no way of saving state on the consumer site. Using this store makes the consumer vulnerable to replay attacks, as it's unable to use nonces. Avoid using this store if it is at all possible. +
Auth_OpenID_FileStore + This is a filesystem-based store for OpenID associations and +
Auth_OpenID_SQLStore + This is the parent class for the SQL stores, which contains the logic common to all of the SQL stores. +
+
+
+ + + +
+
Variable Summary
+ +
+
+
+ integer + $AUTH_KEY_LEN +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ Association + getAssociation + (string $server_url, [mixed $handle = null]) +
+ +
+ string + getAuthKey + () +
+ +
+ bool + isDumb + () +
+ +
+ mixed + removeAssociation + (string $server_url, string $handle) +
+ +
+ void + reset + () +
+ +
+ void + storeAssociation + (string $server_url, Association $association) +
+ +
+ null + storeNonce + (string $nonce) +
+ +
+ bool + useNonce + (string $nonce) +
+
+
+
+ + +
+
Variables
+ +
+ + +
+ +
+ + integer + $AUTH_KEY_LEN + = 20 (line 31) + +
+ + +
    +
  • var: The length of the auth key that should be returned by the getAuthKey method.
  • +
+ + + + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ getAssociation (line 82) +
+ + +

This method returns an Association object from storage that matches the server URL and, if specified, handle. It returns null if no such association is found or if the matching association is expired.

+

If no handle is specified, the store may return any association which matches the server URL. If multiple associations are valid, the recommended return value for this method is the one that will remain valid for the longest duration.

This method is allowed (and encouraged) to garbage collect expired associations when found. This method must not return expired associations.

+
    +
  • return: The Association for the given identity server.
  • +
+ +
+ Association + + getAssociation + + (string $server_url, [mixed $handle = null]) +
+ +
    +
  • + string + $server_url: The URL of the identity server to get the association for. Because of the way the server portion of the library uses this interface, don't assume there are any limitations on the character set of the input string. In particular, expect to see unescaped non-url-safe characters in the server_url field.
  • +
  • + mixed + $handle: This optional parameter is the handle of the specific association to get. If no specific handle is provided, any valid association matching the server URL is returned.
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ getAuthKey (line 157) +
+ + +

This method returns a key used to sign the tokens, to ensure that they haven't been tampered with in transit. It should return the same key every time it is called. The key returned should be AUTH_KEY_LEN bytes long.

+
    +
  • return: The key. It should be AUTH_KEY_LEN bytes in length, and use the full range of byte values. That is, it should be treated as a lump of binary data stored in a string.
  • +
+ +
+ string + + getAuthKey + + () +
+ + + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ isDumb (line 175) +
+ + +

This method must return true if the store is a dumb-mode-style store. Unlike all other methods in this class, this one provides a default implementation, which returns false.

+

In general, any custom subclass of Auth_OpenID_OpenIDStore won't override this method, as custom subclasses are only likely to be created when the store is fully functional.

+
    +
  • return: true if the store works fully, false if the consumer will have to use dumb mode to use this store.
  • +
+ +
+ bool + + isDumb + + () +
+ + + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ removeAssociation (line 106) +
+ + +

This method removes the matching association if it's found, and returns whether the association was removed or not.

+
    +
  • return: Returns whether or not the given association existed.
  • +
+ +
+ mixed + + removeAssociation + + (string $server_url, string $handle) +
+ +
    +
  • + string + $server_url: The URL of the identity server the association to remove belongs to. Because of the way the server portion of the library uses this interface, don't assume there are any limitations on the character set of the input string. In particular, expect to see unescaped non-url-safe characters in the server_url field.
  • +
  • + string + $handle: This is the handle of the association to remove. If there isn't an association found that matches both the given URL and handle, then there was no matching handle found.
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ reset (line 183) +
+ + +

Removes all entries from the store; implementation is optional.

+ +
+ void + + reset + + () +
+ + + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ storeAssociation (line 46) +
+ + +

This method puts an Association object into storage, retrievable by server URL and handle.

+ +
+ void + + storeAssociation + + (string $server_url, Association $association) +
+ +
    +
  • + string + $server_url: The URL of the identity server that this association is with. Because of the way the server portion of the library uses this interface, don't assume there are any limitations on the character set of the input string. In particular, expect to see unescaped non-url-safe characters in the server_url field.
  • +
  • + Association + $association: The Association to store.
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ storeNonce (line 120) +
+ + +

Stores a nonce. This is used by the consumer to prevent replay attacks.

+ +
+ null + + storeNonce + + (string $nonce) +
+ +
    +
  • + string + $nonce: The nonce to store.
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ useNonce (line 141) +
+ + +

This method is called when the library is attempting to use a nonce. If the nonce is in the store, this method removes it and returns a value which evaluates as true. Otherwise it returns a value which evaluates as false.

+

This method is allowed and encouraged to treat nonces older than some period (a very conservative window would be 6 hours, for example) as no longer existing, and return False and remove them.

+
    +
  • return: Whether or not the nonce was valid.
  • +
+ +
+ bool + + useNonce + + (string $nonce) +
+ +
    +
  • + string + $nonce: The nonce to use.
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_PlainTextConsumerSession.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_PlainTextConsumerSession.html new file mode 100644 index 000000000..3c19f48f4 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_PlainTextConsumerSession.html @@ -0,0 +1,186 @@ + + + + + + Docs For Class Auth_OpenID_PlainTextConsumerSession + + + + +
+

Class Auth_OpenID_PlainTextConsumerSession

+ + +
+
Description
+ +
+ +

+ Located in /Auth/OpenID/Consumer.php (line 452) +

+ + +

+	
+			
+
+ + + + +
+
Variable Summary
+ +
+
+
+ mixed + $session_type +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ void + extractSecret + ( $response) +
+ +
+ void + getRequest + () +
+
+
+
+ + +
+
Variables
+ +
+ + +
+ +
+ + mixed + $session_type + = null (line 453) + +
+ + + + + + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ extractSecret (line 460) +
+ + + +
+ void + + extractSecret + + ( $response) +
+ +
    +
  • + + $response
  • +
+ + +
+ +
+ +
+ getRequest (line 455) +
+ + + +
+ void + + getRequest + + () +
+ + + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_PlainTextServerSession.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_PlainTextServerSession.html new file mode 100644 index 000000000..7a3b66963 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_PlainTextServerSession.html @@ -0,0 +1,192 @@ + + + + + + Docs For Class Auth_OpenID_PlainTextServerSession + + + + +
+

Class Auth_OpenID_PlainTextServerSession

+ + +
+
Description
+ +
+ +

+ Located in /Auth/OpenID/Server.php (line 373) +

+ + +

+	
+			
+
+ + + + +
+
Variable Summary
+ +
+
+
+ mixed + $session_type +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ void + answer + ( $secret) +
+ +
+ void + fromQuery + ( $unused_request) +
+
+
+
+ + +
+
Variables
+ +
+ + +
+ +
+ + mixed + $session_type + = 'plaintext' (line 378) + +
+ + +

An object that knows how to handle association requests with no session type.

+ + + + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ answer (line 385) +
+ + + +
+ void + + answer + + ( $secret) +
+ +
    +
  • + + $secret
  • +
+ + +
+ +
+ +
+ fromQuery (line 380) +
+ + + +
+ void + + fromQuery + + ( $unused_request) +
+ +
    +
  • + + $unused_request
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_PostgreSQLStore.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_PostgreSQLStore.html new file mode 100644 index 000000000..33d777f38 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_PostgreSQLStore.html @@ -0,0 +1,128 @@ + + + + + + Docs For Class Auth_OpenID_PostgreSQLStore + + + + +
+

Class Auth_OpenID_PostgreSQLStore

+ + +
+
Description
+ +
+ +

An SQL store that uses PostgreSQL as its backend.

+ +

+ Located in /Auth/OpenID/PostgreSQLStore.php (line 19) +

+ + +
Auth_OpenID_OpenIDStore
+   |
+   --Auth_OpenID_SQLStore
+      |
+      --Auth_OpenID_PostgreSQLStore
+ +
+
+ + + + + + +
+
Variables
+ +
+ +

Inherited Variables

+ +

Inherited from Auth_OpenID_OpenIDStore

+
+ + Auth_OpenID_OpenIDStore::$AUTH_KEY_LEN
+
+
+ +
+
+ + + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SQLStore.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SQLStore.html new file mode 100644 index 000000000..31979ca78 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SQLStore.html @@ -0,0 +1,720 @@ + + + + + + Docs For Class Auth_OpenID_SQLStore + + + + +
+

Class Auth_OpenID_SQLStore

+ + +
+
Description
+ +
+ +

This is the parent class for the SQL stores, which contains the logic common to all of the SQL stores.

+

The table names used are determined by the class variables settings_table_name, associations_table_name, and nonces_table_name. To change the name of the tables used, pass new table names into the constructor.

To create the tables with the proper schema, see the createTables method.

This class shouldn't be used directly. Use one of its subclasses instead, as those contain the code necessary to use a specific database. If you're an OpenID integrator and you'd like to create an SQL-driven store that wraps an application's database abstraction, be sure to create a subclass of Auth_OpenID_DatabaseConnection that calls the application's database abstraction calls. Then, pass an instance of your new database connection class to your SQLStore subclass constructor.

All methods other than the constructor and createTables should be considered implementation details.

+ +

+ Located in /Auth/OpenID/SQLStore.php (line 57) +

+ + +
Auth_OpenID_OpenIDStore
+   |
+   --Auth_OpenID_SQLStore
+ +
+
+ + +
+
Direct descendents
+ +
+ + + + + + + + + + + + + + + + + +
ClassDescription
Auth_OpenID_SQLiteStore + An SQL store that uses SQLite as its backend. +
Auth_OpenID_PostgreSQLStore + An SQL store that uses PostgreSQL as its backend. +
Auth_OpenID_MySQLStore + An SQL store that uses MySQL as its backend. +
+
+
+ + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_SQLStore + Auth_OpenID_SQLStore + (connection $connection, [string $settings_table = null], [associations_table: $associations_table = null], [nonces_table: $nonces_table = null]) +
+ +
+ void + blobDecode + ( $blob) +
+ +
+ void + blobEncode + ( $str) +
+ +
+ void + createTables + () +
+ +
+ void + create_assoc_table + () +
+ +
+ void + create_nonce_table + () +
+ +
+ void + create_settings_table + () +
+ +
+ void + getAssociation + ( $server_url, [ $handle = null]) +
+ +
+ void + getAuthKey + () +
+ +
+ void + isError + ( $value) +
+ +
+ void + removeAssociation + ( $server_url,  $handle) +
+ +
+ void + reset + () +
+ +
+ void + resultToBool + ( $obj) +
+ +
+ void + setSQL + () +
+ +
+ void + storeAssociation + ( $server_url,  $association) +
+ +
+ void + tableExists + ( $table_name) +
+ +
+ void + useNonce + ( $nonce) +
+
+
+
+ + +
+
Variables
+ +
+ +

Inherited Variables

+ +

Inherited from Auth_OpenID_OpenIDStore

+
+ + Auth_OpenID_OpenIDStore::$AUTH_KEY_LEN
+
+
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_SQLStore (line 82) +
+ + +

This creates a new SQLStore instance. It requires an established database connection be given to it, and it allows overriding the default table names.

+ +
+ Auth_OpenID_SQLStore + + Auth_OpenID_SQLStore + + (connection $connection, [string $settings_table = null], [associations_table: $associations_table = null], [nonces_table: $nonces_table = null]) +
+ +
    +
  • + connection + $connection: This must be an established connection to a database of the correct type for the SQLStore subclass you're using. This must either be an PEAR DB connection handle or an instance of a subclass of Auth_OpenID_DatabaseConnection.
  • +
  • + string + $settings_table: This is an optional parameter to specify the name of the table used for this store's settings. The default value is 'oid_settings'.
  • +
  • + associations_table: + $associations_table: This is an optional parameter to specify the name of the table used for storing associations. The default value is 'oid_associations'.
  • +
  • + nonces_table: + $nonces_table: This is an optional parameter to specify the name of the table used for storing nonces. The default value is 'oid_nonces'.
  • +
+ + +
+ +
+ +
+ blobDecode (line 301) +
+ + + +
+ void + + blobDecode + + ( $blob) +
+ +
    +
  • + + $blob
  • +
+ + +
+ +
+ +
+ blobEncode (line 306) +
+ + + +
+ void + + blobEncode + + ( $str) +
+ +
    +
  • + + $str
  • +
+ + +
+ +
+ +
+ createTables (line 311) +
+ + + +
+ void + + createTables + + () +
+ + + +
+ +
+ +
+ create_assoc_table (line 335) +
+ + + +
+ void + + create_assoc_table + + () +
+ + + +
+ +
+ +
+ create_nonce_table (line 326) +
+ + + +
+ void + + create_nonce_table + + () +
+ + + +
+ +
+ +
+ create_settings_table (line 344) +
+ + + +
+ void + + create_settings_table + + () +
+ + + +
+ +
+ +
+ getAssociation (line 475) +
+ + + +
+ void + + getAssociation + + ( $server_url, [ $handle = null]) +
+ +
    +
  • + + $server_url
  • +
  • + + $handle
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::getAssociation()
+
This method returns an Association object from storage that matches the server URL and, if specified, handle. It returns null if no such association is found or if the matching association is expired.
+
+ +
+ +
+ +
+ getAuthKey (line 370) +
+ + + +
+ void + + getAuthKey + + () +
+ + +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::getAuthKey()
+
This method returns a key used to sign the tokens, to ensure that they haven't been tampered with in transit. It should return the same key every time it is called. The key returned should be AUTH_KEY_LEN bytes long.
+
+ +
+ +
+ +
+ isError (line 177) +
+ + +

Returns true if $value constitutes a database error; returns false otherwise.

+ +
+ void + + isError + + ( $value) +
+ +
    +
  • + + $value
  • +
+ + +
+ +
+ +
+ removeAssociation (line 458) +
+ + + +
+ void + + removeAssociation + + ( $server_url,  $handle) +
+ +
    +
  • + + $server_url
  • +
  • + + $handle
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::removeAssociation()
+
This method removes the matching association if it's found, and returns whether the association was removed or not.
+
+ +
+ +
+ +
+ reset (line 209) +
+ + +

Resets the store by removing all records from the store's tables.

+ +
+ void + + reset + + () +
+ + +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::reset()
+
Removes all entries from the store; implementation is optional.
+
+ +
+ +
+ +
+ resultToBool (line 187) +
+ + +

Converts a query result to a boolean. If the result is a database error according to $this->isError(), this returns false; otherwise, this returns true.

+ +
+ void + + resultToBool + + ( $obj) +
+ +
    +
  • + + $obj
  • +
+ + +
+ +
+ +
+ setSQL (line 201) +
+ + +

This method should be overridden by subclasses. This method is called by the constructor to set values in $this->sql, which is an array keyed on sql name.

+ +
+ void + + setSQL + + () +
+ + + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ storeAssociation (line 412) +
+ + + +
+ void + + storeAssociation + + ( $server_url,  $association) +
+ +
    +
  • + + $server_url
  • +
  • + + $association
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::storeAssociation()
+
This method puts an Association object into storage, retrievable by server URL and handle.
+
+ +
+ +
+ +
+ tableExists (line 166) +
+ + + +
+ void + + tableExists + + ( $table_name) +
+ +
    +
  • + + $table_name
  • +
+ + +
+ +
+ +
+ useNonce (line 575) +
+ + + +
+ void + + useNonce + + ( $nonce) +
+ +
    +
  • + + $nonce
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_OpenIDStore::useNonce()
+
This method is called when the library is attempting to use a nonce. If the nonce is in the store, this method removes it and returns a value which evaluates as true. Otherwise it returns a value which evaluates as false.
+
+ +
+

Inherited Methods

+ + +

Inherited From Auth_OpenID_OpenIDStore

+
+ Auth_OpenID_OpenIDStore::getAssociation()
+ Auth_OpenID_OpenIDStore::getAuthKey()
+ Auth_OpenID_OpenIDStore::isDumb()
+ Auth_OpenID_OpenIDStore::removeAssociation()
+ Auth_OpenID_OpenIDStore::reset()
+ Auth_OpenID_OpenIDStore::storeAssociation()
+ Auth_OpenID_OpenIDStore::storeNonce()
+ Auth_OpenID_OpenIDStore::useNonce()
+
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SQLiteStore.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SQLiteStore.html new file mode 100644 index 000000000..05727a546 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SQLiteStore.html @@ -0,0 +1,175 @@ + + + + + + Docs For Class Auth_OpenID_SQLiteStore + + + + +
+

Class Auth_OpenID_SQLiteStore

+ + +
+
Description
+ +
+ +

An SQL store that uses SQLite as its backend.

+ +

+ Located in /Auth/OpenID/SQLiteStore.php (line 19) +

+ + +
Auth_OpenID_OpenIDStore
+   |
+   --Auth_OpenID_SQLStore
+      |
+      --Auth_OpenID_SQLiteStore
+ +
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ void + setSQL + () +
+
+
+
+ + +
+
Variables
+ +
+ +

Inherited Variables

+ +

Inherited from Auth_OpenID_OpenIDStore

+
+ + Auth_OpenID_OpenIDStore::$AUTH_KEY_LEN
+
+
+ +
+
+ + + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Server.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Server.html new file mode 100644 index 000000000..b1b8ee96a --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Server.html @@ -0,0 +1,202 @@ + + + + + + Docs For Class Auth_OpenID_Server + + + + +
+

Class Auth_OpenID_Server

+ + +
+
Description
+ +
+ +

An object that implements the OpenID protocol for a single URL.

+

Use this object by calling getOpenIDResponse when you get any request for the server URL.

+

+ Located in /Auth/OpenID/Server.php (line 1235) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_Server + Auth_OpenID_Server + ( &$store) +
+ +
+ void + decodeRequest + ( &$query) +
+ +
+ void + encodeResponse + ( &$response) +
+ +
+ Auth_OpenID_Response + handleRequest + (Auth_OpenID_Request $request) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_Server (line 1236) +
+ + + +
+ Auth_OpenID_Server + + Auth_OpenID_Server + + ( &$store) +
+ +
    +
  • + + &$store
  • +
+ + +
+ +
+ +
+ decodeRequest (line 1298) +
+ + +

Decodes a query args array into the appropriate Auth_OpenID_Request object.

+ +
+ void + + decodeRequest + + ( &$query) +
+ +
    +
  • + + &$query
  • +
+ + +
+ +
+ +
+ encodeResponse (line 1289) +
+ + +

Encodes as response in the appropriate format suitable for sending to the user agent.

+ +
+ void + + encodeResponse + + ( &$response) +
+ +
    +
  • + + &$response
  • +
+ + +
+ +
+ +
+ handleRequest (line 1255) +
+ + +

Handle a request. Given an Auth_OpenID_Request object, call the appropriate Auth_OpenID_Server method to process the request and generate a response.

+
    +
  • return: A response object capable of generating a user-agent reply.
  • +
+ +
+ Auth_OpenID_Response + + handleRequest + + (Auth_OpenID_Request $request) +
+ +
    +
  • + Auth_OpenID_Request + $request: An Auth_OpenID_Request returned by Auth_OpenID_Server::decodeRequest.
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_ServerError.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_ServerError.html new file mode 100644 index 000000000..106e70b3f --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_ServerError.html @@ -0,0 +1,255 @@ + + + + + + Docs For Class Auth_OpenID_ServerError + + + + +
+

Class Auth_OpenID_ServerError

+ + +
+
Description
+ +
+ +

An error class which gets instantiated and returned whenever an OpenID protocol error occurs. Be prepared to use this in place of an ordinary server response.

+

+ Located in /Auth/OpenID/Server.php (line 148) +

+ + +

+	
+			
+
+ + +
+
Direct descendents
+ +
+ + + + + + + + + + + + + + + + + +
ClassDescription
Auth_OpenID_MalformedReturnURL + An error indicating that the return_to URL is malformed. +
Auth_OpenID_MalformedTrustRoot + This error is returned when the trust_root value is malformed. +
Auth_OpenID_UntrustedReturnURL + An error that indicates that the given return_to is not under the given trust_root. +
+
+
+ + + + +
+
Method Summary
+ +
+
+ +
+ void + encodeToKVForm + () +
+ +
+ void + encodeToURL + () +
+ +
+ void + hasReturnTo + () +
+ +
+ void + toString + () +
+ +
+ void + whichEncoding + () +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ encodeToKVForm (line 199) +
+ + +

Encodes the response to key-value form. This is a machine-readable format used to respond to messages which came directly from the consumer and not through the user-agent. See the OpenID specification.

+ +
+ void + + encodeToKVForm + + () +
+ + + +
+ +
+ +
+ encodeToURL (line 178) +
+ + +

Encodes this error's response as a URL suitable for redirection. If the response has no return_to, another Auth_OpenID_ServerError is returned.

+ +
+ void + + encodeToURL + + () +
+ + + +
+ +
+ +
+ hasReturnTo (line 162) +
+ + +

Returns the return_to URL for the request which caused this error.

+ +
+ void + + hasReturnTo + + () +
+ + + +
+ +
+ +
+ toString (line 234) +
+ + +

Returns this error message.

+ +
+ void + + toString + + () +
+ + + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ whichEncoding (line 211) +
+ + +

Returns one of $_Auth_OpenID_Encode_Url, $_Auth_OpenID_Encode_Kvform, or null, depending on the type of encoding expected for this error's payload.

+ +
+ void + + whichEncoding + + () +
+ + + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_ServerRequest.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_ServerRequest.html new file mode 100644 index 000000000..ad1224308 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_ServerRequest.html @@ -0,0 +1,101 @@ + + + + + + Docs For Class Auth_OpenID_ServerRequest + + + + +
+

Class Auth_OpenID_ServerRequest

+ + +
+
Description
+ +
+ +

Object that holds the state of a request to the OpenID server

+

With accessor functions to get at the internal request data.

+ +

+ Located in /Auth/OpenID/ServerRequest.php (line 30) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_ServerRequest + Auth_OpenID_ServerRequest + () +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_ServerRequest (line 31) +
+ + + +
+ Auth_OpenID_ServerRequest + + Auth_OpenID_ServerRequest + + () +
+ + + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SetupNeededResponse.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SetupNeededResponse.html new file mode 100644 index 000000000..7a0b59d04 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SetupNeededResponse.html @@ -0,0 +1,172 @@ + + + + + + Docs For Class Auth_OpenID_SetupNeededResponse + + + + +
+

Class Auth_OpenID_SetupNeededResponse

+ + +
+
Description
+ +
+ +

A response with a status of Auth_OpenID_SETUP_NEEDED. Indicates that the request was in immediate mode, and the server is unable to authenticate the user without further interaction.

+

identity_url - The identity URL for which authentication was attempted.

setup_url - A URL that can be used to send the user to the server to set up for authentication. The user should be redirected in to the setup_url, either in the current window or in a new browser window.

status - Auth_OpenID_SETUP_NEEDED.

+

+ Located in /Auth/OpenID/Consumer.php (line 1174) +

+ + +
Auth_OpenID_ConsumerResponse
+   |
+   --Auth_OpenID_SetupNeededResponse
+ +
+
+ + + + +
+
Variable Summary
+ +
+
+
+ mixed + $status +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_SetupNeededResponse + Auth_OpenID_SetupNeededResponse + ( $endpoint, [ $setup_url = null]) +
+
+
+
+ + +
+
Variables
+ +
+ + +
+ +
+ + mixed + $status + = Auth_OpenID_SETUP_NEEDED (line 1175) + +
+ + + + +
+
Redefinition of:
+
+
Auth_OpenID_ConsumerResponse::$status
+
+ + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_SetupNeededResponse (line 1177) +
+ + + +
+ Auth_OpenID_SetupNeededResponse + + Auth_OpenID_SetupNeededResponse + + ( $endpoint, [ $setup_url = null]) +
+ +
    +
  • + + $endpoint
  • +
  • + + $setup_url
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Signatory.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Signatory.html new file mode 100644 index 000000000..ce6e2ec57 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_Signatory.html @@ -0,0 +1,381 @@ + + + + + + Docs For Class Auth_OpenID_Signatory + + + + +
+

Class Auth_OpenID_Signatory

+ + +
+
Description
+ +
+ +

Responsible for the signature of query data and the verification of OpenID signature values.

+

+ Located in /Auth/OpenID/Server.php (line 893) +

+ + +

+	
+			
+
+ + + + +
+
Variable Summary
+ +
+
+
+ mixed + $dumb_key +
+
+ mixed + $normal_key +
+
+ mixed + $SECRET_LIFETIME +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_Signatory + Auth_OpenID_Signatory + ( &$store) +
+ +
+ void + createAssociation + ([ $dumb = true], [ $assoc_type = 'HMAC-SHA1']) +
+ +
+ void + getAssociation + ( $assoc_handle,  $dumb) +
+ +
+ void + invalidate + ( $assoc_handle,  $dumb) +
+ +
+ void + sign + ( $response) +
+ +
+ void + verify + ( $assoc_handle,  $sig,  $signed_pairs) +
+
+
+
+ + +
+
Variables
+ +
+ + +
+ +
+ + mixed + $dumb_key + = 'http://localhost/|dumb' (line 903) + +
+ + + + + + + +
+ +
+ +
+ + mixed + $normal_key + = 'http://localhost/|normal' (line 902) + +
+ + + + + + + +
+ +
+ +
+ + mixed + $SECRET_LIFETIME + = 1209600 (line 896) + +
+ + + + + + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_Signatory (line 908) +
+ + +

Create a new signatory using a given store.

+ +
+ Auth_OpenID_Signatory + + Auth_OpenID_Signatory + + ( &$store) +
+ +
    +
  • + + &$store
  • +
+ + +
+ +
+ +
+ createAssociation (line 963) +
+ + +

Make a new association.

+ +
+ void + + createAssociation + + ([ $dumb = true], [ $assoc_type = 'HMAC-SHA1']) +
+ +
    +
  • + + $dumb
  • +
  • + + $assoc_type
  • +
+ + +
+ +
+ +
+ getAssociation (line 986) +
+ + +

Given an association handle, get the association from the store, or return a ServerError or null if something goes wrong.

+ +
+ void + + getAssociation + + ( $assoc_handle,  $dumb) +
+ +
    +
  • + + $assoc_handle
  • +
  • + + $dumb
  • +
+ + +
+ +
+ +
+ invalidate (line 1012) +
+ + +

Invalidate a given association handle.

+ +
+ void + + invalidate + + ( $assoc_handle,  $dumb) +
+ +
    +
  • + + $assoc_handle
  • +
  • + + $dumb
  • +
+ + +
+ +
+ +
+ sign (line 936) +
+ + +

Given a response, sign the fields in the response's 'signed' list, and insert the signature into the response.

+ +
+ void + + sign + + ( $response) +
+ +
    +
  • + + $response
  • +
+ + +
+ +
+ +
+ verify (line 918) +
+ + +

Verify, using a given association handle, a signature with signed key-value pairs from an HTTP request.

+ +
+ void + + verify + + ( $assoc_handle,  $sig,  $signed_pairs) +
+ +
    +
  • + + $assoc_handle
  • +
  • + + $sig
  • +
  • + + $signed_pairs
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SigningEncoder.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SigningEncoder.html new file mode 100644 index 000000000..84aff70cf --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SigningEncoder.html @@ -0,0 +1,179 @@ + + + + + + Docs For Class Auth_OpenID_SigningEncoder + + + + +
+

Class Auth_OpenID_SigningEncoder

+ + +
+
Description
+ +
+ +

An encoder which also takes care of signing fields when required.

+

+ Located in /Auth/OpenID/Server.php (line 1077) +

+ + +
Auth_OpenID_Encoder
+   |
+   --Auth_OpenID_SigningEncoder
+ +
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_SigningEncoder + Auth_OpenID_SigningEncoder + ( &$signatory) +
+ +
+ void + encode + ( &$response) +
+
+
+
+ + +
+
Variables
+ +
+ +

Inherited Variables

+ +

Inherited from Auth_OpenID_Encoder

+
+ + Auth_OpenID_Encoder::$responseFactory
+
+
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_SigningEncoder (line 1079) +
+ + + +
+ Auth_OpenID_SigningEncoder + + Auth_OpenID_SigningEncoder + + ( &$signatory) +
+ +
    +
  • + + &$signatory
  • +
+ + +
+ +
+ +
+ encode (line 1088) +
+ + +

Sign an Auth_OpenID_Response and return an Auth_OpenID_WebResponse.

+ +
+ void + + encode + + ( &$response) +
+ +
    +
  • + + &$response
  • +
+ +
+
Redefinition of:
+
+
Auth_OpenID_Encoder::encode()
+
Encode an Auth_OpenID_Response and return an Auth_OpenID_WebResponse.
+
+ +
+

Inherited Methods

+ + +

Inherited From Auth_OpenID_Encoder

+
+ Auth_OpenID_Encoder::encode()
+
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SuccessResponse.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SuccessResponse.html new file mode 100644 index 000000000..4b75a2c2a --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_SuccessResponse.html @@ -0,0 +1,201 @@ + + + + + + Docs For Class Auth_OpenID_SuccessResponse + + + + +
+

Class Auth_OpenID_SuccessResponse

+ + +
+
Description
+ +
+ +

A response with a status of Auth_OpenID_SUCCESS. Indicates that

+

this request is a successful acknowledgement from the OpenID server that the supplied URL is, indeed controlled by the requesting agent. This has three relevant attributes:

identity_url - The identity URL that has been authenticated

signed_args - The arguments in the server's response that were signed and verified.

status - Auth_OpenID_SUCCESS.

+

+ Located in /Auth/OpenID/Consumer.php (line 1041) +

+ + +
Auth_OpenID_ConsumerResponse
+   |
+   --Auth_OpenID_SuccessResponse
+ +
+
+ + + + +
+
Variable Summary
+ +
+
+
+ mixed + $status +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ void + extensionResponse + (string $prefix) +
+ +
+ string + getReturnTo + () +
+
+
+
+ + +
+
Variables
+ +
+ + +
+ +
+ + mixed + $status + = Auth_OpenID_SUCCESS (line 1042) + +
+ + + + +
+
Redefinition of:
+
+
Auth_OpenID_ConsumerResponse::$status
+
+ + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ extensionResponse (line 1074) +
+ + +

Extract signed extension data from the server's response.

+ +
+ void + + extensionResponse + + (string $prefix) +
+ +
    +
  • + string + $prefix: The extension namespace from which to extract the extension data.
  • +
+ + +
+ +
+ +
+ getReturnTo (line 1099) +
+ + +

Get the openid.return_to argument from this response.

+

This is useful for verifying that this request was initiated by this consumer.

+
    +
  • return: The return_to URL supplied to the server on the initial request, or null if the response did not contain an 'openid.return_to' argument.
  • +
+ +
+ string + + getReturnTo + + () +
+ + + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_UntrustedReturnURL.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_UntrustedReturnURL.html new file mode 100644 index 000000000..5e8b6346b --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_UntrustedReturnURL.html @@ -0,0 +1,150 @@ + + + + + + Docs For Class Auth_OpenID_UntrustedReturnURL + + + + +
+

Class Auth_OpenID_UntrustedReturnURL

+ + +
+
Description
+ +
+ +

An error that indicates that the given return_to is not under the given trust_root.

+

+ Located in /Auth/OpenID/Server.php (line 1203) +

+ + +
Auth_OpenID_ServerError
+   |
+   --Auth_OpenID_UntrustedReturnURL
+ +
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_UntrustedReturnURL + Auth_OpenID_UntrustedReturnURL + ( $return_to,  $trust_root) +
+ +
+ void + toString + () +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_UntrustedReturnURL (line 1204) +
+ + + +
+ Auth_OpenID_UntrustedReturnURL + + Auth_OpenID_UntrustedReturnURL + + ( $return_to,  $trust_root) +
+ +
    +
  • + + $return_to
  • +
  • + + $trust_root
  • +
+ + +
+ +
+ +
+ toString (line 1215) +
+ + + +
+ void + + toString + + () +
+ + +
+
Redefinition of:
+
+
Auth_OpenID_ServerError::toString()
+
Returns this error message.
+
+ +
+

Inherited Methods

+ + +

Inherited From Auth_OpenID_ServerError

+
+ Auth_OpenID_ServerError::encodeToKVForm()
+ Auth_OpenID_ServerError::encodeToURL()
+ Auth_OpenID_ServerError::hasReturnTo()
+ Auth_OpenID_ServerError::toString()
+ Auth_OpenID_ServerError::whichEncoding()
+
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_WebResponse.html b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_WebResponse.html new file mode 100644 index 000000000..9bf45754c --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/Auth_OpenID_WebResponse.html @@ -0,0 +1,189 @@ + + + + + + Docs For Class Auth_OpenID_WebResponse + + + + +
+

Class Auth_OpenID_WebResponse

+ + +
+
Description
+ +
+ +

A web-capable response object which you can use to generate a user-agent response.

+

+ Located in /Auth/OpenID/Server.php (line 864) +

+ + +

+	
+			
+
+ + + + +
+
Variable Summary
+ +
+
+
+ mixed + $body +
+
+ mixed + $code +
+
+
+
+ + +
+
Method Summary
+ +
+
+ +
+ Auth_OpenID_WebResponse + Auth_OpenID_WebResponse + ([ $code = null], [ $headers = null], [ $body = null]) +
+
+
+
+ + +
+
Variables
+ +
+ + +
+ +
+ + mixed + $body + = "" (line 866) + +
+ + + + + + + +
+ +
+ +
+ + mixed + $code + = AUTH_OPENID_HTTP_OK (line 865) + +
+ + + + + + + +
+ +
+
+ + +
+
Methods
+ +
+ + +
+ +
+ Constructor Auth_OpenID_WebResponse (line 868) +
+ + + +
+ Auth_OpenID_WebResponse + + Auth_OpenID_WebResponse + + ([ $code = null], [ $headers = null], [ $body = null]) +
+ +
    +
  • + + $code
  • +
  • + + $headers
  • +
  • + + $body
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Association.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Association.php.html new file mode 100644 index 000000000..b5f86c380 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Association.php.html @@ -0,0 +1,67 @@ + + + + + + Docs for page Association.php + + + + +
+

/Auth/OpenID/Association.php

+ + +
+
Description
+ +
+ +

This module contains code for dealing with associations between consumers and servers.

+

PHP versions 4 and 5

LICENSE: See the COPYING file included in this distribution.

+ + +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ Auth_OpenID_Association + + This class represents an association between a server and a consumer. In general, users of this library will never see instances of this object. The only exception is if you implement a custom Auth_OpenID_OpenIDStore. +
+
+
+ + + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:27 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Consumer.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Consumer.php.html new file mode 100644 index 000000000..a746d889a --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Consumer.php.html @@ -0,0 +1,382 @@ + + + + + + Docs for page Consumer.php + + + + +
+

/Auth/OpenID/Consumer.php

+ + +
+
Description
+ +
+ +

This module documents the main interface with the OpenID consumer

+

library. The only part of the library which has to be used and isn't documented in full here is the store required to create an Auth_OpenID_Consumer instance. More on the abstract store type and concrete implementations of it that are provided in the documentation for the Auth_OpenID_Consumer constructor.

OVERVIEW

The OpenID identity verification process most commonly uses the following steps, as visible to the user of this library:

  1. The user enters their OpenID into a field on the consumer's + site, and hits a login button.
  2. The consumer site discovers the user's OpenID server using the + YADIS protocol.
  3. The consumer site sends the browser a redirect to the identity + server. This is the authentication request as described in + the OpenID specification.
  4. The identity server's site sends the browser a redirect back + to the consumer site. This redirect contains the server's + response to the authentication request.
The most important part of the flow to note is the consumer's site must handle two separate HTTP requests in order to perform the full identity check.

LIBRARY DESIGN

This consumer library is designed with that flow in mind. The goal is to make it as easy as possible to perform the above steps securely.

At a high level, there are two important parts in the consumer library. The first important part is this module, which contains the interface to actually use this library. The second is the Auth_OpenID_Interface class, which describes the interface to use if you need to create a custom method for storing the state this library needs to maintain between requests.

In general, the second part is less important for users of the library to know about, as several implementations are provided which cover a wide variety of situations in which consumers may use the library.

This module contains a class, Auth_OpenID_Consumer, with methods corresponding to the actions necessary in each of steps 2, 3, and 4 described in the overview. Use of this library should be as easy as creating an Auth_OpenID_Consumer instance and calling the methods appropriate for the action the site wants to take.

STORES AND DUMB MODE

OpenID is a protocol that works best when the consumer site is able to store some state. This is the normal mode of operation for the protocol, and is sometimes referred to as smart mode. There is also a fallback mode, known as dumb mode, which is available when the consumer site is not able to store state. This mode should be avoided when possible, as it leaves the implementation more vulnerable to replay attacks.

The mode the library works in for normal operation is determined by the store that it is given. The store is an abstraction that handles the data that the consumer needs to manage between http requests in order to operate efficiently and securely.

Several store implementation are provided, and the interface is fully documented so that custom stores can be used as well. See the documentation for the Auth_OpenID_Consumer class for more information on the interface for stores. The implementations that are provided allow the consumer site to store the necessary data in several different ways, including several SQL databases and normal files on disk.

There is an additional concrete store provided that puts the system in dumb mode. This is not recommended, as it removes the library's ability to stop replay attacks reliably. It still uses time-based checking to make replay attacks only possible within a small window, but they remain possible within that window. This store should only be used if the consumer site has no way to retain data between requests at all.

IMMEDIATE MODE

In the flow described above, the user may need to confirm to the lidentity server that it's ok to authorize his or her identity. The server may draw pages asking for information from the user before it redirects the browser back to the consumer's site. This is generally transparent to the consumer site, so it is typically ignored as an implementation detail.

There can be times, however, where the consumer site wants to get a response immediately. When this is the case, the consumer can put the library in immediate mode. In immediate mode, there is an extra response possible from the server, which is essentially the server reporting that it doesn't have enough information to answer the question yet. In addition to saying that, the identity server provides a URL to which the user can be sent to provide the needed information and let the server finish handling the original request.

USING THIS LIBRARY

Integrating this library into an application is usually a relatively straightforward process. The process should basically follow this plan:

Add an OpenID login field somewhere on your site. When an OpenID is entered in that field and the form is submitted, it should make a request to the your site which includes that OpenID URL.

First, the application should instantiate the Auth_OpenID_Consumer class using the store of choice (Auth_OpenID_FileStore or one of the SQL-based stores). If the application has any sort of session framework that provides per-client state management, a dict-like object to access the session should be passed as the optional second parameter. (The default behavior is to use PHP's standard session machinery.)

Next, the application should call the Auth_OpenID_Consumer object's 'begin' method. This method takes the OpenID URL. The 'begin' method returns an Auth_OpenID_AuthRequest object.

Next, the application should call the 'redirectURL' method of the Auth_OpenID_AuthRequest object. The 'return_to' URL parameter is the URL that the OpenID server will send the user back to after attempting to verify his or her identity. The 'trust_root' is the URL (or URL pattern) that identifies your web site to the user when he or she is authorizing it. Send a redirect to the resulting URL to the user's browser.

That's the first half of the authentication process. The second half of the process is done after the user's ID server sends the user's browser a redirect back to your site to complete their login.

When that happens, the user will contact your site at the URL given as the 'return_to' URL to the Auth_OpenID_AuthRequest::redirectURL call made above. The request will have several query parameters added to the URL by the identity server as the information necessary to finish the request.

Lastly, instantiate an Auth_OpenID_Consumer instance as above and call its 'complete' method, passing in all the received query arguments.

There are multiple possible return types possible from that method. These indicate the whether or not the login was successful, and include any additional information appropriate for their type.

PHP versions 4 and 5

LICENSE: See the COPYING file included in this distribution.

+ + +
+
+ + +
+
Classes
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassDescription
+ Auth_OpenID_Consumer + + An OpenID consumer implementation that performs discovery and does session management. See the Consumer.php file documentation for more information. +
+ Auth_OpenID_DiffieHellmanConsumerSession + + +
+ Auth_OpenID_PlainTextConsumerSession + + +
+ Auth_OpenID_AuthRequest + + This class represents an authentication request from a consumer to an OpenID server. +
+ Auth_OpenID_ConsumerResponse + + The base class for responses from the Auth_OpenID_Consumer. +
+ Auth_OpenID_SuccessResponse + + A response with a status of Auth_OpenID_SUCCESS. Indicates that +
+ Auth_OpenID_FailureResponse + + A response with a status of Auth_OpenID_FAILURE. Indicates that the OpenID protocol has failed. This could be locally or remotely triggered. This has three relevant attributes: +
+ Auth_OpenID_CancelResponse + + A response with a status of Auth_OpenID_CANCEL. Indicates that the user cancelled the OpenID authentication request. This has two relevant attributes: +
+ Auth_OpenID_SetupNeededResponse + + A response with a status of Auth_OpenID_SETUP_NEEDED. Indicates that the request was in immediate mode, and the server is unable to authenticate the user without further interaction. +
+
+
+ + +
+
Includes
+ +
+ +
+ +
+ + require_once + ("Auth/OpenID/Discover.php") + (line 173) + +
+ + + +
+ +
+ +
+ + require_once + ("Auth/OpenID/KVForm.php") + (line 172) + +
+ + + +
+ +
+ +
+ + require_once + ("Auth/OpenID/DiffieHellman.php") + (line 171) + +
+ + + +
+ +
+ +
+ + require_once + ("Auth/OpenID.php") + (line 167) + +
+ + +

Require utility classes and functions for the consumer.

+ +
+ +
+ +
+ + require_once + ("Services/Yadis/Manager.php") + (line 174) + +
+ + + +
+ +
+ +
+ + require_once + ("Services/Yadis/XRI.php") + (line 175) + +
+ + + +
+ +
+ +
+ + require_once + ("Auth/OpenID/Association.php") + (line 169) + +
+ + + +
+ +
+ +
+ + require_once + ("Auth/OpenID/HMACSHA1.php") + (line 168) + +
+ + + +
+ +
+ +
+ + require_once + ("Auth/OpenID/CryptUtil.php") + (line 170) + +
+ + + +
+
+
+ + +
+
Constants
+ +
+ +
+ +
+ + Auth_OpenID_CANCEL = 'cancel' + (line 186) + +
+ + +

Status to indicate cancellation of OpenID authentication.

+ + +
+ +
+ +
+ + Auth_OpenID_DEFAULT_NONCE_CHRS = "abcdefghijklmnopqrstuvwxyz"."ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + (line 212) + +
+ + +

This is the characters that the nonces are made from.

+ + +
+ +
+ +
+ + Auth_OpenID_FAILURE = 'failure' + (line 192) + +
+ + +

This is the status code completeAuth returns when the value it received indicated an invalid login.

+ + +
+ +
+ +
+ + Auth_OpenID_PARSE_ERROR = 'parse error' + (line 207) + +
+ + +

This is the status code beginAuth returns when the page fetched from the entered OpenID URL doesn't contain the necessary link tags to function as an identity page.

+ + +
+ +
+ +
+ + Auth_OpenID_SETUP_NEEDED = 'setup needed' + (line 200) + +
+ + +

This is the status code completeAuth returns when the Auth_OpenID_Consumer instance is in immediate mode, and the identity server sends back a URL to send the user to to complete his or her login.

+ + +
+ +
+ +
+ + Auth_OpenID_SUCCESS = 'success' + (line 181) + +
+ + +

This is the status code returned when the complete method returns successfully.

+ + +
+
+
+ + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:27 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---DatabaseConnection.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---DatabaseConnection.php.html new file mode 100644 index 000000000..f943d3936 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---DatabaseConnection.php.html @@ -0,0 +1,66 @@ + + + + + + Docs for page DatabaseConnection.php + + + + +
+

/Auth/OpenID/DatabaseConnection.php

+ + +
+
Description
+ +
+ +

The Auth_OpenID_DatabaseConnection class, which is used to emulate a PEAR database connection.

+ + +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ Auth_OpenID_DatabaseConnection + + An empty base class intended to emulate PEAR connection +
+
+
+ + + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---DumbStore.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---DumbStore.php.html new file mode 100644 index 000000000..e051ec2a2 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---DumbStore.php.html @@ -0,0 +1,109 @@ + + + + + + Docs for page DumbStore.php + + + + +
+

/Auth/OpenID/DumbStore.php

+ + +
+
Description
+ +
+ +

This file supplies a dumb store backend for OpenID servers and consumers.

+

PHP versions 4 and 5

LICENSE: See the COPYING file included in this distribution.

+ + +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ Auth_OpenID_DumbStore + + This is a store for use in the worst case, when you have no way of saving state on the consumer site. Using this store makes the consumer vulnerable to replay attacks, as it's unable to use nonces. Avoid using this store if it is at all possible. +
+
+
+ + +
+
Includes
+ +
+ +
+ +
+ + require_once + ('Auth/OpenID/Interface.php') + (line 20) + +
+ + +

Import the interface for creating a new store class.

+ +
+ +
+ +
+ + require_once + ('Auth/OpenID/HMACSHA1.php') + (line 21) + +
+ + + +
+
+
+ + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---FileStore.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---FileStore.php.html new file mode 100644 index 000000000..7e18242fe --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---FileStore.php.html @@ -0,0 +1,123 @@ + + + + + + Docs for page FileStore.php + + + + +
+

/Auth/OpenID/FileStore.php

+ + +
+
Description
+ +
+ +

This file supplies a Memcached store backend for OpenID servers and consumers.

+

PHP versions 4 and 5

LICENSE: See the COPYING file included in this distribution.

+ + +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ Auth_OpenID_FileStore + + This is a filesystem-based store for OpenID associations and +
+
+
+ + +
+
Includes
+ +
+ +
+ +
+ + require_once + ('Auth/OpenID.php') + (line 21) + +
+ + +

Require base class for creating a new interface.

+ +
+ +
+ +
+ + require_once + ('Auth/OpenID/Interface.php') + (line 22) + +
+ + + +
+ +
+ +
+ + require_once + ('Auth/OpenID/HMACSHA1.php') + (line 23) + +
+ + + +
+
+
+ + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:28 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Interface.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Interface.php.html new file mode 100644 index 000000000..097093d39 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Interface.php.html @@ -0,0 +1,67 @@ + + + + + + Docs for page Interface.php + + + + +
+

/Auth/OpenID/Interface.php

+ + +
+
Description
+ +
+ +

This file specifies the interface for PHP OpenID store implementations.

+

PHP versions 4 and 5

LICENSE: See the COPYING file included in this distribution.

+ + +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ Auth_OpenID_OpenIDStore + + This is the interface for the store objects the OpenID library +
+
+
+ + + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---MySQLStore.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---MySQLStore.php.html new file mode 100644 index 000000000..c8cd62558 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---MySQLStore.php.html @@ -0,0 +1,89 @@ + + + + + + Docs for page MySQLStore.php + + + + +
+

/Auth/OpenID/MySQLStore.php

+ + +
+
Description
+ +
+ +

A MySQL store.

+ +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ Auth_OpenID_MySQLStore + + An SQL store that uses MySQL as its backend. +
+
+
+ + +
+
Includes
+ +
+ +
+ +
+ + require_once + ("Auth/OpenID/SQLStore.php") + (line 12) + +
+ + +

Require the base class file.

+ +
+
+
+ + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---PostgreSQLStore.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---PostgreSQLStore.php.html new file mode 100644 index 000000000..6a14f1873 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---PostgreSQLStore.php.html @@ -0,0 +1,89 @@ + + + + + + Docs for page PostgreSQLStore.php + + + + +
+

/Auth/OpenID/PostgreSQLStore.php

+ + +
+
Description
+ +
+ +

A PostgreSQL store.

+ +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ Auth_OpenID_PostgreSQLStore + + An SQL store that uses PostgreSQL as its backend. +
+
+
+ + +
+
Includes
+ +
+ +
+ +
+ + require_once + ("Auth/OpenID/SQLStore.php") + (line 12) + +
+ + +

Require the base class file.

+ +
+
+
+ + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---SQLStore.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---SQLStore.php.html new file mode 100644 index 000000000..ecba1274c --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---SQLStore.php.html @@ -0,0 +1,96 @@ + + + + + + Docs for page SQLStore.php + + + + +
+

/Auth/OpenID/SQLStore.php

+ + +
+
Description
+ +
+ +

SQL-backed OpenID stores.

+

PHP versions 4 and 5

LICENSE: See the COPYING file included in this distribution.

+ + +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ Auth_OpenID_SQLStore + + This is the parent class for the SQL stores, which contains the logic common to all of the SQL stores. +
+
+
+ + +
+
Includes
+ +
+ +
+ +
+ + include_once + ('DB.php') + (line 24) + +
+ + +

Require the PEAR DB module because we'll need it for the SQL-based

+

stores implemented here. We silence any errors from the inclusion because it might not be present, and a user of the SQL stores may supply an Auth_OpenID_DatabaseConnection instance that implements its own storage.

+ +
+
+
+ + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---SQLiteStore.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---SQLiteStore.php.html new file mode 100644 index 000000000..6f6c02310 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---SQLiteStore.php.html @@ -0,0 +1,89 @@ + + + + + + Docs for page SQLiteStore.php + + + + +
+

/Auth/OpenID/SQLiteStore.php

+ + +
+
Description
+ +
+ +

An SQLite store.

+ +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ Auth_OpenID_SQLiteStore + + An SQL store that uses SQLite as its backend. +
+
+
+ + +
+
Includes
+ +
+ +
+ +
+ + require_once + ("Auth/OpenID/SQLStore.php") + (line 12) + +
+ + +

Require the base class file.

+ +
+
+
+ + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Server.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Server.php.html new file mode 100644 index 000000000..32eb172c4 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---Server.php.html @@ -0,0 +1,354 @@ + + + + + + Docs for page Server.php + + + + +
+

/Auth/OpenID/Server.php

+ + +
+
Description
+ +
+ +

OpenID server protocol and logic.

+

Overview

An OpenID server must perform three tasks:

  1. Examine the incoming request to determine its nature and validity.
  2. Make a decision about how to respond to this request.
  3. Format the response according to the protocol.
The first and last of these tasks may performed by the 'decodeRequest' and 'encodeResponse' methods of the Auth_OpenID_Server object. Who gets to do the intermediate task -- deciding how to respond to the request -- will depend on what type of request it is.

If it's a request to authenticate a user (a 'checkid_setup' or 'checkid_immediate' request), you need to decide if you will assert that this user may claim the identity in question. Exactly how you do that is a matter of application policy, but it generally involves making sure the user has an account with your system and is logged in, checking to see if that identity is hers to claim, and verifying with the user that she does consent to releasing that information to the party making the request.

Examine the properties of the Auth_OpenID_CheckIDRequest object, and if and when you've come to a decision, form a response by calling Auth_OpenID_CheckIDRequest::answer.

Other types of requests relate to establishing associations between client and server and verifing the authenticity of previous communications. Auth_OpenID_Server contains all the logic and data necessary to respond to such requests; just pass it to Auth_OpenID_Server::handleRequest.

OpenID Extensions

Do you want to provide other information for your users in addition to authentication? Version 1.2 of the OpenID protocol allows consumers to add extensions to their requests. For example, with sites using the Simple Registration Extension (http://www.openidenabled.com/openid/simple-registration-extension/), a user can agree to have their nickname and e-mail address sent to a site when they sign up.

Since extensions do not change the way OpenID authentication works, code to handle extension requests may be completely separate from the Auth_OpenID_Request class here. But you'll likely want data sent back by your extension to be signed. Auth_OpenID_Response provides methods with which you can add data to it which can be signed with the other data in the OpenID signature.

For example:

// when request is a checkid_* request response = request.answer(True) // this will a signed 'openid.sreg.timezone' parameter to the response response.addField('sreg', 'timezone', 'America/Los_Angeles')

Stores

The OpenID server needs to maintain state between requests in order to function. Its mechanism for doing this is called a store. The store interface is defined in Interface.php. Additionally, several concrete store implementations are provided, so that most sites won't need to implement a custom store. For a store backed by flat files on disk, see Auth_OpenID_FileStore. For stores based on MySQL, SQLite, or PostgreSQL, see the Auth_OpenID_SQLStore subclasses.

Upgrading

The keys by which a server looks up associations in its store have changed in version 1.2 of this library. If your store has entries created from version 1.0 code, you should empty it.

PHP versions 4 and 5

LICENSE: See the COPYING file included in this distribution.

+ + +
+
+ + +
+
Classes
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassDescription
+ Auth_OpenID_ServerError + + An error class which gets instantiated and returned whenever an OpenID protocol error occurs. Be prepared to use this in place of an ordinary server response. +
+ Auth_OpenID_MalformedReturnURL + + An error indicating that the return_to URL is malformed. +
+ Auth_OpenID_MalformedTrustRoot + + This error is returned when the trust_root value is malformed. +
+ Auth_OpenID_PlainTextServerSession + + +
+ Auth_OpenID_DiffieHellmanServerSession + + +
+ Auth_OpenID_WebResponse + + A web-capable response object which you can use to generate a user-agent response. +
+ Auth_OpenID_Signatory + + Responsible for the signature of query data and the verification of OpenID signature values. +
+ Auth_OpenID_Encoder + + Encode an Auth_OpenID_Response to an Auth_OpenID_WebResponse. +
+ Auth_OpenID_SigningEncoder + + An encoder which also takes care of signing fields when required. +
+ Auth_OpenID_Decoder + + Decode an incoming Auth_OpenID_WebResponse into an Auth_OpenID_Request. +
+ Auth_OpenID_EncodingError + + An error that indicates an encoding problem occurred. +
+ Auth_OpenID_AlreadySigned + + An error that indicates that a response was already signed. +
+ Auth_OpenID_UntrustedReturnURL + + An error that indicates that the given return_to is not under the given trust_root. +
+ Auth_OpenID_Server + + An object that implements the OpenID protocol for a single URL. +
+
+
+ + +
+
Includes
+ +
+ +
+ +
+ + require_once + ("Auth/OpenID/DiffieHellman.php") + (line 98) + +
+ + + +
+ +
+ +
+ + require_once + ("Auth/OpenID/KVForm.php") + (line 99) + +
+ + + +
+ +
+ +
+ + require_once + ("Auth/OpenID/BigMath.php") + (line 97) + +
+ + + +
+ +
+ +
+ + require_once + ("Auth/OpenID/TrustRoot.php") + (line 100) + +
+ + + +
+ +
+ +
+ + require_once + ("Auth/OpenID/ServerRequest.php") + (line 101) + +
+ + + +
+ +
+ +
+ + require_once + ("Auth/OpenID.php") + (line 94) + +
+ + +

Required imports

+ +
+ +
+ +
+ + require_once + ("Auth/OpenID/CryptUtil.php") + (line 96) + +
+ + + +
+ +
+ +
+ + require_once + ("Auth/OpenID/Association.php") + (line 95) + +
+ + + +
+
+
+ + +
+
Constants
+ +
+ +
+ +
+ + AUTH_OPENID_HTTP_ERROR = 400 + (line 105) + +
+ + + + +
+ +
+ +
+ + AUTH_OPENID_HTTP_OK = 200 + (line 103) + +
+ + + + +
+ +
+ +
+ + AUTH_OPENID_HTTP_REDIRECT = 302 + (line 104) + +
+ + + + +
+
+
+ + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---ServerRequest.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---ServerRequest.php.html new file mode 100644 index 000000000..4d7140efb --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID---ServerRequest.php.html @@ -0,0 +1,99 @@ + + + + + + Docs for page ServerRequest.php + + + + +
+

/Auth/OpenID/ServerRequest.php

+ + +
+
Description
+ +
+ +

OpenID Server Request

+
    +
  • author: JanRain, Inc. <openid@janrain.com>
  • +
  • copyright: 2005 Janrain, Inc.
  • +
  • see: Auth_OpenID_Server + + PHP versions 4 and 5 + + LICENSE: See the COPYING file included in this distribution.
  • +
  • license: LGPL
  • +
+ +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ Auth_OpenID_ServerRequest + + Object that holds the state of a request to the OpenID server +
+
+
+ + +
+
Includes
+ +
+ +
+ +
+ + require_once + ("Auth/OpenID.php") + (line 20) + +
+ + +

Imports

+ +
+
+
+ + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID.php.html b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID.php.html new file mode 100644 index 000000000..7be5fada5 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/_Auth---OpenID.php.html @@ -0,0 +1,275 @@ + + + + + + Docs for page OpenID.php + + + + +
+

/Auth/OpenID.php

+ + +
+
Description
+ +
+ +

This is the PHP OpenID library by JanRain, Inc.

+

This module contains core utility functionality used by the library. See Consumer.php and Server.php for the consumer and server implementations.

PHP versions 4 and 5

LICENSE: See the COPYING file included in this distribution.

+ + +
+
+ + + +
+
Includes
+ +
+ +
+ +
+ + require_once + ("Auth/OpenID/BigMath.php") + (line 25) + +
+ + + +
+ +
+ +
+ + require_once + ("Services/Yadis/PlainHTTPFetcher.php") + (line 23) + +
+ + +

Require the fetcher code.

+ +
+ +
+ +
+ + require_once + ("Services/Yadis/ParanoidHTTPFetcher.php") + (line 24) + +
+ + + +
+
+
+ + +
+
Constants
+ +
+ +
+ +
+ + Auth_OpenID_digits = "0123456789" + (line 93) + +
+ + + + +
+ +
+ +
+ + Auth_OpenID_DO_ABOUT = 'do_about' + (line 85) + +
+ + +

Status code returned when there were no OpenID arguments passed. This code indicates that the caller should return a 200 OK response and display an HTML page that says that this is an OpenID server endpoint.

+ + + +
+ +
+ +
+ + Auth_OpenID_DO_AUTH = 'do_auth' + (line 75) + +
+ + +

Status code returned when the caller needs to authenticate the

+

user. The associated value is a Auth_OpenID_ServerRequest object that can be used to complete the authentication. If the user has taken some authentication action, use the retry() method of the Auth_OpenID_ServerRequest object to complete the request.

+ + + +
+ +
+ +
+ + Auth_OpenID_letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + (line 90) + +
+ + +

Defines for regexes and format checking.

+ + +
+ +
+ +
+ + Auth_OpenID_LOCAL_ERROR = 'local_error' + (line 35) + +
+ + +

Status code returned by the server when the only option is to show an error page, since we do not have enough information to redirect back to the consumer. The associated value is an error message that should be displayed on an HTML error page.

+ + + +
+ +
+ +
+ + Auth_OpenID_NO_MATH_SUPPORT = true + (line 100) + +
+ + + + +
+ +
+ +
+ + Auth_OpenID_punct = "!!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~" + (line 96) + +
+ + + + +
+ +
+ +
+ + Auth_OpenID_REDIRECT = 'redirect' + (line 64) + +
+ + +

Status code returned when there is a redirect back to the consumer. The value is the URL to redirect back to. The caller should return a 302 Found redirect with a Location: header containing the URL.

+ + + +
+ +
+ +
+ + Auth_OpenID_REMOTE_ERROR = 'remote_error' + (line 44) + +
+ + +

Status code returned when there is an error to return in key-value form to the consumer. The caller should return a 400 Bad Request response with content-type text/plain and the value as the body.

+ + + +
+ +
+ +
+ + Auth_OpenID_REMOTE_OK = 'remote_ok' + (line 54) + +
+ + +

Status code returned when there is a key-value form OK response to the consumer. The value associated with this code is the response. The caller should return a 200 OK response with content-type text/plain and the value as the body.

+ + + +
+
+
+ + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/OpenID/tutorial_OpenID.pkg.html b/modules/member/php-openid-1.2.3/doc/OpenID/tutorial_OpenID.pkg.html new file mode 100644 index 000000000..f7ccd87d9 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/OpenID/tutorial_OpenID.pkg.html @@ -0,0 +1,52 @@ + + + + + + PHP OpenID API + + + + +
+ +

PHP OpenID API

+
JanRain, Inc. +
+ +

This is a complete implementation of the OpenID authentication + protocol. This package contains: + +

  • An OpenID server
  • +
  • An OpenID consumer
  • +
  • Stores for MySQL, PostgreSQL, SQLite, and filesystem-based OpenID data storage
  • +
  • PHPUnit unit tests
  • +
  • An example server and consumer

+ +

For Package Users

To install this package, copy the Auth/ + directory in this package to a directory in your PHP include path. + Alternatively, modify your PHP include path to include the + directory that contains Auth/. Any + applications that need this package will then be able to use it.

+ +

For Developers

See the server and consumer examples in the + examples/ directory of the package. For + details on how to run the examples, see + examples/README. If you want to create your + own OpenID data storage class, please see the Auth_OpenID_OpenIDStore + class.

+ +

References

+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:26 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/Auth_OpenID_ServiceEndpointLoader.html b/modules/member/php-openid-1.2.3/doc/Yadis/Auth_OpenID_ServiceEndpointLoader.html new file mode 100644 index 000000000..8fd1874c4 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/Auth_OpenID_ServiceEndpointLoader.html @@ -0,0 +1,186 @@ + + + + + + Docs For Class Auth_OpenID_ServiceEndpointLoader + + + + +
+

Class Auth_OpenID_ServiceEndpointLoader

+ + +
+
Description
+ +
+ +

A session helper class designed to translate between arrays and

+

objects. Note that the class used must have a constructor that takes no parameters. This is not a general solution, but it works for dumb objects that just need to have attributes set. The idea is that you'll subclass this and override $this->check($data) -> bool to implement your own session data validation.

+

+ Located in /Services/Yadis/Manager.php (line 177) +

+ + +
Services_Yadis_SessionLoader
+   |
+   --Auth_OpenID_ServiceEndpointLoader
+ +
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ void + check + ( $data) +
+ +
+ void + newObject + ( $data) +
+ +
+ void + requiredKeys + () +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ check (line 193) +
+ + + +
+ void + + check + + ( $data) +
+ +
    +
  • + + $data
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_SessionLoader::check()
+
Override this.
+
+ +
+ +
+ +
+ newObject (line 178) +
+ + + +
+ void + + newObject + + ( $data) +
+ +
    +
  • + + $data
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_SessionLoader::newObject()
+
Returns a new instance of this loader's class, using the session data to construct it if necessary. The object need only be created; $this->fromSession() will take care of setting the object's attributes.
+
+ +
+ +
+ +
+ requiredKeys (line 183) +
+ + + +
+ void + + requiredKeys + + () +
+ + + +
+

Inherited Methods

+ + +

Inherited From Services_Yadis_SessionLoader

+
+ Services_Yadis_SessionLoader::check()
+ Services_Yadis_SessionLoader::fromSession()
+ Services_Yadis_SessionLoader::newObject()
+ Services_Yadis_SessionLoader::prepareForLoad()
+ Services_Yadis_SessionLoader::prepareForSave()
+ Services_Yadis_SessionLoader::toSession()
+
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Discovery.html b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Discovery.html new file mode 100644 index 000000000..4e8b121c0 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Discovery.html @@ -0,0 +1,175 @@ + + + + + + Docs For Class Services_Yadis_Discovery + + + + +
+

Class Services_Yadis_Discovery

+ + +
+
Description
+ +
+ +

State management for discovery.

+

High-level usage pattern is to call .getNextService(discover) in order to find the next available service for this user for this session. Once a request completes, call .finish() to clean up the session state.

+

+ Located in /Services/Yadis/Manager.php (line 345) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Services_Yadis_Discovery + Services_Yadis_Discovery + ( &$session, string $url, [string $session_key_suffix = null], Services_Yadis_PHPSession $session) +
+ +
+ void + cleanup + () +
+ +
+ void + getNextService + ( $discover_cb,  &$fetcher) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Services_Yadis_Discovery (line 366) +
+ + +

Initialize a discovery object.

+ +
+ Services_Yadis_Discovery + + Services_Yadis_Discovery + + ( &$session, string $url, [string $session_key_suffix = null], Services_Yadis_PHPSession $session) +
+ +
    +
  • + Services_Yadis_PHPSession + $session: An object which implements the Services_Yadis_PHPSession API.
  • +
  • + string + $url: The URL on which to attempt discovery.
  • +
  • + string + $session_key_suffix: The optional session key suffix override.
  • +
  • + + &$session
  • +
+ + +
+ +
+ +
+ cleanup (line 414) +
+ + +

Clean up Yadis-related services in the session and return the most-recently-attempted service from the manager, if one exists.

+ +
+ void + + cleanup + + () +
+ + + +
+ +
+ +
+ getNextService (line 384) +
+ + +

Return the next authentication service for the pair of user_input and session. This function handles fallback.

+ +
+ void + + getNextService + + ( $discover_cb,  &$fetcher) +
+ +
    +
  • + + $discover_cb
  • +
  • + + &$fetcher
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Manager.html b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Manager.html new file mode 100644 index 000000000..69e87f1fd --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Manager.html @@ -0,0 +1,99 @@ + + + + + + Docs For Class Services_Yadis_Manager + + + + +
+

Class Services_Yadis_Manager

+ + +
+
Description
+ +
+ +

The Yadis service manager which stores state in a session and iterates over <Service> elements in a Yadis XRDS document and lets a caller attempt to use each one. This is used by the Yadis library internally.

+

+ Located in /Services/Yadis/Manager.php (line 252) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ void + nextService + () +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ nextService (line 295) +
+ + +

Return the next service

+

$this->current() will continue to return that service until the next call to this method.

+ +
+ void + + nextService + + () +
+ + + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_ManagerLoader.html b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_ManagerLoader.html new file mode 100644 index 000000000..9c4ababad --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_ManagerLoader.html @@ -0,0 +1,260 @@ + + + + + + Docs For Class Services_Yadis_ManagerLoader + + + + +
+

Class Services_Yadis_ManagerLoader

+ + +
+
Description
+ +
+ +

A session helper class designed to translate between arrays and

+

objects. Note that the class used must have a constructor that takes no parameters. This is not a general solution, but it works for dumb objects that just need to have attributes set. The idea is that you'll subclass this and override $this->check($data) -> bool to implement your own session data validation.

+

+ Located in /Services/Yadis/Manager.php (line 199) +

+ + +
Services_Yadis_SessionLoader
+   |
+   --Services_Yadis_ManagerLoader
+ +
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ void + check + ( $data) +
+ +
+ void + newObject + ( $data) +
+ +
+ void + prepareForLoad + ( $data) +
+ +
+ void + prepareForSave + ( $obj) +
+ +
+ void + requiredKeys + () +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ check (line 218) +
+ + + +
+ void + + check + + ( $data) +
+ +
    +
  • + + $data
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_SessionLoader::check()
+
Override this.
+
+ +
+ +
+ +
+ newObject (line 210) +
+ + + +
+ void + + newObject + + ( $data) +
+ +
    +
  • + + $data
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_SessionLoader::newObject()
+
Returns a new instance of this loader's class, using the session data to construct it if necessary. The object need only be created; $this->fromSession() will take care of setting the object's attributes.
+
+ +
+ +
+ +
+ prepareForLoad (line 223) +
+ + + +
+ void + + prepareForLoad + + ( $data) +
+ +
    +
  • + + $data
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_SessionLoader::prepareForLoad()
+
Prepares the data array by making any necessary changes.
+
+ +
+ +
+ +
+ prepareForSave (line 233) +
+ + + +
+ void + + prepareForSave + + ( $obj) +
+ +
    +
  • + + $obj
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_SessionLoader::prepareForSave()
+
Override this.
+
+ +
+ +
+ +
+ requiredKeys (line 200) +
+ + + +
+ void + + requiredKeys + + () +
+ + + +
+

Inherited Methods

+ + +

Inherited From Services_Yadis_SessionLoader

+
+ Services_Yadis_SessionLoader::check()
+ Services_Yadis_SessionLoader::fromSession()
+ Services_Yadis_SessionLoader::newObject()
+ Services_Yadis_SessionLoader::prepareForLoad()
+ Services_Yadis_SessionLoader::prepareForSave()
+ Services_Yadis_SessionLoader::toSession()
+
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_PHPSession.html b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_PHPSession.html new file mode 100644 index 000000000..cfcb7de4e --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_PHPSession.html @@ -0,0 +1,203 @@ + + + + + + Docs For Class Services_Yadis_PHPSession + + + + +
+

Class Services_Yadis_PHPSession

+ + +
+
Description
+ +
+ +

The base session class used by the Services_Yadis_Manager. This class wraps the default PHP session machinery and should be subclassed if your application doesn't use PHP sessioning.

+

+ Located in /Services/Yadis/Manager.php (line 17) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ void + contents + () +
+ +
+ void + del + (string $name) +
+ +
+ string + get + (string $name, [string $default = null]) +
+ +
+ void + set + (string $name, string $value) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ contents (line 60) +
+ + +

Return the contents of the session in array form.

+ +
+ void + + contents + + () +
+ + + +
+ +
+ +
+ del (line 52) +
+ + +

Remove a key/value pair from the session.

+ +
+ void + + del + + (string $name) +
+ +
    +
  • + string + $name: The name of the key to remove.
  • +
+ + +
+ +
+ +
+ get (line 38) +
+ + +

Get a key's value from the session.

+
    +
  • return: The key's value in the session or $default if it isn't found.
  • +
+ +
+ string + + get + + (string $name, [string $default = null]) +
+ +
    +
  • + string + $name: The name of the key to retrieve.
  • +
  • + string + $default: The optional value to return if the key is not found in the session.
  • +
+ + +
+ +
+ +
+ set (line 24) +
+ + +

Set a session key/value pair.

+ +
+ void + + set + + (string $name, string $value) +
+ +
    +
  • + string + $name: The name of the session key to add.
  • +
  • + string + $value: The value to add to the session.
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Service.html b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Service.html new file mode 100644 index 000000000..55588735f --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Service.html @@ -0,0 +1,225 @@ + + + + + + Docs For Class Services_Yadis_Service + + + + +
+

Class Services_Yadis_Service

+ + +
+
Description
+ +
+ +

This class represents a <Service> element in an XRDS document.

+

Objects of this type are returned by Services_Yadis_XRDS::services() and Services_Yadis_Yadis::services(). Each object corresponds directly to a <Service> element in the XRDS and supplies a getElements($name) method which you should use to inspect the element's contents. See Services_Yadis_Yadis for more information on the role this class plays in Yadis discovery.

+

+ Located in /Services/Yadis/XRDS.php (line 73) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Services_Yadis_Service + Services_Yadis_Service + () +
+ +
+ array + getElements + (string $name) +
+ +
+ mixed + getPriority + () +
+ +
+ array + getTypes + () +
+ +
+ array + getURIs + () +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Services_Yadis_Service (line 78) +
+ + +

Creates an empty service object.

+ +
+ Services_Yadis_Service + + Services_Yadis_Service + + () +
+ + + +
+ +
+ +
+ getElements (line 178) +
+ + +

Used to get XML elements from this object's <Service> element.

+

This is what you should use to get all custom information out of this element. This is used by service filter functions to determine whether a service element contains specific tags, etc. NOTE: this only considers elements which are direct children of the <Service> element for this object.

+
    +
  • return: An array of elements with the specified name which are direct children of the <Service> element. The nodes returned by this function can be passed to $this->parser methods (see Services_Yadis_XMLParser).
  • +
+ +
+ array + + getElements + + (string $name) +
+ +
    +
  • + string + $name: The name of the element to look for
  • +
+ + +
+ +
+ +
+ getPriority (line 152) +
+ + +

Returns the "priority" attribute value of this <Service> element, if the attribute is present. Returns null if not.

+
    +
  • return: Null or integer, depending on whether this Service element has a 'priority' attribute.
  • +
+ +
+ mixed + + getPriority + + () +
+ + + +
+ +
+ +
+ getTypes (line 90) +
+ + +

Return the URIs in the "Type" elements, if any, of this Service element.

+
    +
  • return: An array of Type URI strings.
  • +
+ +
+ array + + getTypes + + () +
+ + + +
+ +
+ +
+ getURIs (line 108) +
+ + +

Return the URIs in the "URI" elements, if any, of this Service element. The URIs are returned sorted in priority order.

+
    +
  • return: An array of URI strings.
  • +
+ +
+ array + + getURIs + + () +
+ + + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:31 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_SessionLoader.html b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_SessionLoader.html new file mode 100644 index 000000000..18c2c4f23 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_SessionLoader.html @@ -0,0 +1,333 @@ + + + + + + Docs For Class Services_Yadis_SessionLoader + + + + +
+

Class Services_Yadis_SessionLoader

+ + +
+
Description
+ +
+ +

A session helper class designed to translate between arrays and

+

objects. Note that the class used must have a constructor that takes no parameters. This is not a general solution, but it works for dumb objects that just need to have attributes set. The idea is that you'll subclass this and override $this->check($data) -> bool to implement your own session data validation.

+

+ Located in /Services/Yadis/Manager.php (line 74) +

+ + +

+	
+			
+
+ + +
+
Direct descendents
+ +
+ + + + + + + + + + + + + +
ClassDescription
Auth_OpenID_ServiceEndpointLoader + A session helper class designed to translate between arrays and +
Services_Yadis_ManagerLoader + A session helper class designed to translate between arrays and +
+
+
+ + + + +
+
Method Summary
+ +
+
+ +
+ void + check + ( $data) +
+ +
+ void + fromSession + ( $data) +
+ +
+ void + newObject + ( $data) +
+ +
+ void + prepareForLoad + ( $data) +
+ +
+ void + prepareForSave + ( $obj) +
+ +
+ void + toSession + ( $obj) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ check (line 78) +
+ + +

Override this.

+ +
+ void + + check + + ( $data) +
+ +
    +
  • + + $data
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ fromSession (line 91) +
+ + +

Given a session data value (an array), this creates an object

+

(returned by $this->newObject()) whose attributes and values are those in $data. Returns null if $data lacks keys found in $this->requiredKeys(). Returns null if $this->check($data) evaluates to false. Returns null if $this->newObject() evaluates to false.

+ +
+ void + + fromSession + + ( $data) +
+ +
    +
  • + + $data
  • +
+ + +
+ +
+ +
+ newObject (line 139) +
+ + +

Returns a new instance of this loader's class, using the session data to construct it if necessary. The object need only be created; $this->fromSession() will take care of setting the object's attributes.

+ +
+ void + + newObject + + ( $data) +
+ +
    +
  • + + $data
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ prepareForLoad (line 128) +
+ + +

Prepares the data array by making any necessary changes.

+

Returns an array whose keys and values will be used to update the original data array before calling $this->newObject($data).

+ +
+ void + + prepareForLoad + + ( $data) +
+ +
    +
  • + + $data
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ prepareForSave (line 171) +
+ + +

Override this.

+ +
+ void + + prepareForSave + + ( $obj) +
+ +
    +
  • + + $obj
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ toSession (line 150) +
+ + +

Returns an array of keys and values built from the attributes of $obj. If $this->prepareForSave($obj) returns an array, its keys and values are used to update the $data array of attributes from $obj.

+ +
+ void + + toSession + + ( $obj) +
+ +
    +
  • + + $obj
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_XMLParser.html b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_XMLParser.html new file mode 100644 index 000000000..6e1411660 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_XMLParser.html @@ -0,0 +1,374 @@ + + + + + + Docs For Class Services_Yadis_XMLParser + + + + +
+

Class Services_Yadis_XMLParser

+ + +
+
Description
+ +
+ +

The base class for wrappers for available PHP XML-parsing

+

extensions. To work with this Yadis library, subclasses of this class MUST implement the API as defined in the remarks for this class. Subclasses of Services_Yadis_XMLParser are used to wrap particular PHP XML extensions such as 'domxml'. These are used internally by the library depending on the availability of supported PHP XML extensions.

+

+ Located in /Services/Yadis/XML.php (line 21) +

+ + +

+	
+			
+
+ + +
+
Direct descendents
+ +
+ + + + + + + + + + + + + +
ClassDescription
Services_Yadis_domxml + This concrete implementation of Services_Yadis_XMLParser implements +
Services_Yadis_dom + This concrete implementation of Services_Yadis_XMLParser implements +
+
+
+ + + + +
+
Method Summary
+ +
+
+ +
+ array + attributes + (mixed $node) +
+ +
+ string + content + (mixed $node) +
+ +
+ array + evalXPath + (string $xpath, [mixed $node = null]) +
+ +
+ boolean + init + (string $xml_string, array $namespace_map) +
+ +
+ boolean + registerNamespace + (string $prefix, string $uri) +
+ +
+ boolean + setXML + (string $xml_string) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ attributes (line 121) +
+ + +

Return the attributes of a specified node.

+
    +
  • return: An array mapping attribute names to values.
  • +
+ +
+ array + + attributes + + (mixed $node) +
+ +
    +
  • + mixed + $node: A node object from a previous call to $this->evalXPath().
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ content (line 107) +
+ + +

Return the textual content of a specified node.

+
    +
  • return: The content of this node.
  • +
+ +
+ string + + content + + (mixed $node) +
+ +
    +
  • + mixed + $node: A node object from a previous call to $this->evalXPath().
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ evalXPath (line 94) +
+ + +

Evaluate an XPath expression and return the resulting node list. This should be overridden by subclasses.

+
    +
  • return: An array of matching opaque node objects to be used with other methods of this parser class.
  • +
+ +
+ array + + evalXPath + + (string $xpath, [mixed $node = null]) +
+ +
    +
  • + string + $xpath: The XPath expression to be evaluated.
  • +
  • + mixed + $node: A node object resulting from a previous evalXPath call. This node, if specified, provides the context for the evaluation of this xpath expression.
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ init (line 33) +
+ + +

Initialize an instance of Services_Yadis_XMLParser with some XML and namespaces. This SHOULD NOT be overridden by subclasses.

+
    +
  • return: True if the initialization and namespace registration(s) succeeded; false otherwise.
  • +
+ +
+ boolean + + init + + (string $xml_string, array $namespace_map) +
+ +
    +
  • + string + $xml_string: A string of XML to be parsed.
  • +
  • + array + $namespace_map: An array of ($ns_name => $ns_uri) to be registered with the XML parser. May be empty.
  • +
+ + +
+ +
+ +
+ registerNamespace (line 61) +
+ + +

Register a namespace with the XML parser. This should be overridden by subclasses.

+
    +
  • return: True if the registration succeeded; false otherwise.
  • +
+ +
+ boolean + + registerNamespace + + (string $prefix, string $uri) +
+ +
    +
  • + string + $prefix: The namespace prefix to appear in XML tag names.
  • +
  • + string + $uri: The namespace URI to be used to identify the namespace in the XML.
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+ +
+ setXML (line 76) +
+ + +

Set this parser object's XML payload. This should be overridden by subclasses.

+
    +
  • return: True if the initialization succeeded; false otherwise.
  • +
+ +
+ boolean + + setXML + + (string $xml_string) +
+ +
    +
  • + string + $xml_string: The XML string to pass to this object's XML parser.
  • +
+ + +
+
Redefined in descendants as:
+ +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_XRDS.html b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_XRDS.html new file mode 100644 index 000000000..bdfe6a20c --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_XRDS.html @@ -0,0 +1,184 @@ + + + + + + Docs For Class Services_Yadis_XRDS + + + + +
+

Class Services_Yadis_XRDS

+ + +
+
Description
+ +
+ +

This class performs parsing of XRDS documents.

+

You should not instantiate this class directly; rather, call parseXRDS statically:

  $xrds = Services_Yadis_XRDS::parseXRDS($xml_string);

If the XRDS can be parsed and is valid, an instance of Services_Yadis_XRDS will be returned. Otherwise, null will be returned. This class is used by the Services_Yadis_Yadis::discover method.

+

+ Located in /Services/Yadis/XRDS.php (line 199) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Services_Yadis_XRDS + Services_Yadis_XRDS + ( &$xmlParser,  &$xrdNodes) +
+ +
+ mixed + &parseXRDS + (string $xml_string, [ $extra_ns_map = null]) +
+ +
+ mixed + services + ([mixed $filters = null], [integer $filter_mode = SERVICES_YADIS_MATCH_ANY]) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Services_Yadis_XRDS (line 205) +
+ + +

Instantiate a Services_Yadis_XRDS object. Requires an XPath instance which has been used to parse a valid XRDS document.

+ +
+ Services_Yadis_XRDS + + Services_Yadis_XRDS + + ( &$xmlParser,  &$xrdNodes) +
+ +
    +
  • + + &$xmlParser
  • +
  • + + &$xrdNodes
  • +
+ + +
+ +
+ +
+ parseXRDS (line 223) +
+ + +

Parse an XML string (XRDS document) and return either a Services_Yadis_XRDS object or null, depending on whether the XRDS XML is valid.

+
    +
  • return: An instance of Services_Yadis_XRDS or null, depending on the validity of $xml_string
  • +
+ +
+ mixed + + &parseXRDS + + (string $xml_string, [ $extra_ns_map = null]) +
+ +
    +
  • + string + $xml_string: An XRDS XML string.
  • +
  • + + $extra_ns_map
  • +
+ + +
+ +
+ +
+ services (line 340) +
+ + +

Returns a list of service objects which correspond to <Service> elements in the XRDS XML document for this object.

+

Optionally, an array of filter callbacks may be given to limit the list of returned service objects. Furthermore, the default mode is to return all service objects which match ANY of the specified filters, but $filter_mode may be SERVICES_YADIS_MATCH_ALL if you want to be sure that the returned services match all the given filters. See Services_Yadis_Yadis for detailed usage information on filter functions.

+
    +
  • return: An array of Services_Yadis_Service objects if $filter_mode is a valid mode; null if $filter_mode is an invalid mode (i.e., not SERVICES_YADIS_MATCH_ANY or SERVICES_YADIS_MATCH_ALL).
  • +
+ +
+ mixed + + services + + ([mixed $filters = null], [integer $filter_mode = SERVICES_YADIS_MATCH_ANY]) +
+ +
    +
  • + mixed + $filters: An array of callbacks to filter the returned services, or null if all services are to be returned.
  • +
  • + integer + $filter_mode: SERVICES_YADIS_MATCH_ALL or SERVICES_YADIS_MATCH_ANY, depending on whether the returned services should match ALL or ANY of the specified filters, respectively.
  • +
+ + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:31 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Yadis.html b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Yadis.html new file mode 100644 index 000000000..a6aef8c86 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_Yadis.html @@ -0,0 +1,258 @@ + + + + + + Docs For Class Services_Yadis_Yadis + + + + +
+

Class Services_Yadis_Yadis

+ + +
+
Description
+ +
+ +

This is the core of the PHP Yadis library. This is the only class a user needs to use to perform Yadis discovery. This class performs the discovery AND stores the result of the discovery.

+

First, require this library into your program source:

  require_once "Services/Yadis/Yadis.php";

To perform Yadis discovery, first call the "discover" method statically with a URI parameter:

  $http_response = array();
+  $fetcher = Services_Yadis_Yadis::getHTTPFetcher();
+  $yadis_object = Services_Yadis_Yadis::discover($uri,
+                                    $http_response, $fetcher);

If the discovery succeeds, $yadis_object will be an instance of Services_Yadis_Yadis. If not, it will be null. The XRDS document found during discovery should have service descriptions, which can be accessed by calling

  $service_list = $yadis_object->services();

which returns an array of objects which describe each service. These objects are instances of Services_Yadis_Service. Each object describes exactly one whole Service element, complete with all of its Types and URIs (no expansion is performed). The common use case for using the service objects returned by services() is to write one or more filter functions and pass those to services():

  $service_list = $yadis_object->services(
+                               array("filterByURI",
+                                     "filterByExtension"));

The filter functions (whose names appear in the array passed to services()) take the following form:

  function myFilter(&$service) {
+       // Query $service object here.  Return true if the service
+       // matches your query; false if not.
+  }

This is an example of a filter which uses a regular expression to match the content of URI tags (note that the Services_Yadis_Service class provides a getURIs() method which you should use instead of this contrived example):

  function URIMatcher(&$service) {
+      foreach ($service->getElements('xrd:URI') as $uri) {
+          if (preg_match("/some_pattern/",
+                         $service->parser->content($uri))) {
+              return true;
+          }
+      }
+      return false;
+  }

The filter functions you pass will be called for each service object to determine which ones match the criteria your filters specify. The default behavior is that if a given service object matches ANY of the filters specified in the services() call, it will be returned. You can specify that a given service object will be returned ONLY if it matches ALL specified filters by changing the match mode of services():

  $yadis_object->services(array("filter1", "filter2"),
+                          SERVICES_YADIS_MATCH_ALL);

See SERVICES_YADIS_MATCH_ALL and SERVICES_YADIS_MATCH_ANY.

Services described in an XRDS should have a library which you'll probably be using. Those libraries are responsible for defining filters that can be used with the "services()" call. If you need to write your own filter, see the documentation for Services_Yadis_Service.

+

+ Located in /Services/Yadis/Yadis.php (line 114) +

+ + +

+	
+			
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Services_Yadis_Yadis + Services_Yadis_Yadis + () +
+ +
+ void + curlPresent + () +
+ +
+ mixed + discover + (string $uri,  &$http_response,  &$fetcher, [array $extra_ns_map = null], [integer $timeout = 20], array $http_response, Services_Yadis_HTTPFetcher $fetcher) +
+ +
+ void + getHTTPFetcher + ([ $timeout = 20]) +
+ +
+ array + services + () +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Services_Yadis_Yadis (line 285) +
+ + +

Instantiates an empty Services_Yadis_Yadis object. This constructor should not be used by any user of the library.

+

This constructor results in a completely useless object which must be populated with valid discovery information. Instead of using this constructor, call Services_Yadis_Yadis::discover($uri).

+ +
+ Services_Yadis_Yadis + + Services_Yadis_Yadis + + () +
+ + + +
+ +
+ +
+ curlPresent (line 132) +
+ + + +
+ void + + curlPresent + + () +
+ + + +
+ +
+ +
+ discover (line 188) +
+ + +

This should be called statically and will build a Yadis instance if the discovery process succeeds. This implements Yadis discovery as specified in the Yadis specification.

+
    +
  • return: Either null or an instance of Services_Yadis_Yadis, depending on whether the discovery succeeded.
  • +
+ +
+ mixed + + discover + + (string $uri,  &$http_response,  &$fetcher, [array $extra_ns_map = null], [integer $timeout = 20], array $http_response, Services_Yadis_HTTPFetcher $fetcher) +
+ +
    +
  • + string + $uri: The URI on which to perform Yadis discovery.
  • +
  • + array + $http_response: An array reference where the HTTP response object will be stored (see Services_Yadis_HTTPResponse.
  • +
  • + Services_Yadis_HTTPFetcher + $fetcher: An instance of a Services_Yadis_HTTPFetcher subclass.
  • +
  • + array + $extra_ns_map: An array which maps namespace names to namespace URIs to be used when parsing the Yadis XRDS document.
  • +
  • + integer + $timeout: An optional fetcher timeout, in seconds.
  • +
  • + + &$http_response
  • +
  • + + &$fetcher
  • +
+ + +
+ +
+ +
+ getHTTPFetcher (line 122) +
+ + +

Returns an HTTP fetcher object. If the CURL extension is present, an instance of Services_Yadis_ParanoidHTTPFetcher is returned. If not, an instance of Services_Yadis_PlainHTTPFetcher is returned.

+ +
+ void + + getHTTPFetcher + + ([ $timeout = 20]) +
+ +
    +
  • + + $timeout
  • +
+ + +
+ +
+ +
+ services (line 303) +
+ + +

Returns the list of service objects as described by the XRDS document, if this yadis object represents a successful Yadis discovery.

+ + +
+ array + + services + + () +
+ + + +
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:31 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_dom.html b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_dom.html new file mode 100644 index 000000000..74c267ea1 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_dom.html @@ -0,0 +1,303 @@ + + + + + + Docs For Class Services_Yadis_dom + + + + +
+

Class Services_Yadis_dom

+ + +
+
Description
+ +
+ +

This concrete implementation of Services_Yadis_XMLParser implements

+

the appropriate API for the 'dom' extension which is typically packaged with PHP 5. This class will be used whenever the 'dom' extension is detected. See the Services_Yadis_XMLParser class for details on this class's methods.

+

+ Located in /Services/Yadis/XML.php (line 214) +

+ + +
Services_Yadis_XMLParser
+   |
+   --Services_Yadis_dom
+ +
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Services_Yadis_dom + Services_Yadis_dom + () +
+ +
+ void + attributes + ( $node) +
+ +
+ void + content + ( $node) +
+ +
+ void + &evalXPath + ( $xpath, [ $node = null]) +
+ +
+ void + registerNamespace + ( $prefix,  $uri) +
+ +
+ void + setXML + ( $xml_string) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Services_Yadis_dom (line 215) +
+ + + +
+ Services_Yadis_dom + + Services_Yadis_dom + + () +
+ + + +
+ +
+ +
+ attributes (line 274) +
+ + + +
+ void + + attributes + + ( $node) +
+ +
    +
  • + + $node
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_XMLParser::attributes()
+
Return the attributes of a specified node.
+
+ +
+ +
+ +
+ content (line 267) +
+ + + +
+ void + + content + + ( $node) +
+ +
    +
  • + + $node
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_XMLParser::content()
+
Return the textual content of a specified node.
+
+ +
+ +
+ +
+ evalXPath (line 250) +
+ + + +
+ void + + &evalXPath + + ( $xpath, [ $node = null]) +
+ +
    +
  • + + $xpath
  • +
  • + + $node
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_XMLParser::evalXPath()
+
Evaluate an XPath expression and return the resulting node list. This should be overridden by subclasses.
+
+ +
+ +
+ +
+ registerNamespace (line 245) +
+ + + +
+ void + + registerNamespace + + ( $prefix,  $uri) +
+ +
    +
  • + + $prefix
  • +
  • + + $uri
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_XMLParser::registerNamespace()
+
Register a namespace with the XML parser. This should be overridden by subclasses.
+
+ +
+ +
+ +
+ setXML (line 223) +
+ + + +
+ void + + setXML + + ( $xml_string) +
+ +
    +
  • + + $xml_string
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_XMLParser::setXML()
+
Set this parser object's XML payload. This should be overridden by subclasses.
+
+ +
+

Inherited Methods

+ + +

Inherited From Services_Yadis_XMLParser

+
+ Services_Yadis_XMLParser::attributes()
+ Services_Yadis_XMLParser::content()
+ Services_Yadis_XMLParser::evalXPath()
+ Services_Yadis_XMLParser::init()
+ Services_Yadis_XMLParser::registerNamespace()
+ Services_Yadis_XMLParser::setXML()
+
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_domxml.html b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_domxml.html new file mode 100644 index 000000000..89589b752 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/Services_Yadis_domxml.html @@ -0,0 +1,303 @@ + + + + + + Docs For Class Services_Yadis_domxml + + + + +
+

Class Services_Yadis_domxml

+ + +
+
Description
+ +
+ +

This concrete implementation of Services_Yadis_XMLParser implements

+

the appropriate API for the 'domxml' extension which is typically packaged with PHP 4. This class will be used whenever the 'domxml' extension is detected. See the Services_Yadis_XMLParser class for details on this class's methods.

+

+ Located in /Services/Yadis/XML.php (line 136) +

+ + +
Services_Yadis_XMLParser
+   |
+   --Services_Yadis_domxml
+ +
+
+ + + + + +
+
Method Summary
+ +
+
+ +
+ Services_Yadis_domxml + Services_Yadis_domxml + () +
+ +
+ void + attributes + ( $node) +
+ +
+ void + content + ( $node) +
+ +
+ void + &evalXPath + ( $xpath, [ $node = null]) +
+ +
+ void + registerNamespace + ( $prefix,  $uri) +
+ +
+ void + setXML + ( $xml_string) +
+
+
+
+ + + +
+
Methods
+ +
+ + +
+ +
+ Constructor Services_Yadis_domxml (line 137) +
+ + + +
+ Services_Yadis_domxml + + Services_Yadis_domxml + + () +
+ + + +
+ +
+ +
+ attributes (line 188) +
+ + + +
+ void + + attributes + + ( $node) +
+ +
    +
  • + + $node
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_XMLParser::attributes()
+
Return the attributes of a specified node.
+
+ +
+ +
+ +
+ content (line 181) +
+ + + +
+ void + + content + + ( $node) +
+ +
    +
  • + + $node
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_XMLParser::content()
+
Return the textual content of a specified node.
+
+ +
+ +
+ +
+ evalXPath (line 165) +
+ + + +
+ void + + &evalXPath + + ( $xpath, [ $node = null]) +
+ +
    +
  • + + $xpath
  • +
  • + + $node
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_XMLParser::evalXPath()
+
Evaluate an XPath expression and return the resulting node list. This should be overridden by subclasses.
+
+ +
+ +
+ +
+ registerNamespace (line 160) +
+ + + +
+ void + + registerNamespace + + ( $prefix,  $uri) +
+ +
    +
  • + + $prefix
  • +
  • + + $uri
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_XMLParser::registerNamespace()
+
Register a namespace with the XML parser. This should be overridden by subclasses.
+
+ +
+ +
+ +
+ setXML (line 145) +
+ + + +
+ void + + setXML + + ( $xml_string) +
+ +
    +
  • + + $xml_string
  • +
+ +
+
Redefinition of:
+
+
Services_Yadis_XMLParser::setXML()
+
Set this parser object's XML payload. This should be overridden by subclasses.
+
+ +
+

Inherited Methods

+ + +

Inherited From Services_Yadis_XMLParser

+
+ Services_Yadis_XMLParser::attributes()
+ Services_Yadis_XMLParser::content()
+ Services_Yadis_XMLParser::evalXPath()
+ Services_Yadis_XMLParser::init()
+ Services_Yadis_XMLParser::registerNamespace()
+ Services_Yadis_XMLParser::setXML()
+
+ +
+
+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---Manager.php.html b/modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---Manager.php.html new file mode 100644 index 000000000..828e09264 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---Manager.php.html @@ -0,0 +1,101 @@ + + + + + + Docs for page Manager.php + + + + +
+

/Services/Yadis/Manager.php

+ + +
+
Description
+ +
+ +

Yadis service manager to be used during yadis-driven authentication attempts.

+ +
+
+ + +
+
Classes
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassDescription
+ Services_Yadis_PHPSession + + The base session class used by the Services_Yadis_Manager. This class wraps the default PHP session machinery and should be subclassed if your application doesn't use PHP sessioning. +
+ Services_Yadis_SessionLoader + + A session helper class designed to translate between arrays and +
+ Auth_OpenID_ServiceEndpointLoader + + A session helper class designed to translate between arrays and +
+ Services_Yadis_ManagerLoader + + A session helper class designed to translate between arrays and +
+ Services_Yadis_Manager + + The Yadis service manager which stores state in a session and iterates over <Service> elements in a Yadis XRDS document and lets a caller attempt to use each one. This is used by the Yadis library internally. +
+ Services_Yadis_Discovery + + State management for discovery. +
+
+
+ + + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:29 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---XML.php.html b/modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---XML.php.html new file mode 100644 index 000000000..6338411b6 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---XML.php.html @@ -0,0 +1,160 @@ + + + + + + Docs for page XML.php + + + + +
+

/Services/Yadis/XML.php

+ + +
+
Description
+ +
+ +

XML-parsing classes to wrap the domxml and DOM extensions for PHP 4 and 5, respectively.

+ +
+
+ + +
+
Classes
+ +
+ + + + + + + + + + + + + + + + + +
ClassDescription
+ Services_Yadis_XMLParser + + The base class for wrappers for available PHP XML-parsing +
+ Services_Yadis_domxml + + This concrete implementation of Services_Yadis_XMLParser implements +
+ Services_Yadis_dom + + This concrete implementation of Services_Yadis_XMLParser implements +
+
+
+ + + + + +
+
Functions
+ +
+ +
+ +
+ Services_Yadis_getSupportedExtensions (line 310) +
+ + + +
+ void + + Services_Yadis_getSupportedExtensions + + () +
+ + + +
+ +
+ +
+ Services_Yadis_getXMLParser (line 326) +
+ + +

Returns an instance of a Services_Yadis_XMLParser subclass based on the availability of PHP extensions for XML parsing. If Services_Yadis_setDefaultParser has been called, the parser used in that call will be returned instead.

+ +
+ void + + &Services_Yadis_getXMLParser + + () +
+ + + +
+ +
+ +
+ Services_Yadis_setDefaultParser (line 304) +
+ + +

Set a default parser to override the extension-driven selection of available parser classes. This is helpful in a test environment or one in which multiple parsers can be used but one is more desirable.

+ +
+ void + + Services_Yadis_setDefaultParser + + ( &$parser, Services_Yadis_XMLParser $parser) +
+ + + + +
+
+
+ +

+ Documentation generated on Mon, 10 Sep 2007 13:29:30 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---XRDS.php.html b/modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---XRDS.php.html new file mode 100644 index 000000000..b5e75e4fd --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---XRDS.php.html @@ -0,0 +1,200 @@ + + + + + + Docs for page XRDS.php + + + + +
+

/Services/Yadis/XRDS.php

+ + +
+
Description
+ +
+ +

This module contains the XRDS parsing code.

+

PHP versions 4 and 5

LICENSE: See the COPYING file included in this distribution.

+ + +
+
+ + +
+
Classes
+ +
+ + + + + + + + + + + + + +
ClassDescription
+ Services_Yadis_Service + + This class represents a <Service> element in an XRDS document. +
+ Services_Yadis_XRDS + + This class performs parsing of XRDS documents. +
+
+
+ + +
+
Includes
+ +
+ +
+ +
+ + require_once + ('Services/Yadis/XML.php') + (line 19) + +
+ + +

Require the XPath implementation.

+ +
+
+
+ + +
+
Constants
+ +
+ +
+ +
+ + SERVICES_YADIS_MATCH_ALL = 101 + (line 25) + +
+ + +

This match mode means a given service must match ALL filters passed to the Services_Yadis_XRDS::services() call.

+ + +
+ +
+ +
+ + SERVICES_YADIS_MATCH_ANY = 102 + (line 31) + +
+ + +

This match mode means a given service must match ANY filters (at least one) passed to the Services_Yadis_XRDS::services() call.

+ + +
+ +
+ +
+ + SERVICES_YADIS_MAX_PRIORITY = pow(2,30) + (line 37) + +
+ + +

The priority value used for service elements with no priority specified.

+ + +
+
+
+ + + +
+
Functions
+ +
+ +
+ +
+ Services_Yadis_getNSMap (line 39) +
+ + + +
+ void + + Services_Yadis_getNSMap + + () +
+ + + +
+
+
+ +

+ Documentation generated on Mon, 10 Sep 2007 13:29:31 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---Yadis.php.html b/modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---Yadis.php.html new file mode 100644 index 000000000..354728d10 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/Yadis/_Services---Yadis---Yadis.php.html @@ -0,0 +1,139 @@ + + + + + + Docs for page Yadis.php + + + + +
+

/Services/Yadis/Yadis.php

+ + +
+
Description
+ +
+ +

The core PHP Yadis implementation.

+

PHP versions 4 and 5

LICENSE: See the COPYING file included in this distribution.

+ + +
+
+ + +
+
Classes
+ +
+ + + + + + + + + +
ClassDescription
+ Services_Yadis_Yadis + + This is the core of the PHP Yadis library. This is the only class a user needs to use to perform Yadis discovery. This class performs the discovery AND stores the result of the discovery. +
+
+
+ + +
+
Includes
+ +
+ +
+ +
+ + require_once + ("Services/Yadis/PlainHTTPFetcher.php") + (line 20) + +
+ + +

Need both fetcher types so we can use the right one based on the presence or absence of CURL.

+ +
+ +
+ +
+ + require_once + ("Services/Yadis/ParanoidHTTPFetcher.php") + (line 21) + +
+ + + +
+ +
+ +
+ + require_once + ("Services/Yadis/ParseHTML.php") + (line 26) + +
+ + +

Need this for parsing HTML (looking for META tags).

+ +
+ +
+ +
+ + require_once + ("Services/Yadis/XRDS.php") + (line 31) + +
+ + +

Need this to parse the XRDS document during Yadis discovery.

+ +
+
+
+ + + + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:31 -0700 by phpDocumentor 1.3.2 +

+
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/classtrees_OpenID.html b/modules/member/php-openid-1.2.3/doc/classtrees_OpenID.html new file mode 100644 index 000000000..fdffa63bc --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/classtrees_OpenID.html @@ -0,0 +1,104 @@ + + + + + + + + + + + + +

+ +

+

Root class Auth_OpenID_Association

+ + +

Root class Auth_OpenID_AuthRequest

+ + +

Root class Auth_OpenID_Consumer

+ + +

Root class Auth_OpenID_ConsumerResponse

+ + +

Root class Auth_OpenID_DatabaseConnection

+ + +

Root class Auth_OpenID_Decoder

+ + +

Root class Auth_OpenID_DiffieHellmanConsumerSession

+ + +

Root class Auth_OpenID_DiffieHellmanServerSession

+ + +

Root class Auth_OpenID_Encoder

+ + +

Root class Auth_OpenID_EncodingError

+ + +

Root class Auth_OpenID_OpenIDStore

+ + +

Root class Auth_OpenID_PlainTextConsumerSession

+ + +

Root class Auth_OpenID_PlainTextServerSession

+ + +

Root class Auth_OpenID_Server

+ + +

Root class Auth_OpenID_ServerError

+ + +

Root class Auth_OpenID_ServerRequest

+ + +

Root class Auth_OpenID_Signatory

+ + +

Root class Auth_OpenID_WebResponse

+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:27 -0700 by phpDocumentor 1.3.2 +

+ + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/classtrees_Yadis.html b/modules/member/php-openid-1.2.3/doc/classtrees_Yadis.html new file mode 100644 index 000000000..600e2b521 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/classtrees_Yadis.html @@ -0,0 +1,56 @@ + + + + + + + + + + + + +

+ +

+

Root class Services_Yadis_Discovery

+ + +

Root class Services_Yadis_Manager

+ + +

Root class Services_Yadis_PHPSession

+ + +

Root class Services_Yadis_Service

+ + +

Root class Services_Yadis_SessionLoader

+ + +

Root class Services_Yadis_XMLParser

+ + +

Root class Services_Yadis_XRDS

+ + +

Root class Services_Yadis_Yadis

+ + +

+ Documentation generated on Mon, 10 Sep 2007 13:29:27 -0700 by phpDocumentor 1.3.2 +

+ + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/elementindex.html b/modules/member/php-openid-1.2.3/doc/elementindex.html new file mode 100644 index 000000000..791a66d88 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/elementindex.html @@ -0,0 +1,1998 @@ + + + + + + + + + + + +

Full index

+

Package indexes

+ +
+
+ a + b + c + d + e + f + g + h + i + m + n + o + p + q + r + s + t + u + v + w + x + y +
+ + +
+
a
+ +
+
+
+
+ $AUTH_KEY_LEN +
+
+ +
+
+ addExtensionArg +
+
+ +
Add an extension argument to this OpenID authentication request.
+
+
+ answer +
+
+ +
+
+ answer +
+
+ +
+
+ attributes +
+
+ +
+
+ attributes +
+
+ +
Return the attributes of a specified node.
+
+
+ attributes +
+
+ +
+
+ Association.php +
+
+
Association.php in Association.php
+
+
+ Auth_OpenID_AlreadySigned +
+
+ +
An error that indicates that a response was already signed.
+
+
+ Auth_OpenID_Association +
+
+
Auth_OpenID_Association in Association.php
+
This class represents an association between a server and a consumer. In general, users of this library will never see instances of this object. The only exception is if you implement a custom Auth_OpenID_OpenIDStore.
+
+
+ Auth_OpenID_AuthRequest +
+
+
Auth_OpenID_AuthRequest in Consumer.php
+
This class represents an authentication request from a consumer to an OpenID server.
+
+
+ Auth_OpenID_AuthRequest +
+
+ +
Initialize an authentication request with the specified token, association, and endpoint.
+
+
+ Auth_OpenID_CANCEL +
+
+
Auth_OpenID_CANCEL in Consumer.php
+
Status to indicate cancellation of OpenID authentication.
+
+
+ Auth_OpenID_CancelResponse +
+
+ +
A response with a status of Auth_OpenID_CANCEL. Indicates that the user cancelled the OpenID authentication request. This has two relevant attributes:
+
+
+ Auth_OpenID_CancelResponse +
+
+ +
+
+ Auth_OpenID_Consumer +
+
+ +
Initialize a Consumer instance.
+
+
+ Auth_OpenID_Consumer +
+
+
Auth_OpenID_Consumer in Consumer.php
+
An OpenID consumer implementation that performs discovery and does session management. See the Consumer.php file documentation for more information.
+
+
+ Auth_OpenID_ConsumerResponse +
+
+ +
The base class for responses from the Auth_OpenID_Consumer.
+
+
+ Auth_OpenID_DatabaseConnection +
+
+
Auth_OpenID_DatabaseConnection in DatabaseConnection.php
+
An empty base class intended to emulate PEAR connection
+
+
+ Auth_OpenID_Decoder +
+
+
Auth_OpenID_Decoder in Server.php
+
Decode an incoming Auth_OpenID_WebResponse into an Auth_OpenID_Request.
+
+
+ Auth_OpenID_Decoder +
+
+ +
+
+ Auth_OpenID_DEFAULT_NONCE_CHRS +
+
+ +
This is the characters that the nonces are made from.
+
+
+ Auth_OpenID_DiffieHellmanConsumerSession +
+
+ +
+
+ Auth_OpenID_DiffieHellmanConsumerSession +
+
+ +
+
+ Auth_OpenID_DiffieHellmanServerSession +
+
+ +
+
+ Auth_OpenID_DiffieHellmanServerSession +
+
+ +
+
+ Auth_OpenID_digits +
+
+
Auth_OpenID_digits in OpenID.php
+
+
+ Auth_OpenID_DO_ABOUT +
+
+
Auth_OpenID_DO_ABOUT in OpenID.php
+
Status code returned when there were no OpenID arguments passed. This code indicates that the caller should return a 200 OK response and display an HTML page that says that this is an OpenID server endpoint.
+
+
+ Auth_OpenID_DO_AUTH +
+
+
Auth_OpenID_DO_AUTH in OpenID.php
+
Status code returned when the caller needs to authenticate the
+
+
+ Auth_OpenID_DumbStore +
+
+
Auth_OpenID_DumbStore in DumbStore.php
+
This is a store for use in the worst case, when you have no way of saving state on the consumer site. Using this store makes the consumer vulnerable to replay attacks, as it's unable to use nonces. Avoid using this store if it is at all possible.
+
+
+ Auth_OpenID_DumbStore +
+
+ +
Creates a new Auth_OpenID_DumbStore instance. For the security of the tokens generated by the library, this class attempts to at least have a secure implementation of getAuthKey.
+
+
+ Auth_OpenID_Encoder +
+
+
Auth_OpenID_Encoder in Server.php
+
Encode an Auth_OpenID_Response to an Auth_OpenID_WebResponse.
+
+
+ Auth_OpenID_EncodingError +
+
+ +
+
+ Auth_OpenID_EncodingError +
+
+ +
An error that indicates an encoding problem occurred.
+
+
+ Auth_OpenID_FAILURE +
+
+
Auth_OpenID_FAILURE in Consumer.php
+
This is the status code completeAuth returns when the value it received indicated an invalid login.
+
+
+ Auth_OpenID_FailureResponse +
+
+ +
A response with a status of Auth_OpenID_FAILURE. Indicates that the OpenID protocol has failed. This could be locally or remotely triggered. This has three relevant attributes:
+
+
+ Auth_OpenID_FailureResponse +
+
+ +
+
+ Auth_OpenID_FileStore +
+
+ +
Initializes a new Auth_OpenID_FileStore. This initializes the nonce and association directories, which are subdirectories of the directory passed in.
+
+
+ Auth_OpenID_FileStore +
+
+
Auth_OpenID_FileStore in FileStore.php
+
This is a filesystem-based store for OpenID associations and
+
+
+ AUTH_OPENID_HTTP_ERROR +
+
+ +
+
+ AUTH_OPENID_HTTP_OK +
+
+
AUTH_OPENID_HTTP_OK in Server.php
+
+
+ AUTH_OPENID_HTTP_REDIRECT +
+
+ +
+
+ Auth_OpenID_letters +
+
+
Auth_OpenID_letters in OpenID.php
+
Defines for regexes and format checking.
+
+
+ Auth_OpenID_LOCAL_ERROR +
+
+ +
Status code returned by the server when the only option is to show an error page, since we do not have enough information to redirect back to the consumer. The associated value is an error message that should be displayed on an HTML error page.
+
+
+ Auth_OpenID_MalformedReturnURL +
+
+ +
An error indicating that the return_to URL is malformed.
+
+
+ Auth_OpenID_MalformedReturnURL +
+
+ +
+
+ Auth_OpenID_MalformedTrustRoot +
+
+ +
This error is returned when the trust_root value is malformed.
+
+
+ Auth_OpenID_MySQLStore +
+
+
Auth_OpenID_MySQLStore in MySQLStore.php
+
An SQL store that uses MySQL as its backend.
+
+
+ Auth_OpenID_NO_MATH_SUPPORT +
+
+ +
+
+ Auth_OpenID_OpenIDStore +
+
+
Auth_OpenID_OpenIDStore in Interface.php
+
This is the interface for the store objects the OpenID library
+
+
+ Auth_OpenID_PARSE_ERROR +
+
+
Auth_OpenID_PARSE_ERROR in Consumer.php
+
This is the status code beginAuth returns when the page fetched from the entered OpenID URL doesn't contain the necessary link tags to function as an identity page.
+
+
+ Auth_OpenID_PlainTextConsumerSession +
+
+ +
+
+ Auth_OpenID_PlainTextServerSession +
+
+ +
+
+ Auth_OpenID_PostgreSQLStore +
+
+
Auth_OpenID_PostgreSQLStore in PostgreSQLStore.php
+
An SQL store that uses PostgreSQL as its backend.
+
+
+ Auth_OpenID_punct +
+
+
Auth_OpenID_punct in OpenID.php
+
+
+ Auth_OpenID_REDIRECT +
+
+
Auth_OpenID_REDIRECT in OpenID.php
+
Status code returned when there is a redirect back to the consumer. The value is the URL to redirect back to. The caller should return a 302 Found redirect with a Location: header containing the URL.
+
+
+ Auth_OpenID_REMOTE_ERROR +
+
+ +
Status code returned when there is an error to return in key-value form to the consumer. The caller should return a 400 Bad Request response with content-type text/plain and the value as the body.
+
+
+ Auth_OpenID_REMOTE_OK +
+
+
Auth_OpenID_REMOTE_OK in OpenID.php
+
Status code returned when there is a key-value form OK response to the consumer. The value associated with this code is the response. The caller should return a 200 OK response with content-type text/plain and the value as the body.
+
+
+ Auth_OpenID_Server +
+
+ +
+
+ Auth_OpenID_Server +
+
+
Auth_OpenID_Server in Server.php
+
An object that implements the OpenID protocol for a single URL.
+
+
+ Auth_OpenID_ServerError +
+
+ +
An error class which gets instantiated and returned whenever an OpenID protocol error occurs. Be prepared to use this in place of an ordinary server response.
+
+
+ Auth_OpenID_ServerRequest +
+
+ +
+
+ Auth_OpenID_ServerRequest +
+
+
Auth_OpenID_ServerRequest in ServerRequest.php
+
Object that holds the state of a request to the OpenID server
+
+
+ Auth_OpenID_ServiceEndpointLoader +
+
+ +
A session helper class designed to translate between arrays and
+
+
+ Auth_OpenID_SetupNeededResponse +
+
+ +
+
+ Auth_OpenID_SetupNeededResponse +
+
+ +
A response with a status of Auth_OpenID_SETUP_NEEDED. Indicates that the request was in immediate mode, and the server is unable to authenticate the user without further interaction.
+
+
+ Auth_OpenID_SETUP_NEEDED +
+
+
Auth_OpenID_SETUP_NEEDED in Consumer.php
+
This is the status code completeAuth returns when the Auth_OpenID_Consumer instance is in immediate mode, and the identity server sends back a URL to send the user to to complete his or her login.
+
+
+ Auth_OpenID_Signatory +
+
+ +
Create a new signatory using a given store.
+
+
+ Auth_OpenID_Signatory +
+
+
Auth_OpenID_Signatory in Server.php
+
Responsible for the signature of query data and the verification of OpenID signature values.
+
+
+ Auth_OpenID_SigningEncoder +
+
+ +
An encoder which also takes care of signing fields when required.
+
+
+ Auth_OpenID_SigningEncoder +
+
+ +
+
+ Auth_OpenID_SQLiteStore +
+
+
Auth_OpenID_SQLiteStore in SQLiteStore.php
+
An SQL store that uses SQLite as its backend.
+
+
+ Auth_OpenID_SQLStore +
+
+ +
This creates a new SQLStore instance. It requires an established database connection be given to it, and it allows overriding the default table names.
+
+
+ Auth_OpenID_SQLStore +
+
+
Auth_OpenID_SQLStore in SQLStore.php
+
This is the parent class for the SQL stores, which contains the logic common to all of the SQL stores.
+
+
+ Auth_OpenID_SUCCESS +
+
+
Auth_OpenID_SUCCESS in Consumer.php
+
This is the status code returned when the complete method returns successfully.
+
+
+ Auth_OpenID_SuccessResponse +
+
+ +
A response with a status of Auth_OpenID_SUCCESS. Indicates that
+
+
+ Auth_OpenID_UntrustedReturnURL +
+
+ +
An error that indicates that the given return_to is not under the given trust_root.
+
+
+ Auth_OpenID_UntrustedReturnURL +
+
+ +
+
+ Auth_OpenID_WebResponse +
+
+ +
+
+ Auth_OpenID_WebResponse +
+
+ +
A web-capable response object which you can use to generate a user-agent response.
+
+
+ autoCommit +
+
+ +
Sets auto-commit mode on this database connection.
+
+
+ +
+
b
+ +
+
+
+
+ $body +
+
+ +
+
+ begin +
+
+ +
Start the OpenID authentication process. See steps 1-2 in the overview at the top of this file.
+
+
+ begin +
+
+
Auth_OpenID_DatabaseConnection::begin() in DatabaseConnection.php
+
Starts a transaction on this connection, if supported.
+
+
+ beginWithoutDiscovery +
+
+ +
Start OpenID verification without doing OpenID server
+
+
+ blobDecode +
+
+ +
+
+ blobEncode +
+
+ +
+
+ +
+
c
+ +
+
+
+
+ $code +
+
+ +
+
+ Consumer.php +
+
+
Consumer.php in Consumer.php
+
+
+ check +
+
+ +
+
+ check +
+
+ +
+
+ check +
+
+ +
Override this.
+
+
+ clean +
+
+ +
Remove expired entries from the database. This is potentially expensive, so only run when it is acceptable to take time.
+
+
+ cleanup +
+
+ +
Clean up Yadis-related services in the session and return the most-recently-attempted service from the manager, if one exists.
+
+
+ commit +
+
+ +
Commits a transaction on this connection, if supported.
+
+
+ complete +
+
+ +
Called to interpret the server's response to an OpenID request. It is called in step 4 of the flow described in the consumer overview.
+
+
+ content +
+
+ +
+
+ content +
+
+ +
+
+ content +
+
+ +
Return the textual content of a specified node.
+
+
+ contents +
+
+ +
Return the contents of the session in array form.
+
+
+ createAssociation +
+
+ +
Make a new association.
+
+
+ createAuthKey +
+
+ +
Generate a new random auth key and safely store it in the location specified by $this->auth_key_name.
+
+
+ createTables +
+
+ +
+
+ create_assoc_table +
+
+ +
+
+ create_nonce_table +
+
+ +
+
+ create_settings_table +
+
+ +
+
+ curlPresent +
+
+ +
+
+ +
+
d
+ +
+
+
+
+ $dumb_key +
+
+ +
+
+ DatabaseConnection.php +
+
+
DatabaseConnection.php in DatabaseConnection.php
+
+
+ DumbStore.php +
+
+
DumbStore.php in DumbStore.php
+
+
+ decode +
+
+ +
Given an HTTP query in an array (key-value pairs), decode it into an Auth_OpenID_Request object.
+
+
+ decodeRequest +
+
+ +
Decodes a query args array into the appropriate Auth_OpenID_Request object.
+
+
+ defaultDecoder +
+
+ +
+
+ del +
+
+ +
Remove a key/value pair from the session.
+
+
+ deserialize +
+
+ +
Parse an association as stored by serialize(). This is the inverse of serialize.
+
+
+ destroy +
+
+ +
+
+ discover +
+
+ +
This should be called statically and will build a Yadis instance if the discovery process succeeds. This implements Yadis discovery as specified in the Yadis specification.
+
+
+ +
+
e
+ +
+
+
+
+ encode +
+
+ +
Sign an Auth_OpenID_Response and return an Auth_OpenID_WebResponse.
+
+
+ encode +
+
+ +
Encode an Auth_OpenID_Response and return an Auth_OpenID_WebResponse.
+
+
+ encodeResponse +
+
+ +
Encodes as response in the appropriate format suitable for sending to the user agent.
+
+
+ encodeToKVForm +
+
+ +
Encodes the response to key-value form. This is a machine-readable format used to respond to messages which came directly from the consumer and not through the user-agent. See the OpenID specification.
+
+
+ encodeToURL +
+
+ +
Encodes this error's response as a URL suitable for redirection. If the response has no return_to, another Auth_OpenID_ServerError is returned.
+
+
+ equal +
+
+ +
This checks to see if two Auth_OpenID_Association instances represent the same association.
+
+
+ evalXPath +
+
+ +
+
+ evalXPath +
+
+ +
Evaluate an XPath expression and return the resulting node list. This should be overridden by subclasses.
+
+
+ evalXPath +
+
+ +
+
+ extensionResponse +
+
+ +
Extract signed extension data from the server's response.
+
+
+ extractSecret +
+
+ +
+
+ extractSecret +
+
+ +
+
+ +
+
f
+ +
+
+
+
+ FileStore.php +
+
+
FileStore.php in FileStore.php
+
+
+ fromQuery +
+
+ +
+
+ fromQuery +
+
+ +
+
+ fromSession +
+
+ +
Given a session data value (an array), this creates an object
+
+
+ +
+
g
+ +
+
+
+
+ get +
+
+ +
Get a key's value from the session.
+
+
+ getAll +
+
+ +
Run an SQL query with the specified parameters, if any.
+
+
+ getAssociation +
+
+ +
Retrieve an association. If no handle is specified, return the association with the most recent issue time.
+
+
+ getAssociation +
+
+ +
+
+ getAssociation +
+
+ +
This method returns an Association object from storage that matches the server URL and, if specified, handle. It returns null if no such association is found or if the matching association is expired.
+
+
+ getAssociation +
+
+ +
Given an association handle, get the association from the store, or return a ServerError or null if something goes wrong.
+
+
+ getAssociation +
+
+ +
This implementation always returns null.
+
+
+ getAssociationFilename +
+
+ +
Create a unique filename for a given server url and
+
+
+ getAuthKey +
+
+ +
+
+ getAuthKey +
+
+ +
This method returns a key used to sign the tokens, to ensure that they haven't been tampered with in transit. It should return the same key every time it is called. The key returned should be AUTH_KEY_LEN bytes long.
+
+
+ getAuthKey +
+
+ +
Retrieve the auth key from the file specified by $this->auth_key_name, creating it if it does not exist.
+
+
+ getAuthKey +
+
+ +
This method returns the auth key generated by the constructor.
+
+
+ getElements +
+
+ +
Used to get XML elements from this object's <Service> element.
+
+
+ getExpiresIn +
+
+ +
This returns the number of seconds this association is still valid for, or 0 if the association is no longer valid.
+
+
+ getHTTPFetcher +
+
+ +
Returns an HTTP fetcher object. If the CURL extension is present, an instance of Services_Yadis_ParanoidHTTPFetcher is returned. If not, an instance of Services_Yadis_PlainHTTPFetcher is returned.
+
+
+ getNextService +
+
+ +
Return the next authentication service for the pair of user_input and session. This function handles fallback.
+
+
+ getOne +
+
+ +
Run an SQL query and return the first column of the first row of the result set, if any.
+
+
+ getPriority +
+
+ +
Returns the "priority" attribute value of this <Service> element, if the attribute is present. Returns null if not.
+
+
+ getRequest +
+
+ +
+
+ getRequest +
+
+ +
+
+ getReturnTo +
+
+ +
Get the openid.return_to argument from this response.
+
+
+ getRow +
+
+ +
Run an SQL query and return the first row of the result set, if any.
+
+
+ getTypes +
+
+ +
Return the URIs in the "Type" elements, if any, of this Service element.
+
+
+ getURIs +
+
+ +
Return the URIs in the "URI" elements, if any, of this Service element. The URIs are returned sorted in priority order.
+
+
+ +
+
h
+ +
+
+
+
+ handleRequest +
+
+ +
Handle a request. Given an Auth_OpenID_Request object, call the appropriate Auth_OpenID_Server method to process the request and generate a response.
+
+
+ hasReturnTo +
+
+ +
Returns the return_to URL for the request which caused this error.
+
+
+ +
+
i
+ +
+
+
+
+ Interface.php +
+
+
Interface.php in Interface.php
+
+
+ init +
+
+ +
Initialize an instance of Services_Yadis_XMLParser with some XML and namespaces. This SHOULD NOT be overridden by subclasses.
+
+
+ invalidate +
+
+ +
Invalidate a given association handle.
+
+
+ isDumb +
+
+ +
This store is a dumb mode store, so this method is overridden to return true.
+
+
+ isDumb +
+
+ +
This method must return true if the store is a dumb-mode-style store. Unlike all other methods in this class, this one provides a default implementation, which returns false.
+
+
+ isError +
+
+ +
Returns true if $value constitutes a database error; returns false otherwise.
+
+
+ +
+
m
+ +
+
+
+
+ MySQLStore.php +
+
+
MySQLStore.php in MySQLStore.php
+
+
+ Manager.php +
+
+
Manager.php in Manager.php
+
+
+ +
+
n
+ +
+
+
+
+ $normal_key +
+
+ +
+
+ newObject +
+
+ +
Returns a new instance of this loader's class, using the session data to construct it if necessary. The object need only be created; $this->fromSession() will take care of setting the object's attributes.
+
+
+ newObject +
+
+ +
+
+ newObject +
+
+ +
+
+ nextService +
+
+ +
Return the next service
+
+
+ +
+
o
+ +
+
+
+
+ OpenID.php +
+
+
OpenID.php in OpenID.php
+
+
+ +
+
p
+ +
+
+
+
+ PostgreSQLStore.php +
+
+
PostgreSQLStore.php in PostgreSQLStore.php
+
+
+ parseXRDS +
+
+ +
Parse an XML string (XRDS document) and return either a Services_Yadis_XRDS object or null, depending on whether the XRDS XML is valid.
+
+
+ prepareForLoad +
+
+ +
Prepares the data array by making any necessary changes.
+
+
+ prepareForLoad +
+
+ +
+
+ prepareForSave +
+
+ +
+
+ prepareForSave +
+
+ +
Override this.
+
+
+ +
+
q
+ +
+
+
+
+ query +
+
+
Auth_OpenID_DatabaseConnection::query() in DatabaseConnection.php
+
Run an SQL query with the specified parameters, if any.
+
+
+ +
+
r
+ +
+
+
+
+ $responseFactory +
+
+ +
+
+ readAuthKey +
+
+ +
Read the auth key from the auth key file. Will return None if there is currently no key.
+
+
+ redirectURL +
+
+ +
Compute the appropriate redirection URL for this request based on a specified trust root and return-to.
+
+
+ registerNamespace +
+
+ +
+
+ registerNamespace +
+
+ +
+
+ registerNamespace +
+
+ +
Register a namespace with the XML parser. This should be overridden by subclasses.
+
+
+ removeAssociation +
+
+ +
+
+ removeAssociation +
+
+ +
This method removes the matching association if it's found, and returns whether the association was removed or not.
+
+
+ removeAssociation +
+
+ +
Remove an association if it exists. Do nothing if it does not.
+
+
+ removeAssociation +
+
+ +
This implementation always returns false.
+
+
+ requiredKeys +
+
+ +
+
+ requiredKeys +
+
+ +
+
+ reset +
+
+ +
Removes all entries from the store; implementation is optional.
+
+
+ reset +
+
+ +
Resets the store by removing all records from the store's tables.
+
+
+ resultToBool +
+
+ +
Converts a query result to a boolean. If the result is a database error according to $this->isError(), this returns false; otherwise, this returns true.
+
+
+ rollback +
+
+ +
Performs a rollback on this connection, if supported.
+
+
+ +
+
s
+ +
+
+
+
+ $SECRET_LIFETIME +
+
+ +
+
+ $session_type +
+
+ +
An object that knows how to handle association requests with no session type.
+
+
+ $session_type +
+
+ +
An object that knows how to handle association requests with the Diffie-Hellman session type.
+
+
+ $session_type +
+
+ +
+
+ $session_type +
+
+ +
+
+ $status +
+
+ +
+
+ $status +
+
+ +
+
+ $status +
+
+ +
+
+ $status +
+
+ +
+
+ $status +
+
+ +
+
+ Server.php +
+
+
Server.php in Server.php
+
+
+ ServerRequest.php +
+
+
ServerRequest.php in ServerRequest.php
+
+
+ SQLiteStore.php +
+
+
SQLiteStore.php in SQLiteStore.php
+
+
+ SQLStore.php +
+
+
SQLStore.php in SQLStore.php
+
+
+ serialize +
+
+ +
Convert an association to KV form.
+
+
+ services +
+
+ +
Returns the list of service objects as described by the XRDS document, if this yadis object represents a successful Yadis discovery.
+
+
+ services +
+
+ +
Returns a list of service objects which correspond to <Service> elements in the XRDS XML document for this object.
+
+
+ Services_Yadis_Discovery +
+
+ +
Initialize a discovery object.
+
+
+ Services_Yadis_Discovery +
+
+ +
State management for discovery.
+
+
+ Services_Yadis_dom +
+
+ +
This concrete implementation of Services_Yadis_XMLParser implements
+
+
+ Services_Yadis_dom +
+
+ +
+
+ Services_Yadis_domxml +
+
+ +
+
+ Services_Yadis_domxml +
+
+ +
This concrete implementation of Services_Yadis_XMLParser implements
+
+
+ Services_Yadis_getNSMap +
+
+ +
+
+ Services_Yadis_getSupportedExtensions +
+
+ +
+
+ Services_Yadis_getXMLParser +
+
+ +
Returns an instance of a Services_Yadis_XMLParser subclass based on the availability of PHP extensions for XML parsing. If Services_Yadis_setDefaultParser has been called, the parser used in that call will be returned instead.
+
+
+ Services_Yadis_Manager +
+
+
Services_Yadis_Manager in Manager.php
+
The Yadis service manager which stores state in a session and iterates over <Service> elements in a Yadis XRDS document and lets a caller attempt to use each one. This is used by the Yadis library internally.
+
+
+ Services_Yadis_ManagerLoader +
+
+ +
A session helper class designed to translate between arrays and
+
+
+ SERVICES_YADIS_MATCH_ALL +
+
+ +
This match mode means a given service must match ALL filters passed to the Services_Yadis_XRDS::services() call.
+
+
+ SERVICES_YADIS_MATCH_ANY +
+
+ +
This match mode means a given service must match ANY filters (at least one) passed to the Services_Yadis_XRDS::services() call.
+
+
+ SERVICES_YADIS_MAX_PRIORITY +
+
+ +
The priority value used for service elements with no priority specified.
+
+
+ Services_Yadis_PHPSession +
+
+ +
The base session class used by the Services_Yadis_Manager. This class wraps the default PHP session machinery and should be subclassed if your application doesn't use PHP sessioning.
+
+
+ Services_Yadis_Service +
+
+ +
This class represents a <Service> element in an XRDS document.
+
+
+ Services_Yadis_Service +
+
+ +
Creates an empty service object.
+
+
+ Services_Yadis_SessionLoader +
+
+ +
A session helper class designed to translate between arrays and
+
+
+ Services_Yadis_setDefaultParser +
+
+ +
Set a default parser to override the extension-driven selection of available parser classes. This is helpful in a test environment or one in which multiple parsers can be used but one is more desirable.
+
+
+ Services_Yadis_XMLParser +
+
+ +
The base class for wrappers for available PHP XML-parsing
+
+
+ Services_Yadis_XRDS +
+
+ +
This class performs parsing of XRDS documents.
+
+
+ Services_Yadis_XRDS +
+
+ +
Instantiate a Services_Yadis_XRDS object. Requires an XPath instance which has been used to parse a valid XRDS document.
+
+
+ Services_Yadis_Yadis +
+
+ +
Instantiates an empty Services_Yadis_Yadis object. This constructor should not be used by any user of the library.
+
+
+ Services_Yadis_Yadis +
+
+ +
This is the core of the PHP Yadis library. This is the only class a user needs to use to perform Yadis discovery. This class performs the discovery AND stores the result of the discovery.
+
+
+ set +
+
+ +
Set a session key/value pair.
+
+
+ setSQL +
+
+ +
+
+ setSQL +
+
+ +
This method should be overridden by subclasses. This method is called by the constructor to set values in $this->sql, which is an array keyed on sql name.
+
+
+ setXML +
+
+ +
+
+ setXML +
+
+ +
Set this parser object's XML payload. This should be overridden by subclasses.
+
+
+ setXML +
+
+ +
+
+ sign +
+
+ +
Given a response, sign the fields in the response's 'signed' list, and insert the signature into the response.
+
+
+ storeAssociation +
+
+ +
+
+ storeAssociation +
+
+ +
Store an association in the association directory.
+
+
+ storeAssociation +
+
+ +
This method puts an Association object into storage, retrievable by server URL and handle.
+
+
+ storeAssociation +
+
+ +
This implementation does nothing.
+
+
+ storeNonce +
+
+ +
This implementation does nothing.
+
+
+ storeNonce +
+
+ +
Mark this nonce as present.
+
+
+ storeNonce +
+
+ +
Stores a nonce. This is used by the consumer to prevent replay attacks.
+
+
+ +
+
t
+ +
+
+
+
+ tableExists +
+
+ +
+
+ toSession +
+
+ +
Returns an array of keys and values built from the attributes of $obj. If $this->prepareForSave($obj) returns an array, its keys and values are used to update the $data array of attributes from $obj.
+
+
+ toString +
+
+ +
+
+ toString +
+
+ +
Returns this error message.
+
+
+ toString +
+
+ +
+
+ +
+
u
+ +
+
+
+
+ useNonce +
+
+ +
+
+ useNonce +
+
+ +
This method is called when the library is attempting to use a nonce. If the nonce is in the store, this method removes it and returns a value which evaluates as true. Otherwise it returns a value which evaluates as false.
+
+
+ useNonce +
+
+ +
Return whether this nonce is present. As a side effect, mark it as no longer present.
+
+
+ useNonce +
+
+ +
In a system truly limited to dumb mode, nonces must all be accepted. This therefore always returns true, which makes replay attacks feasible.
+
+
+ +
+
v
+ +
+
+
+
+ verify +
+
+ +
Verify, using a given association handle, a signature with signed key-value pairs from an HTTP request.
+
+
+ +
+
w
+ +
+
+
+
+ whichEncoding +
+
+ +
Returns one of $_Auth_OpenID_Encode_Url, $_Auth_OpenID_Encode_Kvform, or null, depending on the type of encoding expected for this error's payload.
+
+
+ +
+
x
+ +
+
+
+
+ XML.php +
+
+
XML.php in XML.php
+
+
+ XRDS.php +
+
+
XRDS.php in XRDS.php
+
+
+ +
+
y
+ +
+
+
+
+ Yadis.php +
+
+
Yadis.php in Yadis.php
+
+
+ +
+ a + b + c + d + e + f + g + h + i + m + n + o + p + q + r + s + t + u + v + w + x + y +
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/elementindex_OpenID.html b/modules/member/php-openid-1.2.3/doc/elementindex_OpenID.html new file mode 100644 index 000000000..48bde7f27 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/elementindex_OpenID.html @@ -0,0 +1,1473 @@ + + + + + + + + + + + +

[OpenID] element index

+

Package indexes

+ +All elements +
+
+ a + b + c + d + e + f + g + h + i + m + n + o + p + q + r + s + t + u + v + w +
+ + +
+
a
+ +
+
+
+
+ $AUTH_KEY_LEN +
+
+ +
+
+ addExtensionArg +
+
+ +
Add an extension argument to this OpenID authentication request.
+
+
+ answer +
+
+ +
+
+ answer +
+
+ +
+
+ Association.php +
+
+
Association.php in Association.php
+
+
+ Auth_OpenID_AlreadySigned +
+
+ +
An error that indicates that a response was already signed.
+
+
+ Auth_OpenID_Association +
+
+
Auth_OpenID_Association in Association.php
+
This class represents an association between a server and a consumer. In general, users of this library will never see instances of this object. The only exception is if you implement a custom Auth_OpenID_OpenIDStore.
+
+
+ Auth_OpenID_AuthRequest +
+
+ +
Initialize an authentication request with the specified token, association, and endpoint.
+
+
+ Auth_OpenID_AuthRequest +
+
+
Auth_OpenID_AuthRequest in Consumer.php
+
This class represents an authentication request from a consumer to an OpenID server.
+
+
+ Auth_OpenID_CANCEL +
+
+
Auth_OpenID_CANCEL in Consumer.php
+
Status to indicate cancellation of OpenID authentication.
+
+
+ Auth_OpenID_CancelResponse +
+
+ +
+
+ Auth_OpenID_CancelResponse +
+
+ +
A response with a status of Auth_OpenID_CANCEL. Indicates that the user cancelled the OpenID authentication request. This has two relevant attributes:
+
+
+ Auth_OpenID_Consumer +
+
+
Auth_OpenID_Consumer in Consumer.php
+
An OpenID consumer implementation that performs discovery and does session management. See the Consumer.php file documentation for more information.
+
+
+ Auth_OpenID_Consumer +
+
+ +
Initialize a Consumer instance.
+
+
+ Auth_OpenID_ConsumerResponse +
+
+ +
The base class for responses from the Auth_OpenID_Consumer.
+
+
+ Auth_OpenID_DatabaseConnection +
+
+
Auth_OpenID_DatabaseConnection in DatabaseConnection.php
+
An empty base class intended to emulate PEAR connection
+
+
+ Auth_OpenID_Decoder +
+
+
Auth_OpenID_Decoder in Server.php
+
Decode an incoming Auth_OpenID_WebResponse into an Auth_OpenID_Request.
+
+
+ Auth_OpenID_Decoder +
+
+ +
+
+ Auth_OpenID_DEFAULT_NONCE_CHRS +
+
+ +
This is the characters that the nonces are made from.
+
+
+ Auth_OpenID_DiffieHellmanConsumerSession +
+
+ +
+
+ Auth_OpenID_DiffieHellmanConsumerSession +
+
+ +
+
+ Auth_OpenID_DiffieHellmanServerSession +
+
+ +
+
+ Auth_OpenID_DiffieHellmanServerSession +
+
+ +
+
+ Auth_OpenID_digits +
+
+
Auth_OpenID_digits in OpenID.php
+
+
+ Auth_OpenID_DO_ABOUT +
+
+
Auth_OpenID_DO_ABOUT in OpenID.php
+
Status code returned when there were no OpenID arguments passed. This code indicates that the caller should return a 200 OK response and display an HTML page that says that this is an OpenID server endpoint.
+
+
+ Auth_OpenID_DO_AUTH +
+
+
Auth_OpenID_DO_AUTH in OpenID.php
+
Status code returned when the caller needs to authenticate the
+
+
+ Auth_OpenID_DumbStore +
+
+ +
Creates a new Auth_OpenID_DumbStore instance. For the security of the tokens generated by the library, this class attempts to at least have a secure implementation of getAuthKey.
+
+
+ Auth_OpenID_DumbStore +
+
+
Auth_OpenID_DumbStore in DumbStore.php
+
This is a store for use in the worst case, when you have no way of saving state on the consumer site. Using this store makes the consumer vulnerable to replay attacks, as it's unable to use nonces. Avoid using this store if it is at all possible.
+
+
+ Auth_OpenID_Encoder +
+
+
Auth_OpenID_Encoder in Server.php
+
Encode an Auth_OpenID_Response to an Auth_OpenID_WebResponse.
+
+
+ Auth_OpenID_EncodingError +
+
+ +
An error that indicates an encoding problem occurred.
+
+
+ Auth_OpenID_EncodingError +
+
+ +
+
+ Auth_OpenID_FAILURE +
+
+
Auth_OpenID_FAILURE in Consumer.php
+
This is the status code completeAuth returns when the value it received indicated an invalid login.
+
+
+ Auth_OpenID_FailureResponse +
+
+ +
A response with a status of Auth_OpenID_FAILURE. Indicates that the OpenID protocol has failed. This could be locally or remotely triggered. This has three relevant attributes:
+
+
+ Auth_OpenID_FailureResponse +
+
+ +
+
+ Auth_OpenID_FileStore +
+
+ +
Initializes a new Auth_OpenID_FileStore. This initializes the nonce and association directories, which are subdirectories of the directory passed in.
+
+
+ Auth_OpenID_FileStore +
+
+
Auth_OpenID_FileStore in FileStore.php
+
This is a filesystem-based store for OpenID associations and
+
+
+ AUTH_OPENID_HTTP_ERROR +
+
+ +
+
+ AUTH_OPENID_HTTP_OK +
+
+
AUTH_OPENID_HTTP_OK in Server.php
+
+
+ AUTH_OPENID_HTTP_REDIRECT +
+
+ +
+
+ Auth_OpenID_letters +
+
+
Auth_OpenID_letters in OpenID.php
+
Defines for regexes and format checking.
+
+
+ Auth_OpenID_LOCAL_ERROR +
+
+ +
Status code returned by the server when the only option is to show an error page, since we do not have enough information to redirect back to the consumer. The associated value is an error message that should be displayed on an HTML error page.
+
+
+ Auth_OpenID_MalformedReturnURL +
+
+ +
An error indicating that the return_to URL is malformed.
+
+
+ Auth_OpenID_MalformedReturnURL +
+
+ +
+
+ Auth_OpenID_MalformedTrustRoot +
+
+ +
This error is returned when the trust_root value is malformed.
+
+
+ Auth_OpenID_MySQLStore +
+
+
Auth_OpenID_MySQLStore in MySQLStore.php
+
An SQL store that uses MySQL as its backend.
+
+
+ Auth_OpenID_NO_MATH_SUPPORT +
+
+ +
+
+ Auth_OpenID_OpenIDStore +
+
+
Auth_OpenID_OpenIDStore in Interface.php
+
This is the interface for the store objects the OpenID library
+
+
+ Auth_OpenID_PARSE_ERROR +
+
+
Auth_OpenID_PARSE_ERROR in Consumer.php
+
This is the status code beginAuth returns when the page fetched from the entered OpenID URL doesn't contain the necessary link tags to function as an identity page.
+
+
+ Auth_OpenID_PlainTextConsumerSession +
+
+ +
+
+ Auth_OpenID_PlainTextServerSession +
+
+ +
+
+ Auth_OpenID_PostgreSQLStore +
+
+
Auth_OpenID_PostgreSQLStore in PostgreSQLStore.php
+
An SQL store that uses PostgreSQL as its backend.
+
+
+ Auth_OpenID_punct +
+
+
Auth_OpenID_punct in OpenID.php
+
+
+ Auth_OpenID_REDIRECT +
+
+
Auth_OpenID_REDIRECT in OpenID.php
+
Status code returned when there is a redirect back to the consumer. The value is the URL to redirect back to. The caller should return a 302 Found redirect with a Location: header containing the URL.
+
+
+ Auth_OpenID_REMOTE_ERROR +
+
+ +
Status code returned when there is an error to return in key-value form to the consumer. The caller should return a 400 Bad Request response with content-type text/plain and the value as the body.
+
+
+ Auth_OpenID_REMOTE_OK +
+
+
Auth_OpenID_REMOTE_OK in OpenID.php
+
Status code returned when there is a key-value form OK response to the consumer. The value associated with this code is the response. The caller should return a 200 OK response with content-type text/plain and the value as the body.
+
+
+ Auth_OpenID_Server +
+
+ +
+
+ Auth_OpenID_Server +
+
+
Auth_OpenID_Server in Server.php
+
An object that implements the OpenID protocol for a single URL.
+
+
+ Auth_OpenID_ServerError +
+
+ +
An error class which gets instantiated and returned whenever an OpenID protocol error occurs. Be prepared to use this in place of an ordinary server response.
+
+
+ Auth_OpenID_ServerRequest +
+
+
Auth_OpenID_ServerRequest in ServerRequest.php
+
Object that holds the state of a request to the OpenID server
+
+
+ Auth_OpenID_ServerRequest +
+
+ +
+
+ Auth_OpenID_SetupNeededResponse +
+
+ +
+
+ Auth_OpenID_SetupNeededResponse +
+
+ +
A response with a status of Auth_OpenID_SETUP_NEEDED. Indicates that the request was in immediate mode, and the server is unable to authenticate the user without further interaction.
+
+
+ Auth_OpenID_SETUP_NEEDED +
+
+
Auth_OpenID_SETUP_NEEDED in Consumer.php
+
This is the status code completeAuth returns when the Auth_OpenID_Consumer instance is in immediate mode, and the identity server sends back a URL to send the user to to complete his or her login.
+
+
+ Auth_OpenID_Signatory +
+
+ +
Create a new signatory using a given store.
+
+
+ Auth_OpenID_Signatory +
+
+
Auth_OpenID_Signatory in Server.php
+
Responsible for the signature of query data and the verification of OpenID signature values.
+
+
+ Auth_OpenID_SigningEncoder +
+
+ +
+
+ Auth_OpenID_SigningEncoder +
+
+ +
An encoder which also takes care of signing fields when required.
+
+
+ Auth_OpenID_SQLiteStore +
+
+
Auth_OpenID_SQLiteStore in SQLiteStore.php
+
An SQL store that uses SQLite as its backend.
+
+
+ Auth_OpenID_SQLStore +
+
+
Auth_OpenID_SQLStore in SQLStore.php
+
This is the parent class for the SQL stores, which contains the logic common to all of the SQL stores.
+
+
+ Auth_OpenID_SQLStore +
+
+ +
This creates a new SQLStore instance. It requires an established database connection be given to it, and it allows overriding the default table names.
+
+
+ Auth_OpenID_SUCCESS +
+
+
Auth_OpenID_SUCCESS in Consumer.php
+
This is the status code returned when the complete method returns successfully.
+
+
+ Auth_OpenID_SuccessResponse +
+
+ +
A response with a status of Auth_OpenID_SUCCESS. Indicates that
+
+
+ Auth_OpenID_UntrustedReturnURL +
+
+ +
An error that indicates that the given return_to is not under the given trust_root.
+
+
+ Auth_OpenID_UntrustedReturnURL +
+
+ +
+
+ Auth_OpenID_WebResponse +
+
+ +
+
+ Auth_OpenID_WebResponse +
+
+ +
A web-capable response object which you can use to generate a user-agent response.
+
+
+ autoCommit +
+
+ +
Sets auto-commit mode on this database connection.
+
+
+ +
+
b
+ +
+
+
+
+ $body +
+
+ +
+
+ begin +
+
+ +
Start the OpenID authentication process. See steps 1-2 in the overview at the top of this file.
+
+
+ begin +
+
+
Auth_OpenID_DatabaseConnection::begin() in DatabaseConnection.php
+
Starts a transaction on this connection, if supported.
+
+
+ beginWithoutDiscovery +
+
+ +
Start OpenID verification without doing OpenID server
+
+
+ blobDecode +
+
+ +
+
+ blobEncode +
+
+ +
+
+ +
+
c
+ +
+
+
+
+ $code +
+
+ +
+
+ Consumer.php +
+
+
Consumer.php in Consumer.php
+
+
+ clean +
+
+ +
Remove expired entries from the database. This is potentially expensive, so only run when it is acceptable to take time.
+
+
+ commit +
+
+ +
Commits a transaction on this connection, if supported.
+
+
+ complete +
+
+ +
Called to interpret the server's response to an OpenID request. It is called in step 4 of the flow described in the consumer overview.
+
+
+ createAssociation +
+
+ +
Make a new association.
+
+
+ createAuthKey +
+
+ +
Generate a new random auth key and safely store it in the location specified by $this->auth_key_name.
+
+
+ createTables +
+
+ +
+
+ create_assoc_table +
+
+ +
+
+ create_nonce_table +
+
+ +
+
+ create_settings_table +
+
+ +
+
+ +
+
d
+ +
+
+
+
+ $dumb_key +
+
+ +
+
+ DatabaseConnection.php +
+
+
DatabaseConnection.php in DatabaseConnection.php
+
+
+ DumbStore.php +
+
+
DumbStore.php in DumbStore.php
+
+
+ decode +
+
+ +
Given an HTTP query in an array (key-value pairs), decode it into an Auth_OpenID_Request object.
+
+
+ decodeRequest +
+
+ +
Decodes a query args array into the appropriate Auth_OpenID_Request object.
+
+
+ defaultDecoder +
+
+ +
+
+ deserialize +
+
+ +
Parse an association as stored by serialize(). This is the inverse of serialize.
+
+
+ destroy +
+
+ +
+
+ +
+
e
+ +
+
+
+
+ encode +
+
+ +
Sign an Auth_OpenID_Response and return an Auth_OpenID_WebResponse.
+
+
+ encode +
+
+ +
Encode an Auth_OpenID_Response and return an Auth_OpenID_WebResponse.
+
+
+ encodeResponse +
+
+ +
Encodes as response in the appropriate format suitable for sending to the user agent.
+
+
+ encodeToKVForm +
+
+ +
Encodes the response to key-value form. This is a machine-readable format used to respond to messages which came directly from the consumer and not through the user-agent. See the OpenID specification.
+
+
+ encodeToURL +
+
+ +
Encodes this error's response as a URL suitable for redirection. If the response has no return_to, another Auth_OpenID_ServerError is returned.
+
+
+ equal +
+
+ +
This checks to see if two Auth_OpenID_Association instances represent the same association.
+
+
+ extensionResponse +
+
+ +
Extract signed extension data from the server's response.
+
+
+ extractSecret +
+
+ +
+
+ extractSecret +
+
+ +
+
+ +
+
f
+ +
+
+
+
+ FileStore.php +
+
+
FileStore.php in FileStore.php
+
+
+ fromQuery +
+
+ +
+
+ fromQuery +
+
+ +
+
+ +
+
g
+ +
+
+
+
+ getAll +
+
+ +
Run an SQL query with the specified parameters, if any.
+
+
+ getAssociation +
+
+ +
Retrieve an association. If no handle is specified, return the association with the most recent issue time.
+
+
+ getAssociation +
+
+ +
This implementation always returns null.
+
+
+ getAssociation +
+
+ +
Given an association handle, get the association from the store, or return a ServerError or null if something goes wrong.
+
+
+ getAssociation +
+
+ +
+
+ getAssociation +
+
+ +
This method returns an Association object from storage that matches the server URL and, if specified, handle. It returns null if no such association is found or if the matching association is expired.
+
+
+ getAssociationFilename +
+
+ +
Create a unique filename for a given server url and
+
+
+ getAuthKey +
+
+ +
Retrieve the auth key from the file specified by $this->auth_key_name, creating it if it does not exist.
+
+
+ getAuthKey +
+
+ +
This method returns a key used to sign the tokens, to ensure that they haven't been tampered with in transit. It should return the same key every time it is called. The key returned should be AUTH_KEY_LEN bytes long.
+
+
+ getAuthKey +
+
+ +
+
+ getAuthKey +
+
+ +
This method returns the auth key generated by the constructor.
+
+
+ getExpiresIn +
+
+ +
This returns the number of seconds this association is still valid for, or 0 if the association is no longer valid.
+
+
+ getOne +
+
+ +
Run an SQL query and return the first column of the first row of the result set, if any.
+
+
+ getRequest +
+
+ +
+
+ getRequest +
+
+ +
+
+ getReturnTo +
+
+ +
Get the openid.return_to argument from this response.
+
+
+ getRow +
+
+ +
Run an SQL query and return the first row of the result set, if any.
+
+
+ +
+
h
+ +
+
+
+
+ handleRequest +
+
+ +
Handle a request. Given an Auth_OpenID_Request object, call the appropriate Auth_OpenID_Server method to process the request and generate a response.
+
+
+ hasReturnTo +
+
+ +
Returns the return_to URL for the request which caused this error.
+
+
+ +
+
i
+ +
+
+
+
+ Interface.php +
+
+
Interface.php in Interface.php
+
+
+ invalidate +
+
+ +
Invalidate a given association handle.
+
+
+ isDumb +
+
+ +
This method must return true if the store is a dumb-mode-style store. Unlike all other methods in this class, this one provides a default implementation, which returns false.
+
+
+ isDumb +
+
+ +
This store is a dumb mode store, so this method is overridden to return true.
+
+
+ isError +
+
+ +
Returns true if $value constitutes a database error; returns false otherwise.
+
+
+ +
+
m
+ +
+
+
+
+ MySQLStore.php +
+
+
MySQLStore.php in MySQLStore.php
+
+
+ +
+
n
+ +
+
+
+
+ $normal_key +
+
+ +
+
+ +
+
o
+ +
+
+
+
+ OpenID.php +
+
+
OpenID.php in OpenID.php
+
+
+ +
+
p
+ +
+
+
+
+ PostgreSQLStore.php +
+
+
PostgreSQLStore.php in PostgreSQLStore.php
+
+
+ +
+
q
+ +
+
+
+
+ query +
+
+
Auth_OpenID_DatabaseConnection::query() in DatabaseConnection.php
+
Run an SQL query with the specified parameters, if any.
+
+
+ +
+
r
+ +
+
+
+
+ $responseFactory +
+
+ +
+
+ readAuthKey +
+
+ +
Read the auth key from the auth key file. Will return None if there is currently no key.
+
+
+ redirectURL +
+
+ +
Compute the appropriate redirection URL for this request based on a specified trust root and return-to.
+
+
+ removeAssociation +
+
+ +
This implementation always returns false.
+
+
+ removeAssociation +
+
+ +
Remove an association if it exists. Do nothing if it does not.
+
+
+ removeAssociation +
+
+ +
+
+ removeAssociation +
+
+ +
This method removes the matching association if it's found, and returns whether the association was removed or not.
+
+
+ reset +
+
+ +
Resets the store by removing all records from the store's tables.
+
+
+ reset +
+
+ +
Removes all entries from the store; implementation is optional.
+
+
+ resultToBool +
+
+ +
Converts a query result to a boolean. If the result is a database error according to $this->isError(), this returns false; otherwise, this returns true.
+
+
+ rollback +
+
+ +
Performs a rollback on this connection, if supported.
+
+
+ +
+
s
+ +
+
+
+
+ $SECRET_LIFETIME +
+
+ +
+
+ $session_type +
+
+ +
+
+ $session_type +
+
+ +
An object that knows how to handle association requests with the Diffie-Hellman session type.
+
+
+ $session_type +
+
+ +
+
+ $session_type +
+
+ +
An object that knows how to handle association requests with no session type.
+
+
+ $status +
+
+ +
+
+ $status +
+
+ +
+
+ $status +
+
+ +
+
+ $status +
+
+ +
+
+ $status +
+
+ +
+
+ Server.php +
+
+
Server.php in Server.php
+
+
+ ServerRequest.php +
+
+
ServerRequest.php in ServerRequest.php
+
+
+ SQLiteStore.php +
+
+
SQLiteStore.php in SQLiteStore.php
+
+
+ SQLStore.php +
+
+
SQLStore.php in SQLStore.php
+
+
+ serialize +
+
+ +
Convert an association to KV form.
+
+
+ setSQL +
+
+ +
This method should be overridden by subclasses. This method is called by the constructor to set values in $this->sql, which is an array keyed on sql name.
+
+
+ setSQL +
+
+ +
+
+ sign +
+
+ +
Given a response, sign the fields in the response's 'signed' list, and insert the signature into the response.
+
+
+ storeAssociation +
+
+ +
+
+ storeAssociation +
+
+ +
This method puts an Association object into storage, retrievable by server URL and handle.
+
+
+ storeAssociation +
+
+ +
This implementation does nothing.
+
+
+ storeAssociation +
+
+ +
Store an association in the association directory.
+
+
+ storeNonce +
+
+ +
Mark this nonce as present.
+
+
+ storeNonce +
+
+ +
This implementation does nothing.
+
+
+ storeNonce +
+
+ +
Stores a nonce. This is used by the consumer to prevent replay attacks.
+
+
+ +
+
t
+ +
+
+
+
+ tableExists +
+
+ +
+
+ toString +
+
+ +
+
+ toString +
+
+ +
Returns this error message.
+
+
+ toString +
+
+ +
+
+ +
+
u
+ +
+
+
+
+ useNonce +
+
+ +
+
+ useNonce +
+
+ +
This method is called when the library is attempting to use a nonce. If the nonce is in the store, this method removes it and returns a value which evaluates as true. Otherwise it returns a value which evaluates as false.
+
+
+ useNonce +
+
+ +
Return whether this nonce is present. As a side effect, mark it as no longer present.
+
+
+ useNonce +
+
+ +
In a system truly limited to dumb mode, nonces must all be accepted. This therefore always returns true, which makes replay attacks feasible.
+
+
+ +
+
v
+ +
+
+
+
+ verify +
+
+ +
Verify, using a given association handle, a signature with signed key-value pairs from an HTTP request.
+
+
+ +
+
w
+ +
+
+
+
+ whichEncoding +
+
+ +
Returns one of $_Auth_OpenID_Encode_Url, $_Auth_OpenID_Encode_Kvform, or null, depending on the type of encoding expected for this error's payload.
+
+
+ +
+ a + b + c + d + e + f + g + h + i + m + n + o + p + q + r + s + t + u + v + w +
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/elementindex_Yadis.html b/modules/member/php-openid-1.2.3/doc/elementindex_Yadis.html new file mode 100644 index 000000000..fe263a4cc --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/elementindex_Yadis.html @@ -0,0 +1,680 @@ + + + + + + + + + + + +

[Yadis] element index

+

Package indexes

+ +All elements +
+
+ a + c + d + e + f + g + i + m + n + p + r + s + t + x + y +
+ + +
+
a
+ +
+
+
+
+ attributes +
+
+ +
Return the attributes of a specified node.
+
+
+ attributes +
+
+ +
+
+ attributes +
+
+ +
+
+ Auth_OpenID_ServiceEndpointLoader +
+
+ +
A session helper class designed to translate between arrays and
+
+
+ +
+
c
+ +
+
+
+
+ check +
+
+ +
+
+ check +
+
+ +
+
+ check +
+
+ +
Override this.
+
+
+ cleanup +
+
+ +
Clean up Yadis-related services in the session and return the most-recently-attempted service from the manager, if one exists.
+
+
+ content +
+
+ +
Return the textual content of a specified node.
+
+
+ content +
+
+ +
+
+ content +
+
+ +
+
+ contents +
+
+ +
Return the contents of the session in array form.
+
+
+ curlPresent +
+
+ +
+
+ +
+
d
+ +
+
+
+
+ del +
+
+ +
Remove a key/value pair from the session.
+
+
+ discover +
+
+ +
This should be called statically and will build a Yadis instance if the discovery process succeeds. This implements Yadis discovery as specified in the Yadis specification.
+
+
+ +
+
e
+ +
+
+
+
+ evalXPath +
+
+ +
Evaluate an XPath expression and return the resulting node list. This should be overridden by subclasses.
+
+
+ evalXPath +
+
+ +
+
+ evalXPath +
+
+ +
+
+ +
+
f
+ +
+
+
+
+ fromSession +
+
+ +
Given a session data value (an array), this creates an object
+
+
+ +
+
g
+ +
+
+
+
+ get +
+
+ +
Get a key's value from the session.
+
+
+ getElements +
+
+ +
Used to get XML elements from this object's <Service> element.
+
+
+ getHTTPFetcher +
+
+ +
Returns an HTTP fetcher object. If the CURL extension is present, an instance of Services_Yadis_ParanoidHTTPFetcher is returned. If not, an instance of Services_Yadis_PlainHTTPFetcher is returned.
+
+
+ getNextService +
+
+ +
Return the next authentication service for the pair of user_input and session. This function handles fallback.
+
+
+ getPriority +
+
+ +
Returns the "priority" attribute value of this <Service> element, if the attribute is present. Returns null if not.
+
+
+ getTypes +
+
+ +
Return the URIs in the "Type" elements, if any, of this Service element.
+
+
+ getURIs +
+
+ +
Return the URIs in the "URI" elements, if any, of this Service element. The URIs are returned sorted in priority order.
+
+
+ +
+
i
+ +
+
+
+
+ init +
+
+ +
Initialize an instance of Services_Yadis_XMLParser with some XML and namespaces. This SHOULD NOT be overridden by subclasses.
+
+
+ +
+
m
+ +
+
+
+
+ Manager.php +
+
+
Manager.php in Manager.php
+
+
+ +
+
n
+ +
+
+
+
+ newObject +
+
+ +
+
+ newObject +
+
+ +
+
+ newObject +
+
+ +
Returns a new instance of this loader's class, using the session data to construct it if necessary. The object need only be created; $this->fromSession() will take care of setting the object's attributes.
+
+
+ nextService +
+
+ +
Return the next service
+
+
+ +
+
p
+ +
+
+
+
+ parseXRDS +
+
+ +
Parse an XML string (XRDS document) and return either a Services_Yadis_XRDS object or null, depending on whether the XRDS XML is valid.
+
+
+ prepareForLoad +
+
+ +
+
+ prepareForLoad +
+
+ +
Prepares the data array by making any necessary changes.
+
+
+ prepareForSave +
+
+ +
+
+ prepareForSave +
+
+ +
Override this.
+
+
+ +
+
r
+ +
+
+
+
+ registerNamespace +
+
+ +
+
+ registerNamespace +
+
+ +
+
+ registerNamespace +
+
+ +
Register a namespace with the XML parser. This should be overridden by subclasses.
+
+
+ requiredKeys +
+
+ +
+
+ requiredKeys +
+
+ +
+
+ +
+
s
+ +
+
+
+
+ services +
+
+ +
Returns the list of service objects as described by the XRDS document, if this yadis object represents a successful Yadis discovery.
+
+
+ services +
+
+ +
Returns a list of service objects which correspond to <Service> elements in the XRDS XML document for this object.
+
+
+ Services_Yadis_Discovery +
+
+ +
Initialize a discovery object.
+
+
+ Services_Yadis_Discovery +
+
+ +
State management for discovery.
+
+
+ Services_Yadis_dom +
+
+ +
This concrete implementation of Services_Yadis_XMLParser implements
+
+
+ Services_Yadis_dom +
+
+ +
+
+ Services_Yadis_domxml +
+
+ +
This concrete implementation of Services_Yadis_XMLParser implements
+
+
+ Services_Yadis_domxml +
+
+ +
+
+ Services_Yadis_getNSMap +
+
+ +
+
+ Services_Yadis_getSupportedExtensions +
+
+ +
+
+ Services_Yadis_getXMLParser +
+
+ +
Returns an instance of a Services_Yadis_XMLParser subclass based on the availability of PHP extensions for XML parsing. If Services_Yadis_setDefaultParser has been called, the parser used in that call will be returned instead.
+
+
+ Services_Yadis_Manager +
+
+
Services_Yadis_Manager in Manager.php
+
The Yadis service manager which stores state in a session and iterates over <Service> elements in a Yadis XRDS document and lets a caller attempt to use each one. This is used by the Yadis library internally.
+
+
+ Services_Yadis_ManagerLoader +
+
+ +
A session helper class designed to translate between arrays and
+
+
+ SERVICES_YADIS_MATCH_ALL +
+
+ +
This match mode means a given service must match ALL filters passed to the Services_Yadis_XRDS::services() call.
+
+
+ SERVICES_YADIS_MATCH_ANY +
+
+ +
This match mode means a given service must match ANY filters (at least one) passed to the Services_Yadis_XRDS::services() call.
+
+
+ SERVICES_YADIS_MAX_PRIORITY +
+
+ +
The priority value used for service elements with no priority specified.
+
+
+ Services_Yadis_PHPSession +
+
+ +
The base session class used by the Services_Yadis_Manager. This class wraps the default PHP session machinery and should be subclassed if your application doesn't use PHP sessioning.
+
+
+ Services_Yadis_Service +
+
+ +
Creates an empty service object.
+
+
+ Services_Yadis_Service +
+
+ +
This class represents a <Service> element in an XRDS document.
+
+
+ Services_Yadis_SessionLoader +
+
+ +
A session helper class designed to translate between arrays and
+
+
+ Services_Yadis_setDefaultParser +
+
+ +
Set a default parser to override the extension-driven selection of available parser classes. This is helpful in a test environment or one in which multiple parsers can be used but one is more desirable.
+
+
+ Services_Yadis_XMLParser +
+
+ +
The base class for wrappers for available PHP XML-parsing
+
+
+ Services_Yadis_XRDS +
+
+ +
Instantiate a Services_Yadis_XRDS object. Requires an XPath instance which has been used to parse a valid XRDS document.
+
+
+ Services_Yadis_XRDS +
+
+ +
This class performs parsing of XRDS documents.
+
+
+ Services_Yadis_Yadis +
+
+ +
Instantiates an empty Services_Yadis_Yadis object. This constructor should not be used by any user of the library.
+
+
+ Services_Yadis_Yadis +
+
+ +
This is the core of the PHP Yadis library. This is the only class a user needs to use to perform Yadis discovery. This class performs the discovery AND stores the result of the discovery.
+
+
+ set +
+
+ +
Set a session key/value pair.
+
+
+ setXML +
+
+ +
+
+ setXML +
+
+ +
+
+ setXML +
+
+ +
Set this parser object's XML payload. This should be overridden by subclasses.
+
+
+ +
+
t
+ +
+
+
+
+ toSession +
+
+ +
Returns an array of keys and values built from the attributes of $obj. If $this->prepareForSave($obj) returns an array, its keys and values are used to update the $data array of attributes from $obj.
+
+
+ +
+
x
+ +
+
+
+
+ XML.php +
+
+
XML.php in XML.php
+
+
+ XRDS.php +
+
+
XRDS.php in XRDS.php
+
+
+ +
+
y
+ +
+
+
+
+ Yadis.php +
+
+
Yadis.php in Yadis.php
+
+
+ +
+ a + c + d + e + f + g + i + m + n + p + r + s + t + x + y +
+ \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/errors.html b/modules/member/php-openid-1.2.3/doc/errors.html new file mode 100644 index 000000000..a6162df2a --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/errors.html @@ -0,0 +1,35 @@ + + + + + + phpDocumentor Parser Errors and Warnings + + + + + Post-parsing
+Manager.php
+Server.php
+ +

Consumer.php

+

Warnings:


+Warning on line 402 - no @package tag was used in a DocBlock for class Auth_OpenID_DiffieHellmanConsumerSession
+Warning on line 451 - no @package tag was used in a DocBlock for class Auth_OpenID_PlainTextConsumerSession
+Warning on line 874 - method "Auth_OpenID_GenericConsumer::_createAssociateRequest()" is assumed to be @access private because its name starts with _, but has no @access tag
+ +

Manager.php

+

Warnings:


+Warning on line 73 - no @package tag was used in a DocBlock for class Services_Yadis_SessionLoader
+Warning on line 176 - no @package tag was used in a DocBlock for class Auth_OpenID_ServiceEndpointLoader
+Warning on line 198 - no @package tag was used in a DocBlock for class Services_Yadis_ManagerLoader
+ +

Server.php

+

Warnings:


+Warning on line 372 - no @package tag was used in a DocBlock for class Auth_OpenID_PlainTextServerSession
+Warning on line 390 - no @package tag was used in a DocBlock for class Auth_OpenID_DiffieHellmanServerSession
+

+ Documentation generated on Mon, 10 Sep 2007 13:29:31 -0700 by phpDocumentor 1.3.2 +

+ + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/index.html b/modules/member/php-openid-1.2.3/doc/index.html new file mode 100644 index 000000000..8361d1f57 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/index.html @@ -0,0 +1,24 @@ + + + + + + JanRain OpenID Library + + + + + + + + + + + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + + + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/li_OpenID.html b/modules/member/php-openid-1.2.3/doc/li_OpenID.html new file mode 100644 index 000000000..4ac40e0a0 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/li_OpenID.html @@ -0,0 +1,90 @@ + + + + + + + + + + +
OpenID
+ +

phpDocumentor v 1.3.2

+ + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/li_Yadis.html b/modules/member/php-openid-1.2.3/doc/li_Yadis.html new file mode 100644 index 000000000..6005e06d8 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/li_Yadis.html @@ -0,0 +1,53 @@ + + + + + + + + + + +
Yadis
+ +

phpDocumentor v 1.3.2

+ + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/doc/media/banner.css b/modules/member/php-openid-1.2.3/doc/media/banner.css new file mode 100644 index 000000000..cd725a1d3 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/media/banner.css @@ -0,0 +1,32 @@ +body +{ + background-color: #DDDDDD; + margin: 0px; + padding: 0px; +} + +/* Banner (top bar) classes */ + +.banner { } + +.banner-menu +{ + clear: both; + padding: .5em; + border-top: 2px solid #999999; +} + +.banner-title +{ + text-align: right; + font-size: 20pt; + font-weight: bold; + margin: .2em; +} + +.package-selector +{ + background-color: #CCCCCC; + border: 1px solid black; + color: blue; +} diff --git a/modules/member/php-openid-1.2.3/doc/media/stylesheet.css b/modules/member/php-openid-1.2.3/doc/media/stylesheet.css new file mode 100644 index 000000000..eb73d4514 --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/media/stylesheet.css @@ -0,0 +1,142 @@ +a { color: #0000FF; text-decoration: none; } +a:hover { color: #FF0000; text-decoration: underline; } +a:active { color: #FF0000; text-decoration: underline; } + +body { background-color: #EEEEEE; font-family: Verdana, Arial, sans-serif } +body, table { font-size: 10pt } +a img { border: 0px; } +dd { margin-left: 0px; padding-left: 1em; } + +/* Page layout/boxes */ + +.info-box {} +.info-box-title { margin: 1em 0em 0em 0em; padding: .25em; font-weight: normal; font-size: 14pt; border: 2px solid #999999; background-color: #DDDDDD } +.info-box-body { border: 1px solid #999999; padding: .5em; background-color: #F8F8F8; } +.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } + +.oddrow { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; margin-bottom: 1em} +.evenrow { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; margin-bottom: 1em} + +.page-body { max-width: 800px; margin: auto; } +.tree dl { margin: 0px } + +/* Index formatting classes */ + +.index-item-body { margin-top: .5em; margin-bottom: .5em} +.index-item-description { margin-top: .25em } +.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } +.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} +.index-letter-title { font-size: 12pt; font-weight: bold } +.index-letter-menu { text-align: center; margin: 1em } +.index-letter { font-size: 12pt } + +/* Docbook classes */ + +.description {} +.short-description { font-weight: bold; color: #666666; } +.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } +.parameters { padding-left: 0em; margin-left: 3em; font-style: italic; list-style-type: square; } +.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } +.package { } +.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } +.package-details { font-size: 85%; } +.sub-package { font-weight: bold; font-size: 120% } +.tutorial { border-width: thin; border-color: #0066ff } +.tutorial-nav-box { width: 100%; border: 2px solid #999999; background-color: #DDDDDD } +.nav-button-disabled { color: #999999; } +.nav-button:active, +.nav-button:focus, +.nav-button:hover { background-color: #AAAAAA; outline: 1px solid #666666; text-decoration: none } +.folder-title { font-style: italic } + +/* Generic formatting */ + +.field { font-weight: bold; } +.detail { font-size: 8pt; } +.notes { font-style: italic; font-size: 8pt; } +.separator { background-color: #999999; height: 2px; } +.warning { color: #FF6600; } +.disabled { font-style: italic; color: #999999; } + +/* Code elements */ + +.line-number { } + +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left} +.class-name { color: #000000; font-weight: bold; } + +.method-summary { padding-left: 1em; font-size: 8pt } +.method-header { } +.method-definition { margin-bottom: .3em } +.method-title { font-weight: bold; } +.method-name { font-weight: bold; } +.method-signature { font-size: 85%; color: #0066BB; margin: .5em 0em } +.method-result { font-style: italic; } + +.var-summary { padding-left: 1em; font-size: 8pt; } +.var-header { } +.var-title { margin-bottom: .3em } +.var-type { color: red; font-weight: bold } +.var-name { font-weight: bold; } +.var-default {} +.var-description { font-weight: normal; color: #000000; } + +.include-title { } +.include-type { font-style: italic; } +.include-name { font-weight: bold; } + +.const-title { } +.const-name { font-weight: bold; } + +/* Syntax highlighting */ + +.src-code { border: 1px solid #336699; padding: 1em; background-color: #EEEEEE; + font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.src-comm { color: #666666; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; } +.listing { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; white-space: nowrap; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; border-bottom: 1px solid #888888; color: #888888; } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + diff --git a/modules/member/php-openid-1.2.3/doc/packages.html b/modules/member/php-openid-1.2.3/doc/packages.html new file mode 100644 index 000000000..3251b11eb --- /dev/null +++ b/modules/member/php-openid-1.2.3/doc/packages.html @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/README b/modules/member/php-openid-1.2.3/examples/README new file mode 100644 index 000000000..b6cbb67be --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/README @@ -0,0 +1,122 @@ +OpenID Example Code +------------------- + +After you've installed this package (see ../README), you can use these +example packages to get started. They'll show you what this package +can do, and you can use them as the basis for your own OpenID support. + +consumer/: OpenID Example Consumer +================================== + +NOTE: If you want to try the example consumer without installing this +package, just make sure you add the package's 'Auth' directory to your +PHP include path. + +To try the example consumer implementation, just copy the consumer/ +directory into a place on your web server and point your browser at +the new directory. + +1. Check to be sure that /tmp is in your "open_basedir" configuration, + if open_basedir is being used to restrict PHP's file I/O. See + http://us2.php.net/features.safe-mode for more information. For + example, in your php.ini, change + + open_basedir = "..." + + to + + open_basedir = "/tmp:..." + + (If you really don't want to add /tmp to your open_basedir, you can + modify consumer/common.php and change $store_path so it doesn't + create the store directory in /tmp.) + +2. Copy or symlink the consumer/ directory into a part of your + webserver's docroot. For example, if your DocumentRoot is + /var/www/, do this: + + # cd /var/www + # ln -s /path/to/PHP-OpenID-X.Y.Z/examples/consumer + +3. Navigate to http://www.example.com/consumer and enter an OpenID + into the form presented there and click "Verify". + +consumer/ Files +=============== + +The 'index.php' file will render a form and get you started. These +are the example consumer files: + + consumer/index.php - Renders a form so you can begin the OpenID auth +process. The form submits the OpenID to try_auth.php. + + consumer/try_auth.php - Starts the authentication with the OpenID +server that manages your OpenID and redirects your browser to the +server's login page. Instructs the server to return to +finish_auth.php when you're done authenticating. + + consumer/finish_auth.php - Finishes the authentication by checking +the server's response. Tells you if the authentication was +successful. + + consumer/common.php - Includes the setup code you'll need to create +a Consumer object and participate in an OpenID authentication. + +server/: OpenID Example Server +============================== + +To try the example server, follow these steps: + +1. Customize server/config.php based on what your PHP installation + supports. The documentation in the file describes what each value + is for. + +2. Copy or symlink the server/ directory into a part of your + webserver's docroot. For example, if your DocumentRoot is + /var/www/, do this: + + # cd /var/www + # ln -s /path/to/PHP-OpenID-X.Y.Z/examples/server + +3. For each of the identity URLs you added to the $openid_users array + in config.php, add the following to the tag of the pages at + those URLs: + + + + Where "www.example.com/server" is the path to the server symlink + that you created in step (2). + +4. Navigate to http://www.example.com/server and click the "Log In" + link to test the OpenID(s) entered into the config file. + +5. Use the OpenID checkup tool to try authenticating with your OpenID: + + http://www.openidenabled.com/resources/openid-test/checkup + + If your OpenID server isn't on the public internet, you can use the + example consumer packaged with this library. See the consumer + section above. + +server/ Files +============= + +These files make up the server example code: + + config.php - The configuration file you'll need to customize to run +the example server. + + server.php - The PHP rendering script that takes care of handling +server requests from both regular user agents and consumers. + + lib/actions.php - Handles the various types of requests that the +server supports. + + lib/common.php - Supplies functions that wrap the OpenID API calls +to make them easier to use. + + lib/render.php - Miscellaneous page rendering code. + + lib/session.php - Code to handle session data for user settings. + + lib/render/*.php - Files for each page presented by the server. diff --git a/modules/member/php-openid-1.2.3/examples/consumer/common.php b/modules/member/php-openid-1.2.3/examples/consumer/common.php new file mode 100644 index 000000000..cecf8d757 --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/consumer/common.php @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/consumer/finish_auth.php b/modules/member/php-openid-1.2.3/examples/consumer/finish_auth.php new file mode 100644 index 000000000..bee574361 --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/consumer/finish_auth.php @@ -0,0 +1,38 @@ +complete($_GET); + +if ($response->status == Auth_OpenID_CANCEL) { + // This means the authentication was cancelled. + $msg = 'Verification cancelled.'; +} else if ($response->status == Auth_OpenID_FAILURE) { + $msg = "OpenID authentication failed: " . $response->message; +} else if ($response->status == Auth_OpenID_SUCCESS) { + // This means the authentication succeeded. + $openid = $response->identity_url; + $esc_identity = htmlspecialchars($openid, ENT_QUOTES); + $success = sprintf('You have successfully verified ' . + '%s as your identity.', + $esc_identity, $esc_identity); + + if ($response->endpoint->canonicalID) { + $success .= ' (XRI CanonicalID: '.$response->endpoint->canonicalID.') '; + } + + $sreg = $response->extensionResponse('sreg'); + + if (@$sreg['email']) { + $success .= " You also returned '".$sreg['email']."' as your email."; + } + if (@$sreg['postcode']) { + $success .= " Your postal code is '".$sreg['postcode']."'"; + } +} + +include 'index.php'; + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/consumer/index.php b/modules/member/php-openid-1.2.3/examples/consumer/index.php new file mode 100644 index 000000000..4096dedeb --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/consumer/index.php @@ -0,0 +1,59 @@ + + PHP OpenID Authentication Example + + +

PHP OpenID Authentication Example

+

+ This example consumer uses the PHP + OpenID library. It just verifies that the URL that you enter + is your identity URL. +

+ + $msg"; } ?> + $error"; } ?> + $success"; } ?> + +
+
+ Identity URL: + + + +
+
+ + diff --git a/modules/member/php-openid-1.2.3/examples/consumer/try_auth.php b/modules/member/php-openid-1.2.3/examples/consumer/try_auth.php new file mode 100644 index 000000000..464dd1f09 --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/consumer/try_auth.php @@ -0,0 +1,48 @@ +begin($openid); + +// Handle failure status return values. +if (!$auth_request) { + $error = "Authentication error."; + include 'index.php'; + exit(0); +} + +$auth_request->addExtensionArg('sreg', 'optional', 'email'); + +// Redirect the user to the OpenID server for authentication. Store +// the token for this authentication so we can verify the response. + +$redirect_url = $auth_request->redirectURL($trust_root, + $process_url); + +header("Location: ".$redirect_url); + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/detect.php b/modules/member/php-openid-1.2.3/examples/detect.php new file mode 100644 index 000000000..29593f2ee --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/detect.php @@ -0,0 +1,496 @@ +'; + } else { + return $href; + } + } + + function b($text) + { + return '*' . $text . '*'; + } + + function contentType() + { + return 'text/plain'; + } + + function p($text) + { + return wordwrap($text) . "\n\n"; + } + + function pre($text) + { + $out = ''; + $lines = array_map('trim', explode("\n", $text)); + foreach ($lines as $line) { + $out .= ' ' . $line . "\n"; + } + $out .= "\n"; + return $out; + } + + function ol($items) + { + $out = ''; + $c = 1; + foreach ($items as $item) { + $item = wordwrap($item, 72); + $lines = array_map('trim', explode("\n", $item)); + $out .= $c . '. ' . $lines[0] . "\n"; + unset($lines[0]); + foreach ($lines as $line) { + $out .= ' ' . $line . "\n"; + } + $out .= "\n"; + $c += 1; + } + return $out; + } + + function h2($text) + { + return $this->h($text, 2); + } + + function h1($text) + { + return $this->h($text, 1); + } + + function h($text, $n) + { + $chars = '#=+-.'; + $c = $chars[$n - 1]; + return "\n" . $text . "\n" . str_repeat($c, strlen($text)) . "\n\n"; + } + + function end() + { + return ''; + } +} + +class HTML { + function start($title) + { + return '' . $title . '' . "\n"; + } + + function tt($text) + { + return '' . $text . ''; + } + + function contentType() + { + return 'text/html'; + } + + function b($text) + { + return '' . $text . ''; + } + + function p($text) + { + return '

' . wordwrap($text) . "

\n"; + } + + function pre($text) + { + return '
' . $text . "
\n"; + } + + function ol($items) + { + $out = '
    '; + foreach ($items as $item) { + $out .= '
  1. ' . wordwrap($item) . "
  2. \n"; + } + $out .= "
\n"; + return $out; + } + + function h($text, $n) + { + return "$text\n"; + } + + function h2($text) + { + return $this->h($text, 2); + } + + function h1($text) + { + return $this->h($text, 1); + } + + function link($href, $text=null) + { + return '' . ($text ? $text : $href) . ''; + } + + function end() + { + return "\n\n"; + } +} + +if (isset($_SERVER['REQUEST_METHOD'])) { + $r = new HTML(); +} else { + $r = new PlainText(); +} + +function detect_math($r, &$out) +{ + global $_Auth_OpenID_math_extensions; + $out .= $r->h2('Math support'); + $ext = Auth_OpenID_detectMathLibrary($_Auth_OpenID_math_extensions); + if (!isset($ext['extension']) || !isset($ext['class'])) { + $out .= $r->p( + 'Your PHP installation does not include big integer math ' . + 'support. This support is required if you wish to run a ' . + 'secure OpenID server without using SSL.'); + $out .= $r->p('To use this library, you have a few options:'); + + $gmp_lnk = $r->link('http://www.php.net/manual/en/ref.gmp.php', 'GMP'); + $bc_lnk = $r->link('http://www.php.net/manual/en/ref.bc.php', 'bcmath'); + $out .= $r->ol(array( + 'Install the ' . $gmp_lnk . ' PHP extension', + 'Install the ' . $bc_lnk . ' PHP extension', + 'If your site is low-security, define ' . + 'Auth_OpenID_NO_MATH_SUPPORT. The library will function, but ' . + 'the security of your OpenID server will depend on the ' . + 'security of the network links involved. If you are only ' . + 'using consumer support, you should still be able to operate ' . + 'securely when the users are communicating with a ' . + 'well-implemented server.')); + return false; + } else { + switch ($ext['extension']) { + case 'bcmath': + $out .= $r->p('Your PHP installation has bcmath support. This is ' . + 'adequate for small-scale use, but can be CPU-intensive. ' . + 'You may want to look into installing the GMP extension.'); + $lnk = $r->link('http://www.php.net/manual/en/ref.gmp.php'); + $out .= $r->p('See ' . $lnk .' for more information ' . + 'about the GMP extension.'); + break; + case 'gmp': + $out .= $r->p('Your PHP installation has gmp support. Good.'); + break; + default: + $class = $ext['class']; + $lib = new $class(); + $one = $lib->init(1); + $two = $lib->add($one, $one); + $t = $lib->toString($two); + $out .= $r->p('Uh-oh. I do not know about the ' . + $ext['extension'] . ' extension!'); + if ($t != '2') { + $out .= $r->p('It looks like it is broken. 1 + 1 = ' . + var_export($t, false)); + return false; + } else { + $out .= $r->p('But it seems to be able to add one and one.'); + } + } + return true; // Math library is OK + } +} + +function detect_random($r, &$out) +{ + $out .= $r->h2('Cryptographic-quality randomness source'); + if (Auth_OpenID_RAND_SOURCE === null) { + $out .= $r->p('Using (insecure) pseudorandom number source, because ' . + 'Auth_OpenID_RAND_SOURCE has been defined as null.'); + return false; + } + + $msg = 'The library will try to access ' . Auth_OpenID_RAND_SOURCE + . ' as a source of random data. '; + + $numbytes = 6; + + $f = @fopen(Auth_OpenID_RAND_SOURCE, 'r'); + if ($f !== false) { + $data = fread($f, $numbytes); + $stat = fstat($f); + $size = $stat['size']; + fclose($f); + } else { + $data = null; + $size = true; + } + + if ($f !== false) { + $dataok = (strlen($data) == $numbytes); + $ok = $dataok && !$size; + $msg .= 'It seems to exist '; + if ($dataok) { + $msg .= 'and be readable. Here is some hex data: ' . + bin2hex($data) . '.'; + } else { + $msg .= 'but reading data failed.'; + } + if ($size) { + $msg .= ' This is a ' . $size . ' byte file. Unless you know ' . + 'what you are doing, it is likely that you are making a ' . + 'mistake by using a regular file as a randomness source.'; + } + } else { + $msg .= Auth_OpenID_RAND_SOURCE . + ' could not be opened. This could be because of restrictions on' . + ' your PHP environment or that randomness source may not exist' . + ' on this platform.'; + if (IS_WINDOWS) { + $msg .= ' You seem to be running Windows. This library does not' . + ' have access to a good source of randomness on Windows.'; + } + $ok = false; + } + + $out .= $r->p($msg); + + if (!$ok) { + $out .= $r->p( + 'To set a source of randomness, define Auth_OpenID_RAND_SOURCE ' . + 'to the path to the randomness source. If your platform does ' . + 'not provide a secure randomness source, the library can' . + 'operate in pseudorandom mode, but it is then vulnerable to ' . + 'theoretical attacks. If you wish to operate in pseudorandom ' . + 'mode, define Auth_OpenID_RAND_SOURCE to null.'); + $out .= $r->p('You are running on:'); + $out .= $r->pre(php_uname()); + $out .= $r->p('There does not seem to be an available source ' . + 'of randomness. On a Unix-like platform ' . + '(including MacOS X), try /dev/random and ' . + '/dev/urandom.'); + } + return $ok; +} + +function detect_stores($r, &$out) +{ + $out .= $r->h2('Data storage'); + + $found = array(); + foreach (array('sqlite', 'mysql', 'pgsql') as $dbext) { + if (extension_loaded($dbext) || @dl($dbext . '.' . PHP_SHLIB_SUFFIX)) { + $found[] = $dbext; + } + } + if (count($found) == 0) { + $text = 'No SQL database support was found in this PHP ' . + 'installation. See the PHP manual if you need to ' . + 'use an SQL database.'; + } else { + $text = 'Support was found for '; + if (count($found) == 1) { + $text .= $found[0] . '.'; + } else { + $last = array_pop($found); + $text .= implode(', ', $found) . ' and ' . $last . '.'; + } + $text = $r->b($text); + } + $text .= ' The library supports the MySQL, PostgreSQL, and SQLite ' . + 'database engines, as well as filesystem-based storage.'; + $out .= $r->p($text); + + if (function_exists('posix_getpwuid') && + function_exists('posix_geteuid')) { + $processUser = posix_getpwuid(posix_geteuid()); + $web_user = $r->b($r->tt($processUser['name'])); + } else { + $web_user = 'the PHP process'; + } + + if (in_array('sqlite', $found)) { + $out .= $r->p('If you are using SQLite, your database must be ' . + 'writable by ' . $web_user . ' and not available over' . + ' the web.'); + } + + $basedir_str = ini_get('open_basedir'); + if (gettype($basedir_str) == 'string') { + $url = 'http://www.php.net/manual/en/features.safe-mode.php' . + '#ini.open-basedir'; + $lnk = $r->link($url, 'open_basedir'); + $out .= $r->p('If you are using a filesystem-based store or SQLite, ' . + 'be aware that ' . $lnk . ' is in effect. This means ' . + 'that your data will have to be stored in one of the ' . + 'following locations:'); + $out .= $r->pre(var_export($basedir_str, true)); + } else { + $out .= $r->p('The ' . $r->b($r->tt('open_basedir')) . ' configuration restriction ' . + 'is not in effect.'); + } + + $out .= $r->p('If you are using the filesystem store, your ' . + 'data directory must be readable and writable by ' . + $web_user . ' and not availabe over the Web.'); + return true; +} + +function detect_xml($r, &$out) +{ + global $__Services_Yadis_xml_extensions; + + $out .= $r->h2('XML Support'); + + // Try to get an XML extension. + $ext = Services_Yadis_getXMLParser(); + + if ($ext !== null) { + $out .= $r->p('XML parsing support is present using the '. + $r->b(get_class($ext)).' interface.'); + return true; + } else { + $out .= $r->p('XML parsing support is absent; please install one '. + 'of the following PHP extensions:'); + foreach ($__Services_Yadis_xml_extensions as $name => $cls) { + $out .= "
  • " . $r->b($name) . "
  • "; + } + return false; + } +} + +function detect_fetcher($r, &$out) +{ + $out .= $r->h2('HTTP Fetching'); + + $result = @include 'Services/Yadis/Yadis.php'; + + if (!$result) { + $out .= $r->p('Yadis code unavailable; could not test fetcher support.'); + return false; + } + + if (Services_Yadis_Yadis::curlPresent()) { + $out .= $r->p('This PHP installation has support for libcurl. Good.'); + } else { + $out .= $r->p('This PHP installation does not have support for ' . + 'libcurl. CURL is not required, but some functionality, ' . + 'such as fetching HTTPS URLs, will be missing and ' . + ' performance will not be as good.'); + $lnk = $r->link('http://us3.php.net/manual/en/ref.curl.php'); + $out .= $r->p('See ' . $lnk . ' about enabling the libcurl support ' . + 'for PHP.'); + } + + $ok = true; + $fetcher = Services_Yadis_Yadis::getHTTPFetcher(); + $fetch_url = 'http://www.openidenabled.com/resources/php-fetch-test'; + $expected_url = $fetch_url . '.txt'; + $result = $fetcher->get($fetch_url); + + if (isset($result)) { + $parts = array('An HTTP request was completed.'); + // list ($code, $url, $data) = $result; + if ($result->status != '200') { + $ok = false; + $parts[] = $r->b( + sprintf('Got %s instead of the expected HTTP status code ' . + '(200).', $result->status)); + } + + $url = $result->final_url; + if ($url != $expected_url) { + $ok = false; + if ($url == $fetch_url) { + $msg = 'The redirected URL was not returned.'; + } else { + $msg = 'An unexpected URL was returned: <' . $url . '>.'; + } + $parts[] = $r->b($msg); + } + + $data = $result->body; + if ($data != 'Hello World!') { + $ok = false; + $parts[] = $r->b('Unexpected data was returned.'); + } + $out .= $r->p(implode(' ', $parts)); + } else { + $ok = false; + $out .= $r->p('Fetching URL ' . $lnk . ' failed!'); + } + return $ok; +} + +header('Content-Type: ' . $r->contentType() . '; charset=us-ascii'); + +$title = 'OpenID Library Support Report'; +$out = $r->start($title) . + $r->h1($title) . + $r->p('This script checks your PHP installation to determine if you ' . + 'are set up to use the JanRain PHP OpenID library.'); + +$body = ''; + +$_include = include 'Auth/OpenID.php'; + +if (!$_include) { + $path = ini_get('include_path'); + $body .= $r->p( + 'Cannot find the OpenID library. It must be in your PHP include ' . + 'path. Your PHP include path is currently:'); + $body .= $r->pre($path); +} else { + $status = array(); + + $status[] = detect_math($r, $body); + $status[] = detect_random($r, $body); + $status[] = detect_stores($r, $body); + $status[] = detect_fetcher($r, $body); + $status[] = detect_xml($r, $body); + + $result = true; + + foreach ($status as $v) { + if (!$v) { + $result = false; + break; + } + } + + if ($result) { + $out .= $r->h2('Setup Complete!'); + $out .= $r->p('Your system should be ready to run the OpenID library.'); + } else { + $out .= $r->h2('Setup Incomplete'); + $out .= $r->p('Your system needs a few changes before it will be ready to run the OpenID library.'); + } +} + +$out .= $body . $r->end(); +print $out; +?> diff --git a/modules/member/php-openid-1.2.3/examples/server/index.php b/modules/member/php-openid-1.2.3/examples/server/index.php new file mode 100644 index 000000000..7a9506458 --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/server/index.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/server/lib/actions.php b/modules/member/php-openid-1.2.3/examples/server/lib/actions.php new file mode 100644 index 000000000..5e255e2d8 --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/server/lib/actions.php @@ -0,0 +1,169 @@ +decodeRequest($request); + + if (!$request) { + return about_render(); + } + + setRequestInfo($request); + + if (in_array($request->mode, + array('checkid_immediate', 'checkid_setup'))) { + + if (isTrusted($request->identity, $request->trust_root)) { + $response =& $request->answer(true); + $sreg = getSreg($request->identity); + if (is_array($sreg)) { + foreach ($sreg as $k => $v) { + $response->addField('sreg', $k, + $v); + } + } + } else if ($request->immediate) { + $response =& $request->answer(false, getServerURL()); + } else { + if (!getLoggedInUser()) { + return login_render(); + } + return trust_render($request); + } + } else { + $response =& $server->handleRequest($request); + } + + $webresponse =& $server->encodeResponse($response); + + foreach ($webresponse->headers as $k => $v) { + header("$k: $v"); + } + + header(header_connection_close); + print $webresponse->body; + exit(0); +} + +/** + * Log out the currently logged in user + */ +function action_logout() +{ + setLoggedInUser(null); + setRequestInfo(null); + return authCancel(null); +} + +/** + * Check the input values for a login request + */ +function login_checkInput($input) +{ + $openid_url = false; + $errors = array(); + + if (!isset($input['openid_url'])) { + $errors[] = 'Enter an OpenID URL to continue'; + } + if (!isset($input['password'])) { + $errors[] = 'Enter a password to continue'; + } + if (count($errors) == 0) { + $openid_url = $input['openid_url']; + $openid_url = Auth_OpenID::normalizeUrl($openid_url); + $password = $input['password']; + if (!checkLogin($openid_url, $password)) { + $errors[] = 'The entered password does not match the ' . + 'entered identity URL.'; + } + } + return array($errors, $openid_url); +} + +/** + * Log in a user and potentially continue the requested identity approval + */ +function action_login() +{ + $method = $_SERVER['REQUEST_METHOD']; + switch ($method) { + case 'GET': + return login_render(); + case 'POST': + $info = getRequestInfo(); + $fields = $_POST; + if (isset($fields['cancel'])) { + return authCancel($info); + } + + list ($errors, $openid_url) = login_checkInput($fields); + if (count($errors) || !$openid_url) { + $needed = $info ? $info->identity : false; + return login_render($errors, @$fields['openid_url'], $needed); + } else { + setLoggedInUser($openid_url); + return doAuth($info); + } + default: + return login_render(array('Unsupported HTTP method: $method')); + } +} + +/** + * Ask the user whether he wants to trust this site + */ +function action_trust() +{ + $info = getRequestInfo(); + $trusted = isset($_POST['trust']); + if ($info && isset($_POST['remember'])) { + $sites = getSessionSites(); + $sites[$info->trust_root] = $trusted; + setSessionSites($sites); + } + return doAuth($info, $trusted, true); +} + +function action_sites() +{ + $sites = getSessionSites(); + if ($_SERVER['REQUEST_METHOD'] == 'POST') { + if (isset($_POST['forget'])) { + $sites = null; + setSessionSites($sites); + } elseif (isset($_POST['remove'])) { + foreach ($_POST as $k => $v) { + if (preg_match('/^site[0-9]+$/', $k) && isset($sites[$v])) { + unset($sites[$v]); + } + } + setSessionSites($sites); + } + } + return sites_render($sites); +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/server/lib/common.php b/modules/member/php-openid-1.2.3/examples/server/lib/common.php new file mode 100644 index 000000000..4bc1dac77 --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/server/lib/common.php @@ -0,0 +1,63 @@ +getCancelURL(); + } else { + $url = getServerURL(); + } + return redirect_render($url); +} + +function doAuth($info, $trusted=null, $fail_cancels=false) +{ + if (!$info) { + // There is no authentication information, so bail + return authCancel(null); + } + + $req_url = $info->identity; + $user = getLoggedInUser(); + setRequestInfo($info); + + if ($req_url != $user) { + return login_render(array(), $req_url, $req_url); + } + + $sites = getSessionSites(); + $trust_root = $info->trust_root; + $fail_cancels = $fail_cancels || isset($sites[$trust_root]); + $trusted = isset($trusted) ? $trusted : isTrusted($req_url, $trust_root); + if ($trusted) { + setRequestInfo(); + $server =& getServer(); + $response =& $info->answer(true); + $webresponse =& $server->encodeResponse($response); + + $new_headers = array(); + + foreach ($webresponse->headers as $k => $v) { + $new_headers[] = $k.": ".$v; + } + + return array($new_headers, $webresponse->body); + } elseif ($fail_cancels) { + return authCancel($info); + } else { + return trust_render($info); + } +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/server/lib/render.php b/modules/member/php-openid-1.2.3/examples/server/lib/render.php new file mode 100644 index 000000000..f607f90aa --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/server/lib/render.php @@ -0,0 +1,112 @@ + + + %s +%s + + + %s +
    +

    %s

    + %s +
    + +'); + +define('logged_in_pat', 'You are logged in as %s.'); + +/** + * HTTP response line contstants + */ +define('http_bad_request', 'HTTP/1.1 400 Bad Request'); +define('http_found', 'HTTP/1.1 302 Found'); +define('http_ok', 'HTTP/1.1 200 OK'); +define('http_internal_error', 'HTTP/1.1 500 Internal Error'); + +/** + * HTTP header constants + */ +define('header_connection_close', 'Connection: close'); +define('header_content_text', 'Content-Type: text/plain; charset=us-ascii'); + +define('redirect_message', + 'Please wait; you are being redirected to <%s>'); + + +/** + * Return a string containing an anchor tag containing the given URL + * + * The URL does not need to be quoted, but if text is passed in, then + * it does. + */ +function link_render($url, $text=null) { + $esc_url = htmlspecialchars($url, ENT_QUOTES); + $text = ($text === null) ? $esc_url : $text; + return sprintf('%s', $esc_url, $text); +} + +/** + * Return an HTTP redirect response + */ +function redirect_render($redir_url) +{ + $headers = array(http_found, + header_content_text, + header_connection_close, + 'Location: ' . $redir_url, + ); + $body = sprintf(redirect_message, $redir_url); + return array($headers, $body); +} + +function navigation_render($msg, $items) +{ + $what = link_render(buildURL(), 'PHP OpenID Server'); + if ($msg) { + $what .= ' — ' . $msg; + } + if ($items) { + $s = '

    ' . $what . '

      '; + foreach ($items as $action => $text) { + $url = buildURL($action); + $s .= sprintf('
    • %s
    • ', link_render($url, $text)); + } + $s .= '
    '; + } else { + $s = '

    ' . $what . '

    '; + } + return sprintf('', $s); +} + +/** + * Render an HTML page + */ +function page_render($body, $user, $title, $h1=null, $login=false) +{ + $h1 = $h1 ? $h1 : $title; + + if ($user) { + $msg = sprintf(logged_in_pat, link_render($user)); + $nav = array('logout' => 'Log Out', + 'sites' => 'Remembered Sites', + ); + $navigation = navigation_render($msg, $nav); + } else { + if (!$login) { + $msg = link_render(buildURL('login'), 'Log In'); + $navigation = navigation_render($msg, array()); + } else { + $navigation = ''; + } + } + + $style = getStyle(); + $text = sprintf(page_template, $title, $style, $navigation, $h1, $body); + // No special headers here + $headers = array(); + return array($headers, $text); +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/server/lib/render/about.php b/modules/member/php-openid-1.2.3/examples/server/lib/render/about.php new file mode 100644 index 000000000..bd358369e --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/server/lib/render/about.php @@ -0,0 +1,58 @@ + +An error occurred when processing your request: +
    +%s +'); + +define('about_body', + '

    + This is an OpenID server + endpoint. This server is built on the JanRain PHP OpenID + library. Since OpenID consumer sites will need to directly contact this + server, it must be accessible over the Internet (not behind a firewall). +

    +

    + To use this server, you will have to set up a URL to use as an identifier. + Insert the following markup into the <head> of the HTML + document at that URL: +

    +
    <link rel="openid.server" href="%s" />
    +

    + Then configure this server so that you can log in with that URL. Once you + have configured the server, and marked up your identity URL, you can verify + that it is working by using the openidenabled.com + OpenID + Checkup tool: +

    + + +
    +

    +'); + +/** + * Render the about page, potentially with an error message + */ +function about_render($error=false, $internal=true) +{ + $headers = array(); + $body = sprintf(about_body, buildURL()); + if ($error) { + $headers[] = $internal ? http_internal_error : http_bad_request; + $body .= sprintf(about_error_template, htmlspecialchars($error)); + } + $current_user = getLoggedInUser(); + return page_render($body, $current_user, 'OpenID Server Endpoint'); +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/server/lib/render/login.php b/modules/member/php-openid-1.2.3/examples/server/lib/render/login.php new file mode 100644 index 000000000..9e8f37072 --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/server/lib/render/login.php @@ -0,0 +1,65 @@ + +

    + Enter your identity URL and password into this form to log in to + this server. This server must be configured to accept your identity URL. +

    + +
    + + + + + + + + + + + + +
    + + +
    +
    + +'); + +define('login_needed_pat', + 'You must be logged in as %s to approve this request.'); + +function login_render($errors=null, $input=null, $needed=null) +{ + $current_user = getLoggedInUser(); + if ($input === null) { + $input = $current_user; + } + if ($needed) { + $errors[] = sprintf(login_needed_pat, link_render($needed)); + } + + $esc_input = htmlspecialchars($input, ENT_QUOTES); + $login_url = buildURL('login', true); + $body = sprintf(login_form_pat, $login_url, $esc_input); + if ($errors) { + $body = loginError_render($errors) . $body; + } + return page_render($body, $current_user, 'Log In', null, true); +} + +function loginError_render($errors) +{ + $text = ''; + foreach ($errors as $error) { + $text .= sprintf("
  • %s
  • \n", $error); + } + return sprintf("
      \n%s
    \n", $text); +} +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/server/lib/render/sites.php b/modules/member/php-openid-1.2.3/examples/server/lib/render/sites.php new file mode 100644 index 000000000..90b557f97 --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/server/lib/render/sites.php @@ -0,0 +1,83 @@ +These decisions have been remembered for this session. All decisions +will be forgotten when the session ends.

    +
    +
    + + +%s + +
    + + + +
    +
    +'); + +define('sites_empty_message', + '

    + No sites are remembered for this session. When you authenticate with a site, + you can choose to add it to this list by choosing Remember this + decision. +

    +

    %s

    +'); + +define('sites_row', + ' + + +'); + +function siteListRow_render($i, $site) +{ + $esc_site = htmlspecialchars($site, ENT_QUOTES); + $id = sprintf('"site%s"', $i); + return sprintf(sites_row, $id, $esc_site, $id, $id, $esc_site); +} + +function siteList_render($sites) +{ + $trusted_sites = array(); + $untrusted_sites = array(); + foreach ($sites as $site => $trusted) { + if ($trusted) { + $trusted_sites[] = $site; + } else { + $untrusted_sites[] = $site; + } + } + $rows = ''; + $i = 0; + foreach (array('Trusted Sites' => $trusted_sites, + 'Untrusted Sites' => $untrusted_sites) as + $name => $sites) { + if ($sites) { + $rows .= ''. $name . ''; + foreach ($sites as $site) { + $rows .= siteListRow_render($i, $site); + $i += 1; + } + } + } + return $rows; +} + +function sites_render($sites) +{ + if ($sites) { + $rows = siteList_render($sites); + $form = sprintf(sites_form, buildURL('sites'), $rows); + $body = $pre . $form; + } else { + $body = sprintf(sites_empty_message, link_render(buildURL(''), 'Return home')); + } + return page_render($body, getLoggedInUser(), 'Remembered Sites'); +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/server/lib/render/trust.php b/modules/member/php-openid-1.2.3/examples/server/lib/render/trust.php new file mode 100644 index 000000000..60d01d05f --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/server/lib/render/trust.php @@ -0,0 +1,29 @@ + +

    Do you wish to confirm your identity URL (%s) with %s?

    +
    + +
    + + +
    + +'); + +function trust_render($info) +{ + $current_user = getLoggedInUser(); + $lnk = link_render($current_user); + $trust_root = htmlspecialchars($info->trust_root); + $trust_url = buildURL('trust', true); + $form = sprintf(trust_form_pat, $lnk, $trust_root, $trust_url); + return page_render($form, $current_user, 'Trust This Site'); +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/server/lib/session.php b/modules/member/php-openid-1.2.3/examples/server/lib/session.php new file mode 100644 index 000000000..e11fd64db --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/server/lib/session.php @@ -0,0 +1,205 @@ +', $url); +} + +/** + * Get the URL of the current script + */ +function getServerURL() +{ + $path = $_SERVER['SCRIPT_NAME']; + $host = $_SERVER['HTTP_HOST']; + $port = $_SERVER['SERVER_PORT']; + $s = $_SERVER['HTTPS'] ? 's' : ''; + if (($s && $port == "443") || (!$s && $port == "80")) { + $p = ''; + } else { + $p = ':' . $port; + } + + return "http$s://$host$p$path"; +} + +/** + * Build a URL to a server action + */ +function buildURL($action=null, $escaped=true) +{ + $url = getServerURL(); + if ($action) { + $url .= '/' . $action; + } + return $escaped ? htmlspecialchars($url, ENT_QUOTES) : $url; +} + +/** + * Extract the current action from the request + */ +function getAction() +{ + $path_info = @$_SERVER['PATH_INFO']; + $action = ($path_info) ? substr($path_info, 1) : ''; + $function_name = 'action_' . $action; + return $function_name; +} + +/** + * Write the response to the request + */ +function writeResponse($resp) +{ + list ($headers, $body) = $resp; + array_walk($headers, 'header'); + header(header_connection_close); + print $body; +} + +/** + * Instantiate a new OpenID server object + */ +function getServer() +{ + static $server = null; + if (!isset($server)) { + $server =& new Auth_OpenID_Server(getOpenIDStore()); + } + return $server; +} + +/** + * Return whether the trust root is currently trusted + */ +function isTrusted($identity_url, $trust_root) +{ + // from config.php + global $trusted_sites; + + if ($identity_url != getLoggedInUser()) { + return false; + } + + if (in_array($trust_root, $trusted_sites)) { + return true; + } + + $sites = getSessionSites(); + return isset($sites[$trust_root]) && $sites[$trust_root]; +} + +/** + * Return a hashed form of the user's password + */ +function hashPassword($password) +{ + return bin2hex(Auth_OpenID_SHA1($password)); +} + +/** + * Check the user's login information + */ +function checkLogin($openid_url, $password) +{ + // from config.php + global $openid_users; + $hash = hashPassword($password); + + return isset($openid_users[$openid_url]) + && $hash == $openid_users[$openid_url]; +} + +/** + * Get the openid_url out of the cookie + * + * @return mixed $openid_url The URL that was stored in the cookie or + * false if there is none present or if the cookie is bad. + */ +function getLoggedInUser() +{ + return isset($_SESSION['openid_url']) + ? $_SESSION['openid_url'] + : false; +} + +/** + * Set the openid_url in the cookie + * + * @param mixed $identity_url The URL to set. If set to null, the + * value will be unset. + */ +function setLoggedInUser($identity_url=null) +{ + if (!isset($identity_url)) { + unset($_SESSION['openid_url']); + } else { + $_SESSION['openid_url'] = $identity_url; + } +} + +function setSessionSites($sites=null) +{ + if (!isset($sites)) { + unset($_SESSION['session_sites']); + } else { + $_SESSION['session_sites'] = serialize($sites); + } +} + +function getSessionSites() +{ + return isset($_SESSION['session_sites']) + ? unserialize($_SESSION['session_sites']) + : false; +} + +function getRequestInfo() +{ + return isset($_SESSION['request']) + ? unserialize($_SESSION['request']) + : false; +} + +function setRequestInfo($info=null) +{ + if (!isset($info)) { + unset($_SESSION['request']); + } else { + $_SESSION['request'] = serialize($info); + } +} + + +function getSreg($identity) +{ + // from config.php + global $openid_sreg; + + if (!is_array($openid_sreg)) { + return null; + } + + return $openid_sreg[$identity]; + +} + +?> \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/server/openid-server.css b/modules/member/php-openid-1.2.3/examples/server/openid-server.css new file mode 100644 index 000000000..badff2395 --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/server/openid-server.css @@ -0,0 +1,74 @@ +body { + padding: 0; + margin: 0; +} + +#content { + padding: 0.5em; + max-width: 50em; +} + +ul.error { + background: #ffaaaa; + border: 1px solid #ff0000; + padding: 0.5em; + padding-left: 1.5em; +} + +.login th { + text-align: left; +} + +div.form { + border: thin solid #777777; + background: #dddddd; + padding: 0.5em; + margin-top: 1em; +} + +div.navigation { + border-bottom: thin solid #cccccc; + background: #eeeeee; + font-size: smaller; + padding: 0.5em; +} + +div.navigation h2 { + margin-top: 0; +} + +div.navigation p { + margin: 0; +} + +div.navigation ul { + margin: 0; +} + +div.login p { + margin-top: 0; +} + +h1 { + margin-top: 0; +} + +pre { + padding: 1em; + border: 1px solid black; + background: #ffeebb; +} + +#checkup { + background: url('http://www.openidenabled.com/favicon.ico') no-repeat; + padding-left: 16px; +} + +th { + text-align: left; +} + +table { + border-collapse: collapse; + margin-bottom: 1em; +} \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/server/server.php b/modules/member/php-openid-1.2.3/examples/server/server.php new file mode 100644 index 000000000..727b8dd3c --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/server/server.php @@ -0,0 +1,45 @@ + + + + PHP OpenID Server + +

    PHP OpenID Server

    +

    + This server needs to be configured before it can be used. Edit + config.php to reflect your server's setup, then + load this page again. +

    + + + + \ No newline at end of file diff --git a/modules/member/php-openid-1.2.3/examples/server/setup.php b/modules/member/php-openid-1.2.3/examples/server/setup.php new file mode 100644 index 000000000..0e26be611 --- /dev/null +++ b/modules/member/php-openid-1.2.3/examples/server/setup.php @@ -0,0 +1,690 @@ + + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +$path_extra = dirname(dirname(dirname(__FILE__))); +$path = ini_get('include_path'); +$path = $path_extra . PATH_SEPARATOR . $path; +ini_set('include_path', $path); +require_once "Auth/OpenID.php"; + +/** + * Data. + */ + +$store_types = array("Filesystem" => "Auth_OpenID_FileStore", + "MySQL" => "Auth_OpenID_MySQLStore", + "PostgreSQL" => "Auth_OpenID_PostgreSQLStore", + "SQLite" => "Auth_OpenID_SQLiteStore"); + +/** + * Main. + */ + +$messages = array(); + +session_start(); +init_session(); + +if (!check_session() || + isset($_GET['add_openid'])) { + render_form(); +} else { + print generate_config(isset($_GET['download'])); +} + +/** + * Functions. + */ + +function check_url($url) { + return (Auth_OpenID::normalizeUrl($url) !== null); +} + +function build_url() { + $port = (($_SERVER['SERVER_PORT'] == 80) ? null : $_SERVER['SERVER_PORT']); + + $parts = explode("/", $_SERVER['SERVER_PROTOCOL']); + $scheme = strtolower($parts[0]); + + if ($port) { + return sprintf("%s://%s:%s%s/server.php", $scheme, $_SERVER['SERVER_NAME'], + $port, dirname($_SERVER['PHP_SELF'])); + } else { + return sprintf("%s://%s%s/server.php", $scheme, $_SERVER['SERVER_NAME'], + dirname($_SERVER['PHP_SELF'])); + } +} + +function check_open_basedir($path) { + if (ini_get('open_basedir')) { + $parts = explode(PATH_SEPARATOR, ini_get('open_basedir')); + + $found = false; + + foreach ($parts as $p) { + if (strpos($path, $p) === 0) { + $found = true; + break; + } + } + + return $found; + } else { + return true; + } +} + +function check_session() { + + global $messages; + + if ($_GET && isset($_GET['clear'])) { + session_destroy(); + $_SESSION = array(); + init_session(); + return false; + } + + $bad_path = false; + + if (isset($_GET['generate'])) { + if (!$_SESSION['server_url']) { + $messages[] = "Please enter a server URL."; + } + + if (!$_SESSION['store_type']) { + $messages[] = "No store type chosen."; + } else { + switch ($_SESSION['store_type']) { + case "Filesystem": + if (!$_SESSION['store_data']['fs_path']) { + $messages[] = "Please specify a filesystem store path."; + } else { + if (!check_open_basedir($_SESSION['store_data']['fs_path'])) { + $messages[] = "The filesystem store path violates PHP's open_basedir setting."; + $bad_path = true; + } + } + break; + + case "SQLite": + if (!$_SESSION['store_data']['sqlite_path']) { + $messages[] = "Please specify a SQLite database path."; + } else { + if (!check_open_basedir($_SESSION['store_data']['sqlite_path'])) { + $messages[] = "The SQLite store path violates PHP's open_basedir setting."; + $bad_path = true; + } + } + break; + + default: + if (!($_SESSION['store_data']['host'] && + $_SESSION['store_data']['database'] && + $_SESSION['store_data']['username'] && + $_SESSION['store_data']['password'])) { + $messages[] = "Please specify database connection details."; + } + } + } + } + + if ($_SESSION['store_type'] && + $_SESSION['server_url'] && + (parse_url($_SESSION['server_url']) !== false) && + ((($_SESSION['store_type'] == 'Filesystem') && + $_SESSION['store_data']['fs_path']) || + (($_SESSION['store_type'] == 'SQLite') && + $_SESSION['store_data']['sqlite_path']) || + ($_SESSION['store_data']['host'] && + $_SESSION['store_data']['username'] && + $_SESSION['store_data']['database'] && + $_SESSION['store_data']['password'])) && + !$bad_path) { + + return true; + } + + return false; +} + +function render_form() { + + global $store_types, $fields, $messages; + + $basedir_msg = ""; + + if (ini_get('open_basedir')) { + $basedir_msg = "
    Note: Due to the ". + "open_basedir php.ini setting, be sure to ". + "choose a path in one of the following directories:
    • ". + implode("
    • ", + explode(PATH_SEPARATOR, ini_get('open_basedir'))). + "
    "; + } + + $sqlite_found = false; + if (extension_loaded('sqlite') || + @dl('sqlite.' . PHP_SHLIB_SUFFIX)) { + $sqlite_found = true; + } + + $mysql_found = false; + if (extension_loaded('mysql') || + @dl('mysql.' . PHP_SHLIB_SUFFIX)) { + $mysql_found = true; + } + + $pgsql_found = false; + if (extension_loaded('pgsql') || + @dl('pgsql.' . PHP_SHLIB_SUFFIX)) { + $pgsql_found = true; + } + +?> + + + + + + +

    OpenID Example Server Configuration

    + +"; + foreach ($messages as $m) { + print "
    $m
    "; + } + print ""; + +} +?> + +

    +Your browser has been redirected to this page so you can configure the +server example. This form will auto-generate an OpenID example server +configuration for use with the OpenID server example. +

    + +
    +
    + +

    + The server URL is the URL that points to the "server.php" file. It + looks like your server URL should be . +

    + + + + + +
    + +
    + +

    + If this package isn't installed in the PHP include path, the package's + directory should be added. For example, if the package is in + /home/me/PHP-OpenID/, you should enter that directory here. +

    + + + + + + + +
    + +
    + +

    + The server needs to store OpenID information in a "store". The + following store types are available on your PHP installation: +

    + + Store method: +
    + +
    + > + +
    + + + +
    +
    + + +
    + > + +
    + + + +
    +
    + + + + +
    + + + > + + + + + > + + + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    +
    + +

    + Your OpenID server will need to know what URLs it can authenticate. Supply URLs and passwords here. +

    + + OpenID URLs to serve: + +
    +"; + foreach ($_SESSION['users'] as $url => $p) { + print ""; + } + print "
    OpenID URLPassword Hash
    ".$url."".$p."
    "; +} +?> +
    + Add an OpenID: +
    + +
    +
    + +
    +
    + +
    + + +
    + +
    + + +
    + +

    + Your OpenID server can be configured to trust a set of sites by default. Enter those here. +

    + + Trusted sites: + +
    +"; + foreach ($_SESSION['trust_roots'] as $url) { + print ""; + } + print "
    Trusted site URL
    ".$url."
    "; +} +?> +
    + Add a trusted site: +
    + +
    +
    + +
    + + + +
    + + + + + + +

    OpenID Example Server Configuration

    + +

    +Put the following text into config.php. +

    + +

    +Back to form (resets settings) +

    + +

    +Download this configuration +

    + +
    +
    +
    +/**
    + * Set any extra include paths needed to use the library
    + */
    +set_include_path(get_include_path() . PATH_SEPARATOR . "");
    +
    +
    +/**
    + * The URL for the server.
    + *
    + * This is the location of server.php. For example:
    + *
    + * $server_url = 'http://example.com/~user/server.php';
    + *
    + * This must be a full URL.
    + */
    +$server_url = "";
    +
    +/**
    + * Initialize an OpenID store
    + *
    + * @return object $store an instance of OpenID store (see the
    + * documentation for how to create one)
    + */
    +function getOpenIDStore()
    +{
    +    require_once 'Auth/OpenID/MySQLStore.php';
    +    require_once 'DB.php';
    +
    +    $dsn = array(
    +                 'phptype'  => 'mysql',
    +                 'username' => '',
    +                 'password' => '',
    +                 'hostspec' => ''
    +                 );
    +
    +    $db =& DB::connect($dsn);
    +
    +    if (PEAR::isError($db)) {
    +        return null;
    +    }
    +
    +    $db->query("USE ");
    +        
    +    return new Auth_OpenID_MySQLStore($db);
    +require_once 'Auth/OpenID/PostgreSQLStore.php';
    +    require_once 'DB.php';
    +
    +    $dsn = array(
    +                 'phptype'  => 'pgsql',
    +                 'username' => '',
    +                 'password' => '',
    +                 'hostspec' => '',
    +                 'database' => ''
    +                 );
    +
    +    $db =& DB::connect($dsn);
    +
    +    if (PEAR::isError($db)) {
    +        return null;
    +    }
    +
    +    return new Auth_OpenID_PostgreSQLStore($db);
    +
    +}
    +
    +/**
    + * Users who are allowed to log in to this OpenID server.
    + *
    + * This is an array from URL to password hash. The URL must include
    + * the proper OpenID server information in order to work with this
    + * server.
    + *
    + * This must be set for the server to be usable. If it is not set, no
    + * users will be able to log in.
    + *
    + * Example:
    + * $openid_users = array(
    + *                    'http://joe.example.com/' => sha1('foo')
    + *                      )
    + */
    +$openid_users = array( $hash) {
    +    $i++;
    +    print "\n    '$url' => '$hash'";
    +    if ($i < count($_SESSION['users'])) {
    +        print ",";
    +    }
    +}
    +?>
    +
    +);
    +
    +/**
    + * Trusted sites is an array of trust roots.
    + *
    + * Sites in this list will not have to be approved by the user in
    + * order to be used. It is OK to leave this value as-is.
    + *
    + * In a more robust server, this should be a per-user setting.
    + */
    +$trusted_sites = array(
    +
    +);
    +
    +
    + + +