aboutsummaryrefslogtreecommitdiffstats
path: root/jm2l/__init__.py
blob: 1be4a2b9f337ee25271f1151d8ace25a4d23aa4d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
from pyramid.config import Configurator
from pyramid.renderers import JSON, JSONP
from pyramid.session import SignedCookieSessionFactory
from sqlalchemy import engine_from_config

from .models import DBSession, get_user
from .security import EntryFactory, groupfinder
import locale

def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8")
    engine = engine_from_config(settings, 'sqlalchemy.')
    DBSession.configure(bind=engine)
    my_session_factory = SignedCookieSessionFactory('itsaseekreet')
    authentication_policy = AuthTktAuthenticationPolicy('somesecret',
                    callback=groupfinder, hashalg='sha512', debug=True)
    authorization_policy = ACLAuthorizationPolicy()
    config = Configurator(settings=settings,
                          root_factory='.security.RootFactory',
                          authentication_policy=authentication_policy,
                          authorization_policy=authorization_policy
                          )
    config.add_renderer('json', JSON(indent=4))
    config.add_renderer('jsonp', JSONP(param_name='callback'))
    config.set_session_factory(my_session_factory)
    config.add_request_method(get_user, 'user', reify=True)
    config.add_static_view('static', 'static', cache_max_age=3600)
    config.add_static_view('img', 'static/img', cache_max_age=3600)
    config.add_static_view('upload', 'upload', cache_max_age=3600)
    
    config.add_route('tester', '/tester')    

    # ICal Routes
    config.add_route('progr_iCal', '/{year:\d+}/JM2L.ics')
    
    # JSON Routes
    config.add_route('users_json', '/json-users')
    config.add_route('tiers_json', '/json-tiers')
    config.add_route('progr_json', '/{year:\d+}/le-prog-json')
    config.add_route('timeline_json', '/{year:\d+}/timeline-json')      
    
    # Session setting Routes
    config.add_route('year', '/year/{year:\d+}')
    
    # HTML Routes - Staff
    config.add_route('list_task',  '/Staff')
    config.add_route('handle_task',   '/Staff/tasks{sep:/*}{task_id:(\d+)?}')
    config.add_route('action_task', '/Staff/{action:(\w+)}/{task_id:(\d+)}')

    # HTML Routes - Public
    config.add_route('home', '/')
    config.add_route('presse', '/{year:\d+}/dossier-de-presse')
    config.add_route('edit_presse', '/{year:\d+}/dossier-de-presse/edit')    
    config.add_route('programme', '/{year:\d+}/le-programme')
    config.add_route('plan', 'nous-rejoindre')
    config.add_route('participer', 'participer-l-evenement')
    config.add_route('captcha', '/captcha')
    
    ## Events
    config.add_route('event', '/event/{year:\d+}/{event_id:([\w-]+)?}')
    config.add_route('link_event', '/MesJM2L/{year:\d+}/{intervention:\w+}/link')    
    config.add_route('edit_event', '/MesJM2L/{year:\d+}/{intervention:\w+}{sep:/*}{event_id:([\w-]+)?}')
    
    ## Entities  
    config.add_route('entities', '/entities') #{sep:/*}{Nature:\w+?}')
    config.add_route('add_entity',  '/entity')    
    config.add_route('show_entity', '/entity/{tiers_type:(\w+)}/{entity_id:([\w-]+)?}')
    config.add_route('edit_entity', '/entity/{tiers_type:(\w+)}/{entity_id:([\w-]+)}/edit')
    
    config.add_route('edit_entity_cat', '/categorie/entity')
    
    ## Users
    config.add_route('show_user', '/user/{user_slug:([\w-]+)?}')
    
    # HTML Routes - Logged
    #config.add_route('profil', 'MesJM2L')    
    config.add_route('jm2l', '/MesJM2L')
    config.add_route('modal', '/{year:\d+}/modal/{modtype:\w+}/{id:(\d+)}')    
    
    # Handle exchanges
    config.add_route('exchange', '/{year:\d+}/exchange/{modtype:\w+}/{id:(\d+)}/{action:\w+}')

    # Handle authentication
    config.add_route('register', '/register')
    config.add_route('auth', '/sign/{action}')
    config.add_route('bymail', '/sign/jm2l/{hash}')
    
    # Handle Multimedia and Uploads
    config.add_route('media_uploadform', '/test2')
    config.add_route('media_view', '/image/{media_table:\w+}/{uid:\d+}/{name:.+}')
    config.add_route('media_upload', '/uploader/{media_table:\w+}/{uid:\d+}/proceed{sep:/*}{name:.*}')

    # To Trash routes
    config.add_route('test', '/test')   
    config.add_route('test2', '/toast{sep:/*}{uid:(\d+)?}')

    #config.add_route('link_user_entity', '/entity/{uid:(\d+)}/{year:\d+}/user/{user_id:(\d+)}')
    #config.add_route('link_role_entity', '/entity/{uid:(\d+)}/{year:\d+}/role/{role_id:(\d+)}')        
    

    config.add_route('IntAdd', '/IntAdd/{modtype:\w+}')
    config.add_route('IntProp', '/IntProp/{modtype:\w+}')    

    config.add_route('blog', '/blog/{id:\d+}/{slug}')
    config.add_route('blog_action', '/blog/{action}',
                     factory='jm2l.security.EntryFactory')
    config.scan()
    return config.make_wsgi_app()