Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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)