paulb@744 | 1 | #!/usr/bin/env python |
paulb@757 | 2 | # -*- coding: iso-8859-1 -*- |
paulb@744 | 3 | |
paulb@744 | 4 | "An OpenID login example with some local user pages." |
paulb@744 | 5 | |
paulb@744 | 6 | from WebStack.Resources.OpenIDLogin import OpenIDLoginResource, Authenticator |
paulb@744 | 7 | from WebStack.Resources.ResourceMap import MapResource |
paulb@744 | 8 | from WebStack.Resources.Static import StringResource |
paulb@744 | 9 | from WebStack.Generic import ContentType |
paul@777 | 10 | import urllib |
paulb@744 | 11 | |
paulb@763 | 12 | def get_site_map(app_url, deployment_url): |
paulb@763 | 13 | |
paulb@763 | 14 | """ |
paulb@763 | 15 | Return a resource for the site having the given 'app_url' and |
paulb@763 | 16 | 'deployment_url'. The 'app_url' should be the "bare" reference using a |
paulb@763 | 17 | protocol, host and port, not including any path information. |
paulb@763 | 18 | """ |
paulb@744 | 19 | |
paul@777 | 20 | # NOTE: Support "special" username due to stupid HTML 4 restrictions. |
paul@777 | 21 | |
paul@777 | 22 | special_username = urllib.quote(u"???".encode("utf-8")) |
paul@777 | 23 | |
paulb@763 | 24 | login = OpenIDLoginResource( |
paulb@763 | 25 | app_url=app_url, |
paulb@763 | 26 | authenticator=Authenticator( |
paulb@763 | 27 | credentials=( |
paul@775 | 28 | # Local identifier, username, password |
paul@777 | 29 | ((deployment_url + "/badger", "badger"), "abc"), |
paul@777 | 30 | ((deployment_url + "/vole", "vole"), "xyz"), |
paul@777 | 31 | ((deployment_url + u"/???", u"???"), u"???"), |
paul@777 | 32 | ((deployment_url + "/badger2", "badger"), "abc"), |
paul@777 | 33 | ((deployment_url + "/vole2", "vole"), "xyz"), |
paul@777 | 34 | ((deployment_url + u"/???2", u"???"), u"???"), |
paul@777 | 35 | ((deployment_url + "/" + special_username, u"???"), u"???"), |
paulb@763 | 36 | ) |
paulb@763 | 37 | ) |
paulb@763 | 38 | ) |
paulb@744 | 39 | |
paulb@744 | 40 | return MapResource({ |
paulb@763 | 41 | "" : login, |
paulb@763 | 42 | "login" : login, |
paulb@744 | 43 | |
paulb@744 | 44 | # Some local OpenID pages. |
paulb@744 | 45 | |
paulb@744 | 46 | "badger" : |
paulb@744 | 47 | StringResource(""" |
paulb@744 | 48 | <html> |
paulb@744 | 49 | <head> |
paul@776 | 50 | <meta http-equiv="Content-Type" content="text/html; charset="iso-8859-1" /> |
paulb@744 | 51 | <link rel="openid2.provider openid.server" href="%s/login" /> |
paul@777 | 52 | <link rel="openid2.local_id openid.delegate" href="%s/badger" /> |
paulb@744 | 53 | <title>Badger's Home Page</title> |
paulb@744 | 54 | </head> |
paulb@744 | 55 | <body> |
paulb@744 | 56 | <p>Home page for the OpenID authenticated user, <code>badger</code>.</p> |
paulb@744 | 57 | </body> |
paulb@744 | 58 | </html> |
paul@777 | 59 | """ % (deployment_url, deployment_url), ContentType("text/html")), |
paulb@757 | 60 | u"???" : |
paulb@757 | 61 | StringResource(u""" |
paulb@757 | 62 | <html> |
paulb@757 | 63 | <head> |
paul@776 | 64 | <meta http-equiv="Content-Type" content="text/html; charset="iso-8859-1" /> |
paulb@757 | 65 | <link rel="openid2.provider openid.server" href="%s/login" /> |
paul@777 | 66 | <link rel="openid2.local_id openid.delegate" href="%s/%s" /> |
paulb@757 | 67 | <title>Home Page for ???</title> |
paulb@757 | 68 | </head> |
paulb@757 | 69 | <body> |
paulb@757 | 70 | <p>Home page for the OpenID authenticated user, <code>???</code>.</p> |
paulb@757 | 71 | </body> |
paulb@757 | 72 | </html> |
paul@777 | 73 | """ % (deployment_url, deployment_url, special_username), ContentType("text/html", "iso-8859-1")), |
paulb@744 | 74 | "vole" : |
paulb@744 | 75 | StringResource(""" |
paulb@744 | 76 | <html> |
paulb@744 | 77 | <head> |
paul@776 | 78 | <meta http-equiv="Content-Type" content="text/html; charset="iso-8859-1" /> |
paulb@744 | 79 | <link rel="openid2.provider openid.server" href="%s/login" /> |
paul@777 | 80 | <link rel="openid2.local_id openid.delegate" href="%s/vole" /> |
paulb@744 | 81 | <title>Vole's Home Page</title> |
paulb@744 | 82 | </head> |
paulb@744 | 83 | <body> |
paulb@744 | 84 | <p>Home page for the OpenID authenticated user, <code>vole</code>.</p> |
paulb@744 | 85 | </body> |
paulb@744 | 86 | </html> |
paul@777 | 87 | """ % (deployment_url, deployment_url), ContentType("text/html")), |
paul@775 | 88 | |
paul@775 | 89 | # OpenID 2.0 resources. |
paul@775 | 90 | # See: http://docs.oasis-open.org/xri/2.0/specs/cd02/xri-resolution-V2.0-cd-02.html#_Ref129424065 |
paul@775 | 91 | # ("3.3 Media Types for XRI Resolution") |
paul@775 | 92 | # See: http://openid.net/specs/openid-authentication-2_0.html#discovery |
paul@775 | 93 | # ("7.3. Discovery") |
paul@775 | 94 | |
paul@775 | 95 | "badger2" : |
paul@775 | 96 | StringResource(""" |
paul@775 | 97 | <?xml version="1.0"?> |
paul@775 | 98 | <Service xmlns="xri://$xrd*($v*2.0)"> |
paul@775 | 99 | <Type>http://specs.openid.net/auth/2.0/signon</Type> |
paul@775 | 100 | <URI>%s/login</URI> |
paul@777 | 101 | <LocalID>%s/badger2</LocalID> |
paul@775 | 102 | </Service> |
paul@777 | 103 | """ % (deployment_url, deployment_url), ContentType("application/xrd+xml")), |
paul@775 | 104 | u"???2" : |
paul@775 | 105 | StringResource(u""" |
paul@775 | 106 | <?xml version="1.0" encoding="iso-8859-1"?> |
paul@775 | 107 | <Service xmlns="xri://$xrd*($v*2.0)"> |
paul@775 | 108 | <Type>http://specs.openid.net/auth/2.0/signon</Type> |
paul@775 | 109 | <URI>%s/login</URI> |
paul@777 | 110 | <LocalID>%s/???2</LocalID> |
paul@775 | 111 | </Service> |
paul@777 | 112 | """ % (deployment_url, deployment_url), ContentType("application/xrd+xml", "iso-8859-1")), |
paul@775 | 113 | "vole2" : |
paul@775 | 114 | StringResource(""" |
paul@775 | 115 | <?xml version="1.0"?> |
paul@775 | 116 | <Service xmlns="xri://$xrd*($v*2.0)"> |
paul@775 | 117 | <Type>http://specs.openid.net/auth/2.0/signon</Type> |
paul@775 | 118 | <URI>%s/login</URI> |
paul@777 | 119 | <LocalID>%s/vole2</LocalID> |
paul@775 | 120 | </Service> |
paul@777 | 121 | """ % (deployment_url, deployment_url), ContentType("application/xrd+xml")), |
paulb@744 | 122 | }) |
paulb@744 | 123 | |
paulb@744 | 124 | # vim: tabstop=4 expandtab shiftwidth=4 |