view pylons_app/controllers/admin.py @ 191:b68b2246e5a6

Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user. Removed login form from admin.
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 22 May 2010 01:47:07 +0200
parents 52bbeb1e813f
children c8162373f214
line wrap: on
line source

import logging
import os

from pylons import request, response, session, tmpl_context as c, url, app_globals as g
from pylons.controllers.util import abort, redirect
from pylons_app.lib.base import BaseController, render
from pylons_app.model import meta
from pylons_app.model.db import UserLogs
from webhelpers.paginate import Page
from pylons_app.lib.utils import check_repo, invalidate_cache
from pylons_app.lib.auth import LoginRequired

log = logging.getLogger(__name__)

class AdminController(BaseController):
    
    @LoginRequired()
    def __before__(self):
        user = session['hg_app_user']
        c.admin_user = user.is_admin
        c.admin_username = user.username
        super(AdminController, self).__before__()
        
    def index(self):
        sa = meta.Session
                         
        users_log = sa.query(UserLogs)\
            .order_by(UserLogs.action_date.desc())
        p = int(request.params.get('page', 1))
        c.users_log = Page(users_log, page=p, items_per_page=10)
        c.log_data = render('admin/admin_log.html')
        if request.params.get('partial'):
            return c.log_data
        return render('admin/admin.html')

    def add_repo(self, new_repo):
        #extra check it can be add since it's the command
        if new_repo == '_admin':
            c.msg = 'DENIED'
            c.new_repo = ''
            return render('admin/add.html')

        new_repo = new_repo.replace(" ", "_")
        new_repo = new_repo.replace("-", "_")

        try:
            self._create_repo(new_repo)
            c.new_repo = new_repo
            c.msg = 'added repo'
            #clear our cached list for refresh with new repo
            invalidate_cache('cached_repo_list')
        except Exception as e:
            c.new_repo = 'Exception when adding: %s' % new_repo
            c.msg = str(e)

        return render('admin/add.html')


    def _create_repo(self, repo_name):
        if repo_name in [None, '', 'add']:
            raise Exception('undefined repo_name of repo')
        repo_path = os.path.join(g.base_path, repo_name)
        if check_repo(repo_name, g.base_path):
            log.info('creating repo %s in %s', repo_name, repo_path)
            from vcs.backends.hg import MercurialRepository
            MercurialRepository(repo_path, create=True)