1 #!/usr/bin/env python 2 3 "An OpenID login provider." 4 5 # Site map imports. 6 7 from WebStack.Generic import ContentType 8 from WebStack.Resources.OpenIDLogin import Authenticator 9 from WebStack.Resources.ResourceMap import MapResource 10 from WebStack.Resources.Selectors import EncodingSelector, PathSelector 11 from WebStack.Resources.Static import StringResource 12 import XSLForms.Resources.OpenIDLogin 13 from XSLForms.Resources.WebResources import output, prepare_resources as pr, resources 14 15 # Configuration settings. 16 17 encoding = "utf-8" 18 19 # Resource classes. 20 21 class LoginResource(XSLForms.Resources.OpenIDLogin.OpenIDLoginResource): 22 23 "Special login screen for this application." 24 25 resource_dir = resources(__file__) 26 template_resources = { 27 "login" : output("login_template.xhtml"), 28 "success" : output("success_template.xhtml") 29 } 30 31 # Site map initialisation. 32 33 def get_site(host, use_redirect=1): 34 35 "Return a simple Web site resource." 36 37 # Authentication objects. 38 39 credentials = [ 40 ((host + "/badger", "badger"), "abc"), 41 ((host + "/vole", "vole"), "xyz") 42 ] 43 login_authenticator = Authenticator(credentials) 44 45 # Get a login resource. 46 47 login_resource = LoginResource(host, login_authenticator, use_redirect=use_redirect) 48 49 # A container for the login resource and user pages. 50 51 resource = MapResource({ 52 "login" : login_resource, 53 54 # Some local OpenID pages. 55 56 "badger" : 57 StringResource(""" 58 <html> 59 <head> 60 <link rel="openid2.provider openid.server" href="%s/login" /> 61 <link rel="openid2.local_id openid.delegate" href="%s/badger" /> 62 <title>Badger's Home Page</title> 63 </head> 64 <body> 65 <p>Home page for the OpenID authenticated user, <code>badger</code>.</p> 66 </body> 67 </html> 68 """ % (host, host), ContentType("text/html")), 69 "vole" : 70 StringResource(""" 71 <html> 72 <head> 73 <link rel="openid2.provider openid.server" href="%s/login" /> 74 <link rel="openid2.local_id openid.delegate" href="%s/vole" /> 75 <title>Vole's Home Page</title> 76 </head> 77 <body> 78 <p>Home page for the OpenID authenticated user, <code>vole</code>.</p> 79 </body> 80 </html> 81 """ % (host, host), ContentType("text/html")) 82 }) 83 84 # Wrap the resource up with information about the application root. 85 86 return EncodingSelector(PathSelector(resource), encoding) 87 88 # Resource preparation ahead of time - useful for making installations. 89 90 def prepare_resources(): 91 for cls in [LoginResource]: 92 pr(cls) 93 94 # vim: tabstop=4 expandtab shiftwidth=4