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