Skip to main content

A WSGI app that allows you to add another factor of authentication to any application server.

Project description


factored is a wsgi application that forces authentication before is passed to the wsgi application.

This can also be used as a proxy for non-wsgi apps.


using virtualenv:

virtualenv factored
cd factored
git clone git://
cd factored
../bin/python develop
../bin/initializedb develop.ini
../bin/adduser development.ini
../bin/paster serve develop.ini
../bin/removeuser development.ini


Must follow the example develop.ini provided. You’ll probably want to copy that file into your own and change the settings.

Edit server and port settings for application server if not using with another wsgi application.

Paste configuration options

auth_tkt. prefixed options
Configuration options that are passed directly into repoze.who’s auth_tkt plugin.
Base url all authentication urls and resources are based off of. Useful if you’re only looking to authenticate a portion of a site.
Supported authentication schemes.
If using email authentication, the window of time the user has to enter correct code in.
Email authencation subject used.
Email authentication from address.
Email Authentication text body. {code} will be replaced with the code.
pyramid. prefixed options
Configuration passed directly into pyramid configuration.
Connection string for sql backend. Most configurations will work fine with normal sqlite.
mail. prefixed options
Configuration passed directly to the mailer plugin. Options can be found at

Nginx Example Configuration

An example setup with nginx and load balancing:

server {
    listen  80;
    include proxy.conf;

    # paths to protect
    location ~ ^/admin.* {

    location / {
        proxy_pass http://app;

server {
    listen 8090;
    include proxy.conf;
    location / {
        proxy_pass http://app;

Then factored would be configured to run on port 8000 and proxy to 8090 and have base_auth_url url set to /admin/auth.

Sample Paste Configuration

An example to follow if you’re not using a git checkout:

use = egg:factored#simpleproxy
server =
port = 8090

use = egg:factored#main
next = proxy

auth_tkt.secret = REPLACEME
auth_tkt.cookie_name = factored = false
auth_tkt.include_ip = true
auth_tkt.timeout = 12345
auth_tkt.reissue_time = 1234

base_auth_url = /auth
supported_auth_schemes =
    Google Auth

email_auth_window = 120
# in seconds
email_auth.subject = Authentication Request
email_auth.sender =
email_auth.body =
    You have requested authentication.
    You're temporary access code is: {code}

pyramid.reload_templates = true
pyramid.debug_authorization = true
pyramid.debug_notfound = true
pyramid.debug_routematch = true
pyramid.default_locale_name = en
pyramid.includes =

sqlalchemy.url = sqlite:///%(here)s/test.db

# all mail settings can be found at = localhost
mail.port = 25

use = egg:Paste#http
# Change to to make public:
host =
port = 8000

With Gunicorn


../bin/easy_install gunicorn

to run:

../bin/gunicorn_paste --workers=2 develop.ini


1.0a1 (2012-03-23)

  • Initial release

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for factored, version 1.0a1
Filename, size File type Python version Upload date Hashes
Filename, size (108.9 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page