Show More
@@ -5,7 +5,7 b' from pylons import request, response, se' | |||||
5 | from pylons.controllers.util import abort, redirect |
|
5 | from pylons.controllers.util import abort, redirect | |
6 | from pylons_app.lib.base import BaseController, render |
|
6 | from pylons_app.lib.base import BaseController, render | |
7 | from pylons_app.model import meta |
|
7 | from pylons_app.model import meta | |
8 |
from pylons_app.model.db import UserLog |
|
8 | from pylons_app.model.db import UserLog | |
9 | from webhelpers.paginate import Page |
|
9 | from webhelpers.paginate import Page | |
10 | from pylons_app.lib.auth import LoginRequired |
|
10 | from pylons_app.lib.auth import LoginRequired | |
11 |
|
11 | |||
@@ -23,8 +23,7 b' class AdminController(BaseController):' | |||||
23 | def index(self): |
|
23 | def index(self): | |
24 | sa = meta.Session |
|
24 | sa = meta.Session | |
25 |
|
25 | |||
26 |
users_log = sa.query(UserLog |
|
26 | users_log = sa.query(UserLog).order_by(UserLog.action_date.desc()) | |
27 | .order_by(UserLogs.action_date.desc()) |
|
|||
28 | p = int(request.params.get('page', 1)) |
|
27 | p = int(request.params.get('page', 1)) | |
29 | c.users_log = Page(users_log, page=p, items_per_page=10) |
|
28 | c.users_log = Page(users_log, page=p, items_per_page=10) | |
30 | c.log_data = render('admin/admin_log.html') |
|
29 | c.log_data = render('admin/admin_log.html') |
@@ -5,7 +5,7 b' from pylons.controllers.util import abor' | |||||
5 |
|
5 | |||
6 | from pylons_app.lib.base import BaseController, render |
|
6 | from pylons_app.lib.base import BaseController, render | |
7 | from formencode import htmlfill |
|
7 | from formencode import htmlfill | |
8 |
from pylons_app.model.db import User |
|
8 | from pylons_app.model.db import User, UserLog | |
9 | import crypt |
|
9 | import crypt | |
10 |
|
10 | |||
11 | log = logging.getLogger(__name__) |
|
11 | log = logging.getLogger(__name__) | |
@@ -25,7 +25,7 b' class UsersController(BaseController):' | |||||
25 | """GET /users: All items in the collection""" |
|
25 | """GET /users: All items in the collection""" | |
26 | # url('users') |
|
26 | # url('users') | |
27 |
|
27 | |||
28 |
c.users_list = self.sa.query(User |
|
28 | c.users_list = self.sa.query(User).all() | |
29 | return render('admin/users/users.html') |
|
29 | return render('admin/users/users.html') | |
30 |
|
30 | |||
31 | def create(self): |
|
31 | def create(self): | |
@@ -34,7 +34,7 b' class UsersController(BaseController):' | |||||
34 | params = dict(request.params) |
|
34 | params = dict(request.params) | |
35 |
|
35 | |||
36 | try: |
|
36 | try: | |
37 |
new_user = User |
|
37 | new_user = User() | |
38 | new_user.active = params.get('active', False) |
|
38 | new_user.active = params.get('active', False) | |
39 | new_user.username = params.get('username') |
|
39 | new_user.username = params.get('username') | |
40 | new_user.password = crypt.crypt(params.get('password'), '6a') |
|
40 | new_user.password = crypt.crypt(params.get('password'), '6a') | |
@@ -63,7 +63,7 b' class UsersController(BaseController):' | |||||
63 | params = dict(request.params) |
|
63 | params = dict(request.params) | |
64 |
|
64 | |||
65 | try: |
|
65 | try: | |
66 |
new_user = self.sa.query(User |
|
66 | new_user = self.sa.query(User).get(id) | |
67 | new_user.active = params.get('active', False) |
|
67 | new_user.active = params.get('active', False) | |
68 | new_user.username = params.get('username') |
|
68 | new_user.username = params.get('username') | |
69 | if params.get('new_password'): |
|
69 | if params.get('new_password'): | |
@@ -85,7 +85,7 b' class UsersController(BaseController):' | |||||
85 | # method='delete') |
|
85 | # method='delete') | |
86 | # url('user', id=ID) |
|
86 | # url('user', id=ID) | |
87 | try: |
|
87 | try: | |
88 |
self.sa.delete(self.sa.query(User |
|
88 | self.sa.delete(self.sa.query(User).get(id)) | |
89 | self.sa.commit() |
|
89 | self.sa.commit() | |
90 | except: |
|
90 | except: | |
91 | self.sa.rollback() |
|
91 | self.sa.rollback() | |
@@ -100,7 +100,7 b' class UsersController(BaseController):' | |||||
100 | def edit(self, id, format='html'): |
|
100 | def edit(self, id, format='html'): | |
101 | """GET /users/id/edit: Form to edit an existing item""" |
|
101 | """GET /users/id/edit: Form to edit an existing item""" | |
102 | # url('edit_user', id=ID) |
|
102 | # url('edit_user', id=ID) | |
103 |
c.user = self.sa.query(User |
|
103 | c.user = self.sa.query(User).get(id) | |
104 | defaults = c.user.__dict__ |
|
104 | defaults = c.user.__dict__ | |
105 | return htmlfill.render( |
|
105 | return htmlfill.render( | |
106 | render('admin/users/user_edit.html'), |
|
106 | render('admin/users/user_edit.html'), |
@@ -2,7 +2,7 b' from functools import wraps' | |||||
2 | from pylons import session, url |
|
2 | from pylons import session, url | |
3 | from pylons.controllers.util import abort, redirect |
|
3 | from pylons.controllers.util import abort, redirect | |
4 | from pylons_app.model import meta |
|
4 | from pylons_app.model import meta | |
5 |
from pylons_app.model.db import User |
|
5 | from pylons_app.model.db import User | |
6 | from sqlalchemy.exc import OperationalError |
|
6 | from sqlalchemy.exc import OperationalError | |
7 | from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound |
|
7 | from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound | |
8 | import crypt |
|
8 | import crypt | |
@@ -20,7 +20,7 b' def authfunc(environ, username, password' | |||||
20 | sa = meta.Session |
|
20 | sa = meta.Session | |
21 | password_crypt = get_crypt_password(password) |
|
21 | password_crypt = get_crypt_password(password) | |
22 | try: |
|
22 | try: | |
23 |
user = sa.query(User |
|
23 | user = sa.query(User).filter(User.username == username).one() | |
24 | except (NoResultFound, MultipleResultsFound, OperationalError) as e: |
|
24 | except (NoResultFound, MultipleResultsFound, OperationalError) as e: | |
25 | log.error(e) |
|
25 | log.error(e) | |
26 | user = None |
|
26 | user = None |
@@ -1,12 +1,13 b'' | |||||
1 | import logging |
|
1 | import logging | |
2 | from os.path import dirname as dn |
|
2 | from os.path import dirname as dn | |
|
3 | from os.path import join as jn | |||
3 | from sqlalchemy.engine import create_engine |
|
4 | from sqlalchemy.engine import create_engine | |
4 | import os |
|
5 | import os | |
5 | import sys |
|
6 | import sys | |
6 | ROOT = dn(dn(dn(os.path.realpath(__file__)))) |
|
7 | ROOT = dn(dn(dn(os.path.realpath(__file__)))) | |
7 | sys.path.append(ROOT) |
|
8 | sys.path.append(ROOT) | |
8 |
|
9 | |||
9 |
from pylons_app.model.db import User |
|
10 | from pylons_app.model.db import User | |
10 | from pylons_app.model.meta import Session, Base |
|
11 | from pylons_app.model.meta import Session, Base | |
11 |
|
12 | |||
12 | from pylons_app.lib.auth import get_crypt_password |
|
13 | from pylons_app.lib.auth import get_crypt_password | |
@@ -22,14 +23,14 b' log.addHandler(console_handler)' | |||||
22 | class DbManage(object): |
|
23 | class DbManage(object): | |
23 | def __init__(self, log_sql): |
|
24 | def __init__(self, log_sql): | |
24 | self.dbname = 'hg_app.db' |
|
25 | self.dbname = 'hg_app.db' | |
25 |
dburi = 'sqlite:////%s' % |
|
26 | dburi = 'sqlite:////%s' % jn(ROOT, self.dbname) | |
26 | engine = create_engine(dburi, echo=log_sql) |
|
27 | engine = create_engine(dburi, echo=log_sql) | |
27 | init_model(engine) |
|
28 | init_model(engine) | |
28 | self.sa = Session() |
|
29 | self.sa = Session() | |
29 |
|
30 | |||
30 | def check_for_db(self, override): |
|
31 | def check_for_db(self, override): | |
31 | log.info('checking for exisiting db') |
|
32 | log.info('checking for exisiting db') | |
32 |
if os.path.isfile( |
|
33 | if os.path.isfile(jn(ROOT, self.dbname)): | |
33 | log.info('database exisist') |
|
34 | log.info('database exisist') | |
34 | if not override: |
|
35 | if not override: | |
35 | raise Exception('database already exists') |
|
36 | raise Exception('database already exists') | |
@@ -41,6 +42,7 b' class DbManage(object):' | |||||
41 | self.check_for_db(override) |
|
42 | self.check_for_db(override) | |
42 | if override: |
|
43 | if override: | |
43 | log.info("database exisist and it's going to be destroyed") |
|
44 | log.info("database exisist and it's going to be destroyed") | |
|
45 | os.remove(jn(ROOT, self.dbname)) | |||
44 | Base.metadata.create_all(checkfirst=override) |
|
46 | Base.metadata.create_all(checkfirst=override) | |
45 | log.info('Created tables for %s', self.dbname) |
|
47 | log.info('Created tables for %s', self.dbname) | |
46 |
|
48 | |||
@@ -53,7 +55,7 b' class DbManage(object):' | |||||
53 | def create_user(self, username, password, admin=False): |
|
55 | def create_user(self, username, password, admin=False): | |
54 | log.info('creating administrator user %s', username) |
|
56 | log.info('creating administrator user %s', username) | |
55 |
|
57 | |||
56 |
new_user = User |
|
58 | new_user = User() | |
57 | new_user.username = username |
|
59 | new_user.username = username | |
58 | new_user.password = get_crypt_password(password) |
|
60 | new_user.password = get_crypt_password(password) | |
59 | new_user.admin = admin |
|
61 | new_user.admin = admin |
@@ -18,7 +18,7 b' from paste.httpheaders import REMOTE_USE' | |||||
18 | from pylons_app.lib.auth import authfunc |
|
18 | from pylons_app.lib.auth import authfunc | |
19 | from pylons_app.lib.utils import is_mercurial, make_ui, invalidate_cache |
|
19 | from pylons_app.lib.utils import is_mercurial, make_ui, invalidate_cache | |
20 | from pylons_app.model import meta |
|
20 | from pylons_app.model import meta | |
21 |
from pylons_app.model.db import UserLog |
|
21 | from pylons_app.model.db import UserLog, User | |
22 | from webob.exc import HTTPNotFound |
|
22 | from webob.exc import HTTPNotFound | |
23 | import logging |
|
23 | import logging | |
24 | import os |
|
24 | import os | |
@@ -102,9 +102,8 b' class SimpleHg(object):' | |||||
102 | def __log_user_action(self, username, action, repo): |
|
102 | def __log_user_action(self, username, action, repo): | |
103 | sa = meta.Session |
|
103 | sa = meta.Session | |
104 | try: |
|
104 | try: | |
105 |
user = sa.query(User |
|
105 | user = sa.query(User).filter(User.username == username).one() | |
106 | .filter(Users.username == username).one() |
|
106 | user_log = UserLog() | |
107 | user_log = UserLogs() |
|
|||
108 | user_log.user_id = user.user_id |
|
107 | user_log.user_id = user.user_id | |
109 | user_log.action = action |
|
108 | user_log.action = action | |
110 | user_log.repository = repo.replace('/', '') |
|
109 | user_log.repository = repo.replace('/', '') |
@@ -2,7 +2,7 b' from pylons_app.model.meta import Base' | |||||
2 | from sqlalchemy.orm import relation, backref |
|
2 | from sqlalchemy.orm import relation, backref | |
3 | from sqlalchemy import * |
|
3 | from sqlalchemy import * | |
4 |
|
4 | |||
5 |
class User |
|
5 | class User(Base): | |
6 | __tablename__ = 'users' |
|
6 | __tablename__ = 'users' | |
7 | __table_args__ = {'useexisting':True} |
|
7 | __table_args__ = {'useexisting':True} | |
8 | user_id = Column("user_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=1) |
|
8 | user_id = Column("user_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=1) | |
@@ -15,24 +15,27 b' class Users(Base):' | |||||
15 | email = Column("email", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
|
15 | email = Column("email", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
16 | last_login = Column("last_login", DATETIME(timezone=False), nullable=True, unique=None, default=None) |
|
16 | last_login = Column("last_login", DATETIME(timezone=False), nullable=True, unique=None, default=None) | |
17 |
|
17 | |||
18 |
user_log = relation('UserLog |
|
18 | user_log = relation('UserLog') | |
19 |
|
19 | |||
20 | def __repr__(self): |
|
20 | def __repr__(self): | |
21 | return "<User('%s:%s')>" % (self.user_id, self.username) |
|
21 | return "<User('%s:%s')>" % (self.user_id, self.username) | |
22 |
|
22 | |||
23 |
class UserLog |
|
23 | class UserLog(Base): | |
24 | __tablename__ = 'user_logs' |
|
24 | __tablename__ = 'user_logs' | |
25 | __table_args__ = {'useexisting':True} |
|
25 | __table_args__ = {'useexisting':True} | |
26 | user_log_id = Column("id", INTEGER(), nullable=False, unique=True, default=None, primary_key=1) |
|
26 | user_log_id = Column("user_log_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=1) | |
27 | user_id = Column("user_id", INTEGER(), ForeignKey(u'users.user_id'), nullable=True, unique=None, default=None) |
|
27 | user_id = Column("user_id", INTEGER(), ForeignKey(u'users.user_id'), nullable=True, unique=None, default=None) | |
28 | repository = Column("repository", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
|
28 | repository = Column("repository", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
29 | action = Column("action", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
|
29 | action = Column("action", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
30 | action_date = Column("action_date", DATETIME(timezone=False), nullable=True, unique=None, default=None) |
|
30 | action_date = Column("action_date", DATETIME(timezone=False), nullable=True, unique=None, default=None) | |
31 |
|
31 | |||
32 |
user = relation('User |
|
32 | user = relation('User') | |
33 |
|
33 | |||
|
34 | class Repository(Base): | |||
|
35 | __tablename__ = 'repositories' | |||
|
36 | repo_id = Column("repo_id", INTEGER(), nullable=False, unique=True, default=None, primary_key=1) | |||
34 |
|
37 | |||
35 |
class Permission |
|
38 | class Permission(Base): | |
36 | __tablename__ = 'permissions' |
|
39 | __tablename__ = 'permissions' | |
37 | __table_args__ = {'useexisting':True} |
|
40 | __table_args__ = {'useexisting':True} | |
38 | permission_id = Column("id", INTEGER(), nullable=False, unique=True, default=None, primary_key=1) |
|
41 | permission_id = Column("id", INTEGER(), nullable=False, unique=True, default=None, primary_key=1) |
@@ -24,7 +24,7 b' from pylons import session' | |||||
24 | from pylons.i18n.translation import _ |
|
24 | from pylons.i18n.translation import _ | |
25 | from pylons_app.lib.auth import get_crypt_password |
|
25 | from pylons_app.lib.auth import get_crypt_password | |
26 | from pylons_app.model import meta |
|
26 | from pylons_app.model import meta | |
27 |
from pylons_app.model.db import User |
|
27 | from pylons_app.model.db import User | |
28 | from sqlalchemy.exc import OperationalError |
|
28 | from sqlalchemy.exc import OperationalError | |
29 | from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound |
|
29 | from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound | |
30 | from webhelpers.pylonslib.secure_form import authentication_token |
|
30 | from webhelpers.pylonslib.secure_form import authentication_token | |
@@ -66,7 +66,7 b' class ValidAuth(formencode.validators.Fa' | |||||
66 | crypted_passwd = get_crypt_password(value['password']) |
|
66 | crypted_passwd = get_crypt_password(value['password']) | |
67 | username = value['username'] |
|
67 | username = value['username'] | |
68 | try: |
|
68 | try: | |
69 |
user = sa.query(User |
|
69 | user = sa.query(User).filter(User.username == username).one() | |
70 | except (NoResultFound, MultipleResultsFound, OperationalError) as e: |
|
70 | except (NoResultFound, MultipleResultsFound, OperationalError) as e: | |
71 | log.error(e) |
|
71 | log.error(e) | |
72 | user = None |
|
72 | user = None |
General Comments 0
You need to be logged in to leave comments.
Login now