annotate rhodecode/model/user.py @ 1731:31e6eb2fb4b2 beta

implements #222 registration feedback - a notification message is created for admins - email template with registartion
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 26 Nov 2011 21:13:33 +0200
parents da8ee2ef7f6d
children 48d4fcf04a29
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
1 # -*- coding: utf-8 -*-
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
2 """
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
3 rhodecode.model.user
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
4 ~~~~~~~~~~~~~~~~~~~~
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
5
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
6 users model for RhodeCode
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1120
diff changeset
7
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
8 :created_on: Apr 9, 2010
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
9 :author: marcink
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1120
diff changeset
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
11 :license: GPLv3, see COPYING for more details.
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
12 """
1206
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
13 # This program is free software: you can redistribute it and/or modify
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
14 # it under the terms of the GNU General Public License as published by
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
15 # the Free Software Foundation, either version 3 of the License, or
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
16 # (at your option) any later version.
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1120
diff changeset
17 #
252
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 238
diff changeset
18 # This program is distributed in the hope that it will be useful,
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 238
diff changeset
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 238
diff changeset
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 238
diff changeset
21 # GNU General Public License for more details.
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1120
diff changeset
22 #
252
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 238
diff changeset
23 # You should have received a copy of the GNU General Public License
1206
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
750
73c99f45ef2a fixed security issue when saving ldap user saved plaintext password
Marcin Kuzminski <marcin@python-works.com>
parents: 742
diff changeset
25
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
26 import logging
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
27 import traceback
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
28
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
29 from pylons import url
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
30 from pylons.i18n.translation import _
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
31
1516
582686d76cb6 fixes #256 fixes non ascii chars problems in base_dn on LDAP user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1417
diff changeset
32 from rhodecode.lib import safe_unicode
1669
f522f4d3bf93 moved caching query to libs
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
33 from rhodecode.lib.caching_query import FromCache
f522f4d3bf93 moved caching query to libs
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
34
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
35 from rhodecode.model import BaseModel
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1628
diff changeset
36 from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
37 UserToPerm, UsersGroupRepoToPerm, UsersGroupToPerm, UsersGroupMember, \
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
38 Notification
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
39 from rhodecode.lib.exceptions import DefaultUserException, \
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
40 UserOwnsReposException
713
1bb0fcdec895 fixed #72 show warning on removal when user still is owner of existing repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 705
diff changeset
41
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
42 from sqlalchemy.exc import DatabaseError
1116
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
43 from rhodecode.lib import generate_api_key
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
44 from sqlalchemy.orm import joinedload
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
45
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
46 log = logging.getLogger(__name__)
314
0d26d46bd370 protected againts changing default user.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
47
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
48
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
49 PERM_WEIGHTS = {'repository.none': 0,
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
50 'repository.read': 1,
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
51 'repository.write': 3,
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
52 'repository.admin': 3}
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
53
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
54
752
89b9037d68b7 fixed Example celery config to ampq,
Marcin Kuzminski <marcin@python-works.com>
parents: 750
diff changeset
55 class UserModel(BaseModel):
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
56
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
57 def get(self, user_id, cache=False):
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
58 user = self.sa.query(User)
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
59 if cache:
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
60 user = user.options(FromCache("sql_cache_short",
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
61 "get_user_%s" % user_id))
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
62 return user.get(user_id)
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
63
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
64 def get_by_username(self, username, cache=False, case_insensitive=False):
750
73c99f45ef2a fixed security issue when saving ldap user saved plaintext password
Marcin Kuzminski <marcin@python-works.com>
parents: 742
diff changeset
65
742
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
66 if case_insensitive:
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
67 user = self.sa.query(User).filter(User.username.ilike(username))
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
68 else:
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
69 user = self.sa.query(User)\
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
70 .filter(User.username == username)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
71 if cache:
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
72 user = user.options(FromCache("sql_cache_short",
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
73 "get_user_%s" % username))
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
74 return user.scalar()
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
75
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
76 def get_by_api_key(self, api_key, cache=False):
1693
60249224be04 fix for api key lookup, reuse same function in user model
Marcin Kuzminski <marcin@python-works.com>
parents: 1690
diff changeset
77 return User.get_by_api_key(api_key, cache)
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
78
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
79 def create(self, form_data):
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
80 try:
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
81 new_user = User()
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
82 for k, v in form_data.items():
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
83 setattr(new_user, k, v)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
84
1116
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
85 new_user.api_key = generate_api_key(form_data['username'])
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
86 self.sa.add(new_user)
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
87 self.sa.commit()
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents: 1417
diff changeset
88 return new_user
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
89 except:
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
90 log.error(traceback.format_exc())
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
91 self.sa.rollback()
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
92 raise
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
93
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
94
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
95 def create_or_update(self, username, password, email, name, lastname,
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
96 active=True, admin=False, ldap_dn=None):
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
97 """
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
98 Creates a new instance if not found, or updates current one
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
99
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
100 :param username:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
101 :param password:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
102 :param email:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
103 :param active:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
104 :param name:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
105 :param lastname:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
106 :param active:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
107 :param admin:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
108 :param ldap_dn:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
109 """
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
110
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
111 from rhodecode.lib.auth import get_crypt_password
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
112
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
113 log.debug('Checking for %s account in RhodeCode database', username)
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
114 user = User.get_by_username(username, case_insensitive=True)
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
115 if user is None:
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
116 log.debug('creating new user %s', username)
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
117 new_user = User()
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
118 else:
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
119 log.debug('updating user %s', username)
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
120 new_user = user
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
121
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
122 try:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
123 new_user.username = username
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
124 new_user.admin = admin
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
125 new_user.password = get_crypt_password(password)
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
126 new_user.api_key = generate_api_key(username)
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
127 new_user.email = email
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
128 new_user.active = active
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
129 new_user.ldap_dn = safe_unicode(ldap_dn) if ldap_dn else None
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
130 new_user.name = name
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
131 new_user.lastname = lastname
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
132
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
133 self.sa.add(new_user)
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
134 self.sa.commit()
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
135 return new_user
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
136 except (DatabaseError,):
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
137 log.error(traceback.format_exc())
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
138 self.sa.rollback()
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
139 raise
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
140
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
141
1621
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
142 def create_for_container_auth(self, username, attrs):
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
143 """
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
144 Creates the given user if it's not already in the database
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
145
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
146 :param username:
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
147 :param attrs:
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
148 """
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
149 if self.get_by_username(username, case_insensitive=True) is None:
1690
6944b1249f28 fixed issues with not unique emails when using ldap or container auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1689
diff changeset
150
6944b1249f28 fixed issues with not unique emails when using ldap or container auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1689
diff changeset
151 # autogenerate email for container account without one
6944b1249f28 fixed issues with not unique emails when using ldap or container auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1689
diff changeset
152 generate_email = lambda usr: '%s@container_auth.account' % usr
6944b1249f28 fixed issues with not unique emails when using ldap or container auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1689
diff changeset
153
1621
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
154 try:
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
155 new_user = User()
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
156 new_user.username = username
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
157 new_user.password = None
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
158 new_user.api_key = generate_api_key(username)
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
159 new_user.email = attrs['email']
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
160 new_user.active = attrs.get('active', True)
1690
6944b1249f28 fixed issues with not unique emails when using ldap or container auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1689
diff changeset
161 new_user.name = attrs['name'] or generate_email(username)
1621
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
162 new_user.lastname = attrs['lastname']
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
163
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
164 self.sa.add(new_user)
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
165 self.sa.commit()
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
166 return new_user
1621
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
167 except (DatabaseError,):
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
168 log.error(traceback.format_exc())
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
169 self.sa.rollback()
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
170 raise
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
171 log.debug('User %s already exists. Skipping creation of account'
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
172 ' for container auth.', username)
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
173 return None
1621
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
174
991
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 956
diff changeset
175 def create_ldap(self, username, password, user_dn, attrs):
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
176 """
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
177 Checks if user is in database, if not creates this user marked
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
178 as ldap user
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
179
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
180 :param username:
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
181 :param password:
991
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 956
diff changeset
182 :param user_dn:
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 956
diff changeset
183 :param attrs:
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
184 """
750
73c99f45ef2a fixed security issue when saving ldap user saved plaintext password
Marcin Kuzminski <marcin@python-works.com>
parents: 742
diff changeset
185 from rhodecode.lib.auth import get_crypt_password
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
186 log.debug('Checking for such ldap account in RhodeCode database')
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
187 if self.get_by_username(username, case_insensitive=True) is None:
1689
cc302c98bb8e fix fo empty email passed in attributes of ldap account.
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
188
cc302c98bb8e fix fo empty email passed in attributes of ldap account.
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
189 # autogenerate email for ldap account without one
cc302c98bb8e fix fo empty email passed in attributes of ldap account.
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
190 generate_email = lambda usr: '%s@ldap.account' % usr
cc302c98bb8e fix fo empty email passed in attributes of ldap account.
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
191
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
192 try:
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
193 new_user = User()
1689
cc302c98bb8e fix fo empty email passed in attributes of ldap account.
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
194 username = username.lower()
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
195 # add ldap account always lowercase
1689
cc302c98bb8e fix fo empty email passed in attributes of ldap account.
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
196 new_user.username = username
750
73c99f45ef2a fixed security issue when saving ldap user saved plaintext password
Marcin Kuzminski <marcin@python-works.com>
parents: 742
diff changeset
197 new_user.password = get_crypt_password(password)
1116
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
198 new_user.api_key = generate_api_key(username)
1689
cc302c98bb8e fix fo empty email passed in attributes of ldap account.
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
199 new_user.email = attrs['email'] or generate_email(username)
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
200 new_user.active = attrs.get('active', True)
1516
582686d76cb6 fixes #256 fixes non ascii chars problems in base_dn on LDAP user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1417
diff changeset
201 new_user.ldap_dn = safe_unicode(user_dn)
991
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 956
diff changeset
202 new_user.name = attrs['name']
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 956
diff changeset
203 new_user.lastname = attrs['lastname']
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
204
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
205 self.sa.add(new_user)
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
206 self.sa.commit()
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
207 return new_user
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
208 except (DatabaseError,):
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
209 log.error(traceback.format_exc())
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
210 self.sa.rollback()
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
211 raise
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
212 log.debug('this %s user exists skipping creation of ldap account',
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
213 username)
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
214 return None
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
215
363
98abf8953b87 Added user registration, changed login url schema, moved it into _admin/ for safety
Marcin Kuzminski <marcin@python-works.com>
parents: 347
diff changeset
216 def create_registration(self, form_data):
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
217 from rhodecode.model.notification import NotificationModel
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
218
363
98abf8953b87 Added user registration, changed login url schema, moved it into _admin/ for safety
Marcin Kuzminski <marcin@python-works.com>
parents: 347
diff changeset
219 try:
98abf8953b87 Added user registration, changed login url schema, moved it into _admin/ for safety
Marcin Kuzminski <marcin@python-works.com>
parents: 347
diff changeset
220 new_user = User()
98abf8953b87 Added user registration, changed login url schema, moved it into _admin/ for safety
Marcin Kuzminski <marcin@python-works.com>
parents: 347
diff changeset
221 for k, v in form_data.items():
417
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 371
diff changeset
222 if k != 'admin':
363
98abf8953b87 Added user registration, changed login url schema, moved it into _admin/ for safety
Marcin Kuzminski <marcin@python-works.com>
parents: 347
diff changeset
223 setattr(new_user, k, v)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
224
363
98abf8953b87 Added user registration, changed login url schema, moved it into _admin/ for safety
Marcin Kuzminski <marcin@python-works.com>
parents: 347
diff changeset
225 self.sa.add(new_user)
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
226 self.sa.flush()
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
227
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
228 # notification to admins
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
229 subject = _('new user registration')
689
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 686
diff changeset
230 body = ('New user registration\n'
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
231 '---------------------\n'
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
232 '- Username: %s\n'
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
233 '- Full Name: %s\n'
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
234 '- Email: %s\n')
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
235 body = body % (new_user.username, new_user.full_name,
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
236 new_user.email)
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
237 edit_url = url('edit_user', id=new_user.user_id, qualified=True)
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
238 kw = {'registered_user_url':edit_url}
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
239 NotificationModel().create(created_by=new_user, subject=subject,
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
240 body=body, recipients=None,
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
241 type_=Notification.TYPE_REGISTRATION,
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
242 email_kwargs=kw)
689
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 686
diff changeset
243
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
244 except:
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
245 log.error(traceback.format_exc())
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
246 raise
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
247
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
248 def update(self, user_id, form_data):
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
249 try:
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
250 user = self.get(user_id, cache=False)
1116
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
251 if user.username == 'default':
314
0d26d46bd370 protected againts changing default user.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
252 raise DefaultUserException(
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
253 _("You can't Edit this user since it's"
314
0d26d46bd370 protected againts changing default user.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
254 " crucial for entire application"))
713
1bb0fcdec895 fixed #72 show warning on removal when user still is owner of existing repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 705
diff changeset
255
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
256 for k, v in form_data.items():
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
257 if k == 'new_password' and v != '':
1116
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
258 user.password = v
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
259 user.api_key = generate_api_key(user.username)
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
260 else:
1116
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
261 setattr(user, k, v)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
262
1116
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
263 self.sa.add(user)
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
264 self.sa.commit()
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
265 except:
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
266 log.error(traceback.format_exc())
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
267 self.sa.rollback()
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
268 raise
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
269
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
270 def update_my_account(self, user_id, form_data):
371
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
271 try:
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
272 user = self.get(user_id, cache=False)
1116
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
273 if user.username == 'default':
371
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
274 raise DefaultUserException(
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
275 _("You can't Edit this user since it's"
371
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
276 " crucial for entire application"))
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
277 for k, v in form_data.items():
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
278 if k == 'new_password' and v != '':
1116
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
279 user.password = v
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
280 user.api_key = generate_api_key(user.username)
371
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
281 else:
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
282 if k not in ['admin', 'active']:
1116
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
283 setattr(user, k, v)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
284
1116
716911af91e1 Added api_key into user, api key get's generated again after password change
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
285 self.sa.add(user)
371
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
286 self.sa.commit()
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
287 except:
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
288 log.error(traceback.format_exc())
371
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
289 self.sa.rollback()
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
290 raise
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
291
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
292 def delete(self, user_id):
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 252
diff changeset
293 try:
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
294 user = self.get(user_id, cache=False)
314
0d26d46bd370 protected againts changing default user.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
295 if user.username == 'default':
0d26d46bd370 protected againts changing default user.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
296 raise DefaultUserException(
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
297 _("You can't remove this user since it's"
314
0d26d46bd370 protected againts changing default user.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
298 " crucial for entire application"))
713
1bb0fcdec895 fixed #72 show warning on removal when user still is owner of existing repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 705
diff changeset
299 if user.repositories:
1bb0fcdec895 fixed #72 show warning on removal when user still is owner of existing repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 705
diff changeset
300 raise UserOwnsReposException(_('This user still owns %s '
1bb0fcdec895 fixed #72 show warning on removal when user still is owner of existing repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 705
diff changeset
301 'repositories and cannot be '
1bb0fcdec895 fixed #72 show warning on removal when user still is owner of existing repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 705
diff changeset
302 'removed. Switch owners or '
1bb0fcdec895 fixed #72 show warning on removal when user still is owner of existing repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 705
diff changeset
303 'remove those repositories') \
1bb0fcdec895 fixed #72 show warning on removal when user still is owner of existing repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 705
diff changeset
304 % user.repositories)
314
0d26d46bd370 protected againts changing default user.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
305 self.sa.delete(user)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
306 self.sa.commit()
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
307 except:
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
308 log.error(traceback.format_exc())
265
0e5455fda8fd Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 252
diff changeset
309 self.sa.rollback()
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
310 raise
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
311
1417
5875955def39 fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents: 1270
diff changeset
312 def reset_password_link(self, data):
5875955def39 fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents: 1270
diff changeset
313 from rhodecode.lib.celerylib import tasks, run_task
5875955def39 fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents: 1270
diff changeset
314 run_task(tasks.send_password_link, data['email'])
5875955def39 fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents: 1270
diff changeset
315
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
316 def reset_password(self, data):
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
317 from rhodecode.lib.celerylib import tasks, run_task
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
318 run_task(tasks.reset_user_password, data['email'])
673
dd532af216d9 #49 Enabled anonymous access for web interface controllable from permissions pannel
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
319
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
320 def fill_data(self, auth_user, user_id=None, api_key=None):
673
dd532af216d9 #49 Enabled anonymous access for web interface controllable from permissions pannel
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
321 """
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
322 Fetches auth_user by user_id,or api_key if present.
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
323 Fills auth_user attributes with those taken from database.
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1120
diff changeset
324 Additionally set's is_authenitated if lookup fails
673
dd532af216d9 #49 Enabled anonymous access for web interface controllable from permissions pannel
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
325 present in database
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1120
diff changeset
326
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
327 :param auth_user: instance of user to set attributes
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
328 :param user_id: user id to fetch by
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
329 :param api_key: api key to fetch by
673
dd532af216d9 #49 Enabled anonymous access for web interface controllable from permissions pannel
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
330 """
1120
a8d759613d8f fixed some bugs in api key auth, added access by api key into rss/atom feeds in global journal
Marcin Kuzminski <marcin@python-works.com>
parents: 1117
diff changeset
331 if user_id is None and api_key is None:
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
332 raise Exception('You need to pass user_id or api_key')
686
ff6a8196ebfe fixed anonymous access bug.
Marcin Kuzminski <marcin@python-works.com>
parents: 673
diff changeset
333
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
334 try:
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
335 if api_key:
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
336 dbuser = self.get_by_api_key(api_key)
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
337 else:
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
338 dbuser = self.get(user_id)
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
339
1618
9353189b7675 Added automatic logout of deactivated/deleted users
Liad Shani <liadff@gmail.com>
parents: 1594
diff changeset
340 if dbuser is not None and dbuser.active:
1120
a8d759613d8f fixed some bugs in api key auth, added access by api key into rss/atom feeds in global journal
Marcin Kuzminski <marcin@python-works.com>
parents: 1117
diff changeset
341 log.debug('filling %s data', dbuser)
a8d759613d8f fixed some bugs in api key auth, added access by api key into rss/atom feeds in global journal
Marcin Kuzminski <marcin@python-works.com>
parents: 1117
diff changeset
342 for k, v in dbuser.get_dict().items():
a8d759613d8f fixed some bugs in api key auth, added access by api key into rss/atom feeds in global journal
Marcin Kuzminski <marcin@python-works.com>
parents: 1117
diff changeset
343 setattr(auth_user, k, v)
1618
9353189b7675 Added automatic logout of deactivated/deleted users
Liad Shani <liadff@gmail.com>
parents: 1594
diff changeset
344 else:
9353189b7675 Added automatic logout of deactivated/deleted users
Liad Shani <liadff@gmail.com>
parents: 1594
diff changeset
345 return False
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
346
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
347 except:
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
348 log.error(traceback.format_exc())
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
349 auth_user.is_authenticated = False
1618
9353189b7675 Added automatic logout of deactivated/deleted users
Liad Shani <liadff@gmail.com>
parents: 1594
diff changeset
350 return False
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
351
1618
9353189b7675 Added automatic logout of deactivated/deleted users
Liad Shani <liadff@gmail.com>
parents: 1594
diff changeset
352 return True
686
ff6a8196ebfe fixed anonymous access bug.
Marcin Kuzminski <marcin@python-works.com>
parents: 673
diff changeset
353
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
354 def fill_perms(self, user):
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
355 """
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
356 Fills user permission attribute with permissions taken from database
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
357 works for permissions given for repositories, and for permissions that
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
358 are granted to groups
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1120
diff changeset
359
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
360 :param user: user instance to fill his perms
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
361 """
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
362
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
363 user.permissions['repositories'] = {}
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
364 user.permissions['global'] = set()
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
365
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
366 #======================================================================
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
367 # fetch default permissions
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
368 #======================================================================
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
369 default_user = User.get_by_username('default', cache=True)
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
370 default_user_id = default_user.user_id
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
371
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
372 default_perms = Permission.get_default_perms(default_user_id)
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
373
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
374 if user.is_admin:
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
375 #==================================================================
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1120
diff changeset
376 # #admin have all default rights set to admin
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
377 #==================================================================
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
378 user.permissions['global'].add('hg.admin')
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
379
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
380 for perm in default_perms:
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
381 p = 'repository.admin'
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1628
diff changeset
382 user.permissions['repositories'][perm.UserRepoToPerm.
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
383 repository.repo_name] = p
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
384
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
385 else:
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
386 #==================================================================
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
387 # set default permissions
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
388 #==================================================================
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
389 uid = user.user_id
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
390
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
391 # default global
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
392 default_global_perms = self.sa.query(UserToPerm)\
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
393 .filter(UserToPerm.user_id == default_user_id)
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
394
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
395 for perm in default_global_perms:
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
396 user.permissions['global'].add(perm.permission.permission_name)
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
397
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
398 # default for repositories
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
399 for perm in default_perms:
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
400 if perm.Repository.private and not (perm.Repository.user_id ==
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
401 uid):
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
402 # disable defaults for private repos,
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
403 p = 'repository.none'
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
404 elif perm.Repository.user_id == uid:
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
405 # set admin if owner
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
406 p = 'repository.admin'
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
407 else:
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
408 p = perm.Permission.permission_name
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
409
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1628
diff changeset
410 user.permissions['repositories'][perm.UserRepoToPerm.
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
411 repository.repo_name] = p
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
412
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
413 #==================================================================
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
414 # overwrite default with user permissions if any
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
415 #==================================================================
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
416
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
417 # user global
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
418 user_perms = self.sa.query(UserToPerm)\
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
419 .options(joinedload(UserToPerm.permission))\
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
420 .filter(UserToPerm.user_id == uid).all()
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
421
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
422 for perm in user_perms:
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
423 user.permissions['global'].add(perm.permission.permission_name)
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
424
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
425 # user repositories
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1628
diff changeset
426 user_repo_perms = self.sa.query(UserRepoToPerm, Permission,
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
427 Repository)\
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1628
diff changeset
428 .join((Repository, UserRepoToPerm.repository_id ==
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
429 Repository.repo_id))\
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1628
diff changeset
430 .join((Permission, UserRepoToPerm.permission_id ==
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
431 Permission.permission_id))\
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1628
diff changeset
432 .filter(UserRepoToPerm.user_id == uid).all()
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
433
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
434 for perm in user_repo_perms:
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
435 # set admin if owner
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
436 if perm.Repository.user_id == uid:
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
437 p = 'repository.admin'
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
438 else:
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
439 p = perm.Permission.permission_name
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1628
diff changeset
440 user.permissions['repositories'][perm.UserRepoToPerm.
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
441 repository.repo_name] = p
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
442
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
443 #==================================================================
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1120
diff changeset
444 # check if user is part of groups for this repository and fill in
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
445 # (or replace with higher) permissions
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
446 #==================================================================
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
447
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
448 # users group global
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
449 user_perms_from_users_groups = self.sa.query(UsersGroupToPerm)\
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
450 .options(joinedload(UsersGroupToPerm.permission))\
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
451 .join((UsersGroupMember, UsersGroupToPerm.users_group_id ==
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
452 UsersGroupMember.users_group_id))\
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
453 .filter(UsersGroupMember.user_id == uid).all()
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
454
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
455 for perm in user_perms_from_users_groups:
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
456 user.permissions['global'].add(perm.permission.permission_name)
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
457
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
458 # users group repositories
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
459 user_repo_perms_from_users_groups = self.sa.query(
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
460 UsersGroupRepoToPerm,
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
461 Permission, Repository,)\
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
462 .join((Repository, UsersGroupRepoToPerm.repository_id ==
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
463 Repository.repo_id))\
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
464 .join((Permission, UsersGroupRepoToPerm.permission_id ==
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
465 Permission.permission_id))\
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
466 .join((UsersGroupMember, UsersGroupRepoToPerm.users_group_id ==
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
467 UsersGroupMember.users_group_id))\
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
468 .filter(UsersGroupMember.user_id == uid).all()
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
469
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
470 for perm in user_repo_perms_from_users_groups:
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
471 p = perm.Permission.permission_name
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
472 cur_perm = user.permissions['repositories'][perm.
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
473 UsersGroupRepoToPerm.
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
474 repository.repo_name]
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
475 # overwrite permission only if it's greater than permission
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
476 # given from other sources
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
477 if PERM_WEIGHTS[p] > PERM_WEIGHTS[cur_perm]:
1269
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
478 user.permissions['repositories'][perm.UsersGroupRepoToPerm.
2e7f21429316 tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id
Marcin Kuzminski <marcin@python-works.com>
parents: 1267
diff changeset
479 repository.repo_name] = p
673
dd532af216d9 #49 Enabled anonymous access for web interface controllable from permissions pannel
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
480
dd532af216d9 #49 Enabled anonymous access for web interface controllable from permissions pannel
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
481 return user
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
482