Putting together everything in the previous sections gives us this full (but not very useful) application:
#!/usr/bin/env python
"""Auth Example. Username=john and Password=bananas (Case sensitive)"""
# show python where the modules are and enable error displays
import sys; sys.path.append('../'); sys.path.append('../../../')
import web.error; web.error.enable()
import web, web.database
# Setup a database connection
connection = web.database.connect(
adapter="snakesql",
database="webserver-auth",
autoCreate=1
)
cursor = connection.cursor()
# Obtain a session manager
import web.session
session = web.session.manager(
driver='database',
autoCreate=1,
cursor=cursor
)
if not session.load():
session.create()
# Obtain Auth objects
import web.auth
auth = web.auth.manager(
session.store('auth'),
'database',
idle=20,
autoCreate=1,
encryption='md5',
cursor=cursor
)
# Authentication and Authorisation code
if auth.signedInUser != None and auth.signedInUser.authorise(app='app', level=1):
print web.header('text/plain'), "Authorised"
else:
print web.header()
# Sign in however you like.. but you could use this signIn handler
import web.auth.handler.signIn
signInHandler = web.auth.handler.signIn.SignInHandler(
manager=auth,
encryption='md5'
)
form = signInHandler.handle()
if form: # ie there is a problem and the sign in form needs displaying
print """<html><body><h1>Please Sign In</h1>
%(form)s<p>%(message)s</p></body></html>"""%form
else:
# We have just signed in, but we have not authorised the user
if auth.signedInUser.authorise(app='app', level=1):
print "Signed in successfully"
else:
print "Not authorised to use this application"
connection.commit()
connection.close()
You can test this example by starting the test webserver in scripts/webserver.py and visiting http://localhost:8080/doc/src/lib/webserver-web-auth.py on your local machine. The username is john and the password is bananas.