vigigraph / vigigraph / controllers / root.py @ 1626571f
History | View | Annotate | Download (4.13 KB)
1 |
# -*- coding: utf-8 -*-
|
---|---|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4:
|
3 |
"""Vigigraph Controller"""
|
4 |
|
5 |
import logging |
6 |
from tg import expose, flash, require, request, redirect |
7 |
from pylons.i18n import ugettext as _, lazy_ugettext as l_, get_lang |
8 |
from repoze.what.predicates import Any, All, not_anonymous, \ |
9 |
has_permission, in_group |
10 |
from pkg_resources import resource_filename |
11 |
|
12 |
from vigilo.turbogears.controllers import BaseController |
13 |
from vigilo.turbogears.controllers.error import ErrorController |
14 |
from vigilo.turbogears.controllers.proxy import ProxyController |
15 |
from vigilo.turbogears.controllers.api.root import ApiRootController |
16 |
|
17 |
from vigigraph.controllers.rpc import RpcController |
18 |
|
19 |
__all__ = ['RootController']
|
20 |
|
21 |
LOGGER = logging.getLogger(__name__) |
22 |
|
23 |
# pylint: disable-msg=R0201
|
24 |
class RootController(BaseController): |
25 |
"""
|
26 |
The root controller for the vigigraph application.
|
27 |
"""
|
28 |
error = ErrorController() |
29 |
rpc = RpcController() |
30 |
nagios = ProxyController('nagios', '/nagios/', |
31 |
not_anonymous(l_('You need to be authenticated')))
|
32 |
vigirrd = ProxyController('vigirrd', '/vigirrd/', |
33 |
not_anonymous(l_('You need to be authenticated')))
|
34 |
api = ApiRootController("/api")
|
35 |
|
36 |
@expose('index.html') |
37 |
@require(All(
|
38 |
not_anonymous(msg=l_("You need to be authenticated")),
|
39 |
Any( |
40 |
in_group('managers'),
|
41 |
has_permission('vigigraph-access',
|
42 |
msg=l_("You don't have access to VigiGraph")),
|
43 |
) |
44 |
)) |
45 |
def index(self): |
46 |
"""Handle the front-page."""
|
47 |
return dict(page='index') |
48 |
|
49 |
@expose()
|
50 |
def i18n(self): |
51 |
import gettext |
52 |
import pylons |
53 |
import os.path |
54 |
|
55 |
# Repris de pylons.i18n.translation:_get_translator.
|
56 |
conf = pylons.config.current_conf() |
57 |
try:
|
58 |
rootdir = conf['pylons.paths']['root'] |
59 |
except KeyError: |
60 |
rootdir = conf['pylons.paths'].get('root_path') |
61 |
localedir = os.path.join(rootdir, 'i18n')
|
62 |
|
63 |
lang = get_lang() |
64 |
|
65 |
# Localise le fichier *.mo actuellement chargé
|
66 |
# et génère le chemin jusqu'au *.js correspondant.
|
67 |
filename = gettext.find(conf['pylons.package'], localedir,
|
68 |
languages=lang) |
69 |
js = filename[:-3] + '.js' |
70 |
|
71 |
themes_filename = gettext.find( |
72 |
'vigilo-themes',
|
73 |
resource_filename('vigilo.themes.i18n', ''), |
74 |
languages=lang) |
75 |
themes_js = themes_filename[:-3] + '.js' |
76 |
|
77 |
# Récupère et envoie le contenu du fichier de traduction *.js.
|
78 |
fhandle = open(js, 'r') |
79 |
translations = fhandle.read() |
80 |
fhandle.close() |
81 |
|
82 |
fhandle = open(themes_js, 'r') |
83 |
translations += fhandle.read() |
84 |
fhandle.close() |
85 |
return translations
|
86 |
|
87 |
@expose('login.html') |
88 |
def login(self, came_from='/'): |
89 |
"""Start the user login."""
|
90 |
login_counter = request.environ['repoze.who.logins']
|
91 |
if login_counter > 0: |
92 |
flash(_('Wrong credentials'), 'warning') |
93 |
return dict(page='login', login_counter=str(login_counter), |
94 |
came_from=came_from) |
95 |
|
96 |
@expose()
|
97 |
def post_login(self, came_from='/'): |
98 |
"""
|
99 |
Redirect the user to the initially requested page on successful
|
100 |
authentication or redirect her back to the login page if login failed.
|
101 |
|
102 |
"""
|
103 |
if not request.identity: |
104 |
login_counter = request.environ['repoze.who.logins'] + 1 |
105 |
redirect('/login', came_from=came_from, __logins=login_counter)
|
106 |
userid = request.identity['repoze.who.userid']
|
107 |
LOGGER.info(_('"%(username)s" logged in (from %(IP)s)') % {
|
108 |
'username': userid,
|
109 |
'IP': request.remote_addr,
|
110 |
}) |
111 |
flash(_('Welcome back, %s!') % userid)
|
112 |
redirect(came_from) |
113 |
|
114 |
@expose()
|
115 |
def post_logout(self, came_from='/'): |
116 |
"""
|
117 |
Redirect the user to the initially requested page on logout and say
|
118 |
goodbye as well.
|
119 |
|
120 |
"""
|
121 |
LOGGER.info(_('Some user logged out (from %(IP)s)') % {
|
122 |
'IP': request.remote_addr,
|
123 |
}) |
124 |
flash(_('We hope to see you soon!'))
|
125 |
redirect(came_from) |