68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
from pyramid.authentication import AuthTktAuthenticationPolicy
|
|
from pyramid.authorization import ACLAuthorizationPolicy
|
|
from pyramid.config import Configurator
|
|
from pyramid.session import SignedCookieSessionFactory
|
|
from sqlalchemy import engine_from_config
|
|
from soter.models import initialize_sql
|
|
from soter.renderers import json_renderer
|
|
from soter.security import rolefinder
|
|
|
|
|
|
def main(global_config, **settings):
|
|
""" This function returns a Pyramid WSGI application.
|
|
"""
|
|
engine = engine_from_config(settings, 'sqlalchemy.')
|
|
initialize_sql(engine)
|
|
|
|
session_factory = SignedCookieSessionFactory('soter')
|
|
authentication_policy = AuthTktAuthenticationPolicy('brewman', timeout=900, reissue_time=90, callback=rolefinder)
|
|
authorization_policy = ACLAuthorizationPolicy()
|
|
|
|
|
|
config = Configurator(settings=settings,
|
|
session_factory=session_factory,
|
|
authentication_policy=authentication_policy,
|
|
authorization_policy=authorization_policy)
|
|
|
|
config.add_renderer(name='json', factory=json_renderer)
|
|
|
|
config.add_static_view('app', 'soter:static/app', cache_max_age=3600)
|
|
config.add_static_view('assets', 'soter:static/assets', cache_max_age=3600)
|
|
config.add_route('favicon', '/favicon.ico')
|
|
config.add_route('home', '/')
|
|
config.add_route('v1_auth', '/v1/Auth')
|
|
config.add_route('v1_login', '/v1/login')
|
|
config.add_route('login', '/login')
|
|
config.add_route('logout', '/logout')
|
|
|
|
|
|
add_route(config,'picture', '/picture')
|
|
add_route(config,'album', '/album')
|
|
add_route(config,'user', '/user')
|
|
add_route(config,'role', '/role')
|
|
config.scan()
|
|
return config.make_wsgi_app()
|
|
|
|
|
|
def pluralize(word, num=None):
|
|
if num is None or num != 1:
|
|
if word.endswith('y'):
|
|
return word[:-1] + 'ies'
|
|
elif word[-1] in 'sx' or word[-2:] in ['sh', 'ch']:
|
|
return word + 'es'
|
|
elif word.endswith('an'):
|
|
return word[:-2] + 'en'
|
|
else:
|
|
return word + 's'
|
|
return word
|
|
|
|
|
|
def add_route(config, name, url, has_list=True, variable='id'):
|
|
config.add_route(name + '_' + variable, url + '/{' + variable + '}')
|
|
config.add_route(name, url)
|
|
if has_list:
|
|
config.add_route(name + '_list', pluralize(url))
|
|
|
|
config.add_route('api_' + name + '_' + variable, '/v1' + url + '/{' + variable + '}')
|
|
config.add_route('api_' + name, '/v1' + url)
|