annotate rhodecode/model/user.py @ 2544:6ce3387bf0ce beta

Renamed name to firstname in forms - added multiple test for edit my account and edit user from admin - fixed issues with update user accounts from admin
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 04 Jul 2012 18:13:25 +0200
parents 17893d61792a
children 001c7e2ae986
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
1824
89efedac4e6c 2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
10 :copyright: (C) 2010-2012 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
2479
9225597688f4 Added validation into user email map
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
32 from sqlalchemy.exc import DatabaseError
9225597688f4 Added validation into user email map
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
33 from sqlalchemy.orm import joinedload
9225597688f4 Added validation into user email map
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
34
2109
8ecfed1d8f8b utils/conf
Marcin Kuzminski <marcin@python-works.com>
parents: 2078
diff changeset
35 from rhodecode.lib.utils2 import safe_unicode, generate_api_key
1669
f522f4d3bf93 moved caching query to libs
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
36 from rhodecode.lib.caching_query import FromCache
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
37 from rhodecode.model import BaseModel
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1628
diff changeset
38 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
39 UserToPerm, UsersGroupRepoToPerm, UsersGroupToPerm, UsersGroupMember, \
2432
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 2330
diff changeset
40 Notification, RepoGroup, UserRepoGroupToPerm, UsersGroupRepoGroupToPerm, \
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 2330
diff changeset
41 UserEmailMap
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
42 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
43 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
44
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
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
49 PERM_WEIGHTS = {
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
50 'repository.none': 0,
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
51 'repository.read': 1,
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
52 'repository.write': 3,
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
53 'repository.admin': 4,
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
54 'group.none': 0,
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
55 'group.read': 1,
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
56 'group.write': 3,
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
57 'group.admin': 4,
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
58 }
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
59
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
60
752
89b9037d68b7 fixed Example celery config to ampq,
Marcin Kuzminski <marcin@python-works.com>
parents: 750
diff changeset
61 class UserModel(BaseModel):
2522
17893d61792a Added associated classes into child models
Marcin Kuzminski <marcin@python-works.com>
parents: 2513
diff changeset
62 cls = User
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
63
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
64 def get(self, user_id, cache=False):
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
65 user = self.sa.query(User)
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
66 if cache:
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
67 user = user.options(FromCache("sql_cache_short",
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
68 "get_user_%s" % user_id))
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
69 return user.get(user_id)
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
70
2009
b63adad7c4af API updates
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
71 def get_user(self, user):
2432
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 2330
diff changeset
72 return self._get_user(user)
2009
b63adad7c4af API updates
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
73
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
74 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
75
742
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
76 if case_insensitive:
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
77 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
78 else:
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
79 user = self.sa.query(User)\
1377a9d4bdb9 #78, fixed more reliable case insensitive searches
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
80 .filter(User.username == username)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
81 if cache:
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
82 user = user.options(FromCache("sql_cache_short",
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
83 "get_user_%s" % username))
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
84 return user.scalar()
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
85
2522
17893d61792a Added associated classes into child models
Marcin Kuzminski <marcin@python-works.com>
parents: 2513
diff changeset
86 def get_by_email(self, email, cache=False, case_insensitive=False):
17893d61792a Added associated classes into child models
Marcin Kuzminski <marcin@python-works.com>
parents: 2513
diff changeset
87 return User.get_by_email(email, case_insensitive, cache)
17893d61792a Added associated classes into child models
Marcin Kuzminski <marcin@python-works.com>
parents: 2513
diff changeset
88
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
89 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
90 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
91
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
92 def create(self, form_data):
2467
4419551b2915 Switched forms to new validators
Marcin Kuzminski <marcin@python-works.com>
parents: 2432
diff changeset
93 from rhodecode.lib.auth import get_crypt_password
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
94 try:
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
95 new_user = User()
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
96 for k, v in form_data.items():
2467
4419551b2915 Switched forms to new validators
Marcin Kuzminski <marcin@python-works.com>
parents: 2432
diff changeset
97 if k == 'password':
4419551b2915 Switched forms to new validators
Marcin Kuzminski <marcin@python-works.com>
parents: 2432
diff changeset
98 v = get_crypt_password(v)
2544
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
99 if k == 'firstname':
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
100 k = 'name'
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
101 setattr(new_user, k, v)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
102
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
103 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
104 self.sa.add(new_user)
1586
2ccb32ddcfd7 Add API for repositories and groups (creation, permission)
Nicolas VINOT <aeris@imirhil.fr>
parents: 1417
diff changeset
105 return new_user
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
106 except:
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
107 log.error(traceback.format_exc())
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
108 raise
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
109
2513
388843a3a3c0 Updated create_or_update method to not change API key when password is not updated
Marcin Kuzminski <marcin@python-works.com>
parents: 2488
diff changeset
110 def create_or_update(self, username, password, email, firstname='',
388843a3a3c0 Updated create_or_update method to not change API key when password is not updated
Marcin Kuzminski <marcin@python-works.com>
parents: 2488
diff changeset
111 lastname='', active=True, admin=False, ldap_dn=None):
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
112 """
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
113 Creates a new instance if not found, or updates current one
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
114
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
115 :param username:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
116 :param password:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
117 :param email:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
118 :param active:
2513
388843a3a3c0 Updated create_or_update method to not change API key when password is not updated
Marcin Kuzminski <marcin@python-works.com>
parents: 2488
diff changeset
119 :param firstname:
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
120 :param lastname:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
121 :param active:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
122 :param admin:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
123 :param ldap_dn:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
124 """
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
125
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
126 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
127
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
128 log.debug('Checking for %s account in RhodeCode database' % username)
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
129 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
130 if user is None:
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
131 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
132 new_user = User()
2513
388843a3a3c0 Updated create_or_update method to not change API key when password is not updated
Marcin Kuzminski <marcin@python-works.com>
parents: 2488
diff changeset
133 edit = False
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
134 else:
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
135 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
136 new_user = user
2513
388843a3a3c0 Updated create_or_update method to not change API key when password is not updated
Marcin Kuzminski <marcin@python-works.com>
parents: 2488
diff changeset
137 edit = True
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
138
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
139 try:
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
140 new_user.username = username
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
141 new_user.admin = admin
2513
388843a3a3c0 Updated create_or_update method to not change API key when password is not updated
Marcin Kuzminski <marcin@python-works.com>
parents: 2488
diff changeset
142 # set password only if creating an user or password is changed
388843a3a3c0 Updated create_or_update method to not change API key when password is not updated
Marcin Kuzminski <marcin@python-works.com>
parents: 2488
diff changeset
143 if edit is False or user.password != password:
388843a3a3c0 Updated create_or_update method to not change API key when password is not updated
Marcin Kuzminski <marcin@python-works.com>
parents: 2488
diff changeset
144 new_user.password = get_crypt_password(password)
388843a3a3c0 Updated create_or_update method to not change API key when password is not updated
Marcin Kuzminski <marcin@python-works.com>
parents: 2488
diff changeset
145 new_user.api_key = generate_api_key(username)
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
146 new_user.email = email
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
147 new_user.active = active
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
148 new_user.ldap_dn = safe_unicode(ldap_dn) if ldap_dn else None
2513
388843a3a3c0 Updated create_or_update method to not change API key when password is not updated
Marcin Kuzminski <marcin@python-works.com>
parents: 2488
diff changeset
149 new_user.name = firstname
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
150 new_user.lastname = lastname
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
151 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
152 return new_user
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
153 except (DatabaseError,):
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
154 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
155 raise
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
156
1621
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
157 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
158 """
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
159 Creates the given user if it's not already in the database
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
160
1621
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
161 :param username:
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
162 :param attrs:
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 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
165
6944b1249f28 fixed issues with not unique emails when using ldap or container auth.
Marcin Kuzminski <marcin@python-works.com>
parents: 1689
diff changeset
166 # 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
167 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
168
1621
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
169 try:
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
170 new_user = User()
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
171 new_user.username = username
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
172 new_user.password = None
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
173 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
174 new_user.email = attrs['email']
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
175 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
176 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
177 new_user.lastname = attrs['lastname']
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
178
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
179 self.sa.add(new_user)
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
180 return new_user
1621
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
181 except (DatabaseError,):
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
182 log.error(traceback.format_exc())
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
183 self.sa.rollback()
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
184 raise
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
185 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
186 ' for container auth.', username)
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
187 return None
1621
cbc2b1913cdf Added basic automatic user creation for container auth
Liad Shani <liadff@gmail.com>
parents: 1618
diff changeset
188
991
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 956
diff changeset
189 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
190 """
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
191 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
192 as ldap user
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
193
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
194 :param username:
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
195 :param password:
991
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 956
diff changeset
196 :param user_dn:
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 956
diff changeset
197 :param attrs:
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
198 """
750
73c99f45ef2a fixed security issue when saving ldap user saved plaintext password
Marcin Kuzminski <marcin@python-works.com>
parents: 742
diff changeset
199 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
200 log.debug('Checking for such ldap account in RhodeCode database')
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
201 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
202
cc302c98bb8e fix fo empty email passed in attributes of ldap account.
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
203 # 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
204 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
205
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
206 try:
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
207 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
208 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
209 # 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
210 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
211 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
212 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
213 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
214 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
215 new_user.ldap_dn = safe_unicode(user_dn)
991
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 956
diff changeset
216 new_user.name = attrs['name']
b232a36cc51f Improve LDAP authentication
Thayne Harbaugh <thayne@fusionio.com>
parents: 956
diff changeset
217 new_user.lastname = attrs['lastname']
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
218
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
219 self.sa.add(new_user)
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
220 return new_user
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
221 except (DatabaseError,):
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
222 log.error(traceback.format_exc())
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
223 self.sa.rollback()
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
224 raise
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 752
diff changeset
225 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
226 username)
1628
de71a4bde097 Some code cleanups and fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1626
diff changeset
227 return None
705
9e9f1b919c0c implements #60, ldap configuration and authentication.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
228
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
229 def create_registration(self, form_data):
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
230 from rhodecode.model.notification import NotificationModel
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
231
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
232 try:
2248
72542dc597be fixed issue with empty APIKEYS on registration #438
Marcin Kuzminski <marcin@python-works.com>
parents: 2186
diff changeset
233 form_data['admin'] = False
72542dc597be fixed issue with empty APIKEYS on registration #438
Marcin Kuzminski <marcin@python-works.com>
parents: 2186
diff changeset
234 new_user = self.create(form_data)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
235
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
236 self.sa.add(new_user)
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
237 self.sa.flush()
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
238
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
239 # notification to admins
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
240 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
241 body = ('New user registration\n'
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
242 '---------------------\n'
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
243 '- Username: %s\n'
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
244 '- Full Name: %s\n'
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
245 '- Email: %s\n')
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
246 body = body % (new_user.username, new_user.full_name,
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
247 new_user.email)
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
248 edit_url = url('edit_user', id=new_user.user_id, qualified=True)
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
249 kw = {'registered_user_url': edit_url}
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
250 NotificationModel().create(created_by=new_user, subject=subject,
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
251 body=body, recipients=None,
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
252 type_=Notification.TYPE_REGISTRATION,
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
253 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
254
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
255 except:
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
256 log.error(traceback.format_exc())
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
257 raise
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
258
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
259 def update(self, user_id, form_data):
2488
b5b34d71b23b fix crypt password on update my account
Marcin Kuzminski <marcin@python-works.com>
parents: 2479
diff changeset
260 from rhodecode.lib.auth import get_crypt_password
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
261 try:
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
262 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
263 if user.username == 'default':
314
0d26d46bd370 protected againts changing default user.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
264 raise DefaultUserException(
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
265 _("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
266 " 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
267
238
a55c17874486 Rewrite of user managment, improved forms, added some user info
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
268 for k, v in form_data.items():
2544
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
269 if k == 'new_password' and v:
2488
b5b34d71b23b fix crypt password on update my account
Marcin Kuzminski <marcin@python-works.com>
parents: 2479
diff changeset
270 user.password = get_crypt_password(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
271 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
272 else:
2544
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
273 if k == 'firstname':
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
274 k = 'name'
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
275 setattr(user, k, 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
276 self.sa.add(user)
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
277 except:
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
278 log.error(traceback.format_exc())
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
279 raise
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
280
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
281 def update_my_account(self, user_id, form_data):
2467
4419551b2915 Switched forms to new validators
Marcin Kuzminski <marcin@python-works.com>
parents: 2432
diff changeset
282 from rhodecode.lib.auth import get_crypt_password
371
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
283 try:
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
284 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
285 if user.username == 'default':
371
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
286 raise DefaultUserException(
2467
4419551b2915 Switched forms to new validators
Marcin Kuzminski <marcin@python-works.com>
parents: 2432
diff changeset
287 _("You can't Edit this user since it's"
4419551b2915 Switched forms to new validators
Marcin Kuzminski <marcin@python-works.com>
parents: 2432
diff changeset
288 " crucial for entire application")
4419551b2915 Switched forms to new validators
Marcin Kuzminski <marcin@python-works.com>
parents: 2432
diff changeset
289 )
371
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
290 for k, v in form_data.items():
2544
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
291 if k == 'new_password' and v:
2467
4419551b2915 Switched forms to new validators
Marcin Kuzminski <marcin@python-works.com>
parents: 2432
diff changeset
292 user.password = get_crypt_password(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
293 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
294 else:
2544
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
295 if k == 'firstname':
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
296 k = 'name'
371
5cd6616b8673 routes python 2.5 compatible
Marcin Kuzminski <marcin@python-works.com>
parents: 363
diff changeset
297 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
298 setattr(user, k, v)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
299
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
300 self.sa.add(user)
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
301 except:
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
302 log.error(traceback.format_exc())
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
303 raise
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
304
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
305 def delete(self, user):
2432
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 2330
diff changeset
306 user = self._get_user(user)
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
307
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
308 try:
314
0d26d46bd370 protected againts changing default user.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
309 if user.username == 'default':
0d26d46bd370 protected againts changing default user.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
310 raise DefaultUserException(
2153
fa637dc3e029 Improved message about deleting user who owns repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 2150
diff changeset
311 _(u"You can't remove this user since it's"
2124
273ce1a99c3f fixed #397 Private repository groups shows up before login
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
312 " crucial for entire application")
273ce1a99c3f fixed #397 Private repository groups shows up before login
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
313 )
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
314 if user.repositories:
2153
fa637dc3e029 Improved message about deleting user who owns repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 2150
diff changeset
315 repos = [x.repo_name for x in user.repositories]
2124
273ce1a99c3f fixed #397 Private repository groups shows up before login
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
316 raise UserOwnsReposException(
2153
fa637dc3e029 Improved message about deleting user who owns repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 2150
diff changeset
317 _(u'user "%s" still owns %s repositories and cannot be '
fa637dc3e029 Improved message about deleting user who owns repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 2150
diff changeset
318 'removed. Switch owners or remove those repositories. %s')
fa637dc3e029 Improved message about deleting user who owns repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 2150
diff changeset
319 % (user.username, len(repos), ', '.join(repos))
2124
273ce1a99c3f fixed #397 Private repository groups shows up before login
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
320 )
314
0d26d46bd370 protected againts changing default user.
Marcin Kuzminski <marcin@python-works.com>
parents: 265
diff changeset
321 self.sa.delete(user)
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
322 except:
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
323 log.error(traceback.format_exc())
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
324 raise
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
325
1417
5875955def39 fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents: 1270
diff changeset
326 def reset_password_link(self, data):
5875955def39 fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents: 1270
diff changeset
327 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
328 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
329
474
a3d9d24acbec Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents: 442
diff changeset
330 def reset_password(self, data):
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
331 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
332 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
333
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
334 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
335 """
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
336 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
337 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
338 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
339 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
340
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
341 :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
342 :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
343 :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
344 """
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
345 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
346 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
347
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
348 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
349 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
350 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
351 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
352 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
353
1618
9353189b7675 Added automatic logout of deactivated/deleted users
Liad Shani <liadff@gmail.com>
parents: 1594
diff changeset
354 if dbuser is not None and dbuser.active:
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
355 log.debug('filling %s data' % dbuser)
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
356 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
357 setattr(auth_user, k, v)
1618
9353189b7675 Added automatic logout of deactivated/deleted users
Liad Shani <liadff@gmail.com>
parents: 1594
diff changeset
358 else:
9353189b7675 Added automatic logout of deactivated/deleted users
Liad Shani <liadff@gmail.com>
parents: 1594
diff changeset
359 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
360
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 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
362 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
363 auth_user.is_authenticated = False
1618
9353189b7675 Added automatic logout of deactivated/deleted users
Liad Shani <liadff@gmail.com>
parents: 1594
diff changeset
364 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
365
1618
9353189b7675 Added automatic logout of deactivated/deleted users
Liad Shani <liadff@gmail.com>
parents: 1594
diff changeset
366 return True
686
ff6a8196ebfe fixed anonymous access bug.
Marcin Kuzminski <marcin@python-works.com>
parents: 673
diff changeset
367
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
368 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
369 """
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
370 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
371 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
372 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
373
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
374 :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
375 """
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
376 RK = 'repositories'
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
377 GK = 'repositories_groups'
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
378 GLOBAL = 'global'
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
379 user.permissions[RK] = {}
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
380 user.permissions[GK] = {}
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
381 user.permissions[GLOBAL] = set()
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
382
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
383 #======================================================================
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 # 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
385 #======================================================================
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
386 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
387 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
388
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
389 default_repo_perms = Permission.get_default_perms(default_user_id)
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
390 default_repo_groups_perms = Permission.get_default_group_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
391
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 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
393 #==================================================================
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
394 # admin user have all default rights for repositories
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
395 # and groups 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
396 #==================================================================
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
397 user.permissions[GLOBAL].add('hg.admin')
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
398
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
399 # repositories
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
400 for perm in default_repo_perms:
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
401 r_k = perm.UserRepoToPerm.repository.repo_name
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
402 p = 'repository.admin'
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
403 user.permissions[RK][r_k] = p
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
404
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
405 # repositories groups
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
406 for perm in default_repo_groups_perms:
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
407 rg_k = perm.UserRepoGroupToPerm.group.group_name
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
408 p = 'group.admin'
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
409 user.permissions[GK][rg_k] = p
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
410 return user
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
411
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
412 #==================================================================
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
413 # set default permissions first for repositories and groups
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
414 #==================================================================
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
415 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
416
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
417 # default global permissions
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
418 default_global_perms = self.sa.query(UserToPerm)\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
419 .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
420
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
421 for perm in default_global_perms:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
422 user.permissions[GLOBAL].add(perm.permission.permission_name)
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
423
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
424 # defaults for repositories, taken from default user
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
425 for perm in default_repo_perms:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
426 r_k = perm.UserRepoToPerm.repository.repo_name
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
427 if perm.Repository.private and not (perm.Repository.user_id == uid):
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
428 # disable defaults for private repos,
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
429 p = 'repository.none'
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
430 elif perm.Repository.user_id == uid:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
431 # set admin if owner
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
432 p = 'repository.admin'
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
433 else:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
434 p = perm.Permission.permission_name
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
435
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
436 user.permissions[RK][r_k] = 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
437
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
438 # defaults for repositories groups taken from default user permission
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
439 # on given group
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
440 for perm in default_repo_groups_perms:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
441 rg_k = perm.UserRepoGroupToPerm.group.group_name
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
442 p = perm.Permission.permission_name
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
443 user.permissions[GK][rg_k] = p
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
444
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
445 #==================================================================
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
446 # overwrite defaults with user permissions if any found
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
447 #==================================================================
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
448
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
449 # user global permissions
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
450 user_perms = self.sa.query(UserToPerm)\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
451 .options(joinedload(UserToPerm.permission))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
452 .filter(UserToPerm.user_id == uid).all()
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
453
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
454 for perm in user_perms:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
455 user.permissions[GLOBAL].add(perm.permission.permission_name)
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
456
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
457 # user explicit permissions for repositories
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
458 user_repo_perms = \
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
459 self.sa.query(UserRepoToPerm, Permission, Repository)\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
460 .join((Repository, UserRepoToPerm.repository_id == Repository.repo_id))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
461 .join((Permission, UserRepoToPerm.permission_id == Permission.permission_id))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
462 .filter(UserRepoToPerm.user_id == uid)\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
463 .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
464
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
465 for perm in user_repo_perms:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
466 # set admin if owner
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
467 r_k = perm.UserRepoToPerm.repository.repo_name
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
468 if perm.Repository.user_id == uid:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
469 p = 'repository.admin'
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
470 else:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
471 p = perm.Permission.permission_name
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
472 user.permissions[RK][r_k] = p
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
473
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
474 # USER GROUP
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
475 #==================================================================
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
476 # check if user is part of user groups for this repository and
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
477 # fill in (or replace with higher) permissions
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
478 #==================================================================
1267
d534aff5e82a user defined permission will update the global permissions, and overwrite default settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
479
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
480 # users group global
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
481 user_perms_from_users_groups = self.sa.query(UsersGroupToPerm)\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
482 .options(joinedload(UsersGroupToPerm.permission))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
483 .join((UsersGroupMember, UsersGroupToPerm.users_group_id ==
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
484 UsersGroupMember.users_group_id))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
485 .filter(UsersGroupMember.user_id == uid).all()
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
486
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
487 for perm in user_perms_from_users_groups:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
488 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
489
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
490 # users group for repositories permissions
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
491 user_repo_perms_from_users_groups = \
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
492 self.sa.query(UsersGroupRepoToPerm, Permission, Repository,)\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
493 .join((Repository, UsersGroupRepoToPerm.repository_id == Repository.repo_id))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
494 .join((Permission, UsersGroupRepoToPerm.permission_id == Permission.permission_id))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
495 .join((UsersGroupMember, UsersGroupRepoToPerm.users_group_id == UsersGroupMember.users_group_id))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
496 .filter(UsersGroupMember.user_id == uid)\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
497 .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
498
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
499 for perm in user_repo_perms_from_users_groups:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
500 r_k = perm.UsersGroupRepoToPerm.repository.repo_name
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
501 p = perm.Permission.permission_name
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
502 cur_perm = user.permissions[RK][r_k]
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
503 # overwrite permission only if it's greater than permission
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
504 # given from other sources
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
505 if PERM_WEIGHTS[p] > PERM_WEIGHTS[cur_perm]:
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
506 user.permissions[RK][r_k] = 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
507
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
508 # REPO GROUP
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
509 #==================================================================
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
510 # get access for this user for repos group and override defaults
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
511 #==================================================================
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
512
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
513 # user explicit permissions for repository
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
514 user_repo_groups_perms = \
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
515 self.sa.query(UserRepoGroupToPerm, Permission, RepoGroup)\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
516 .join((RepoGroup, UserRepoGroupToPerm.group_id == RepoGroup.group_id))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
517 .join((Permission, UserRepoGroupToPerm.permission_id == Permission.permission_id))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
518 .filter(UserRepoGroupToPerm.user_id == uid)\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
519 .all()
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
520
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
521 for perm in user_repo_groups_perms:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
522 rg_k = perm.UserRepoGroupToPerm.group.group_name
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
523 p = perm.Permission.permission_name
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
524 cur_perm = user.permissions[GK][rg_k]
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
525 if PERM_WEIGHTS[p] > PERM_WEIGHTS[cur_perm]:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
526 user.permissions[GK][rg_k] = p
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
527
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
528 # REPO GROUP + USER GROUP
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
529 #==================================================================
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
530 # check if user is part of user groups for this repo group and
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
531 # fill in (or replace with higher) permissions
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
532 #==================================================================
2129
43481c3d70ca #399 added inheritance of permissions for users group on repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2124
diff changeset
533
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
534 # users group for repositories permissions
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
535 user_repo_group_perms_from_users_groups = \
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
536 self.sa.query(UsersGroupRepoGroupToPerm, Permission, RepoGroup)\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
537 .join((RepoGroup, UsersGroupRepoGroupToPerm.group_id == RepoGroup.group_id))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
538 .join((Permission, UsersGroupRepoGroupToPerm.permission_id == Permission.permission_id))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
539 .join((UsersGroupMember, UsersGroupRepoGroupToPerm.users_group_id == UsersGroupMember.users_group_id))\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
540 .filter(UsersGroupMember.user_id == uid)\
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
541 .all()
2129
43481c3d70ca #399 added inheritance of permissions for users group on repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2124
diff changeset
542
2186
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
543 for perm in user_repo_group_perms_from_users_groups:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
544 g_k = perm.UsersGroupRepoGroupToPerm.group.group_name
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
545 p = perm.Permission.permission_name
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
546 cur_perm = user.permissions[GK][g_k]
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
547 # overwrite permission only if it's greater than permission
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
548 # given from other sources
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
549 if PERM_WEIGHTS[p] > PERM_WEIGHTS[cur_perm]:
7b52c2351231 permission comments + out identation for better readability
Marcin Kuzminski <marcin@python-works.com>
parents: 2153
diff changeset
550 user.permissions[GK][g_k] = p
2129
43481c3d70ca #399 added inheritance of permissions for users group on repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2124
diff changeset
551
673
dd532af216d9 #49 Enabled anonymous access for web interface controllable from permissions pannel
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
552 return user
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
553
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
554 def has_perm(self, user, perm):
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
555 if not isinstance(perm, Permission):
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
556 raise Exception('perm needs to be an instance of Permission class '
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
557 'got %s instead' % type(perm))
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
558
2432
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 2330
diff changeset
559 user = self._get_user(user)
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
560
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
561 return UserToPerm.query().filter(UserToPerm.user == user)\
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
562 .filter(UserToPerm.permission == perm).scalar() is not None
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
563
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
564 def grant_perm(self, user, perm):
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
565 """
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
566 Grant user global permissions
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
567
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
568 :param user:
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
569 :param perm:
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
570 """
2432
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 2330
diff changeset
571 user = self._get_user(user)
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 2330
diff changeset
572 perm = self._get_perm(perm)
2078
d4b6c8541bd9 fixes issue when user tried to resubmit same permission into user/user_groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2009
diff changeset
573 # if this permission is already granted skip it
d4b6c8541bd9 fixes issue when user tried to resubmit same permission into user/user_groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2009
diff changeset
574 _perm = UserToPerm.query()\
d4b6c8541bd9 fixes issue when user tried to resubmit same permission into user/user_groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2009
diff changeset
575 .filter(UserToPerm.user == user)\
d4b6c8541bd9 fixes issue when user tried to resubmit same permission into user/user_groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2009
diff changeset
576 .filter(UserToPerm.permission == perm)\
d4b6c8541bd9 fixes issue when user tried to resubmit same permission into user/user_groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2009
diff changeset
577 .scalar()
d4b6c8541bd9 fixes issue when user tried to resubmit same permission into user/user_groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2009
diff changeset
578 if _perm:
d4b6c8541bd9 fixes issue when user tried to resubmit same permission into user/user_groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2009
diff changeset
579 return
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
580 new = UserToPerm()
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
581 new.user = user
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
582 new.permission = perm
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
583 self.sa.add(new)
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
584
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
585 def revoke_perm(self, user, perm):
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
586 """
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
587 Revoke users global permissions
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
588
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
589 :param user:
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
590 :param perm:
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
591 """
2432
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 2330
diff changeset
592 user = self._get_user(user)
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 2330
diff changeset
593 perm = self._get_perm(perm)
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
594
2078
d4b6c8541bd9 fixes issue when user tried to resubmit same permission into user/user_groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2009
diff changeset
595 obj = UserToPerm.query()\
d4b6c8541bd9 fixes issue when user tried to resubmit same permission into user/user_groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2009
diff changeset
596 .filter(UserToPerm.user == user)\
d4b6c8541bd9 fixes issue when user tried to resubmit same permission into user/user_groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2009
diff changeset
597 .filter(UserToPerm.permission == perm)\
d4b6c8541bd9 fixes issue when user tried to resubmit same permission into user/user_groups
Marcin Kuzminski <marcin@python-works.com>
parents: 2009
diff changeset
598 .scalar()
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
599 if obj:
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
600 self.sa.delete(obj)
2330
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
601
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
602 def add_extra_email(self, user, email):
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
603 """
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
604 Adds email address to UserEmailMap
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
605
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
606 :param user:
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
607 :param email:
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
608 """
2479
9225597688f4 Added validation into user email map
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
609 from rhodecode.model import forms
9225597688f4 Added validation into user email map
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
610 form = forms.UserExtraEmailForm()()
9225597688f4 Added validation into user email map
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
611 data = form.to_python(dict(email=email))
2432
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 2330
diff changeset
612 user = self._get_user(user)
2479
9225597688f4 Added validation into user email map
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
613
2330
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
614 obj = UserEmailMap()
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
615 obj.user = user
2479
9225597688f4 Added validation into user email map
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
616 obj.email = data['email']
2330
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
617 self.sa.add(obj)
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
618 return obj
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
619
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
620 def delete_extra_email(self, user, email_id):
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
621 """
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
622 Removes email address from UserEmailMap
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
623
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
624 :param user:
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
625 :param email_id:
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
626 """
2432
d3ac7491a5c8 Share common getter functions in base model, and remove duplicated functions from other models
Marcin Kuzminski <marcin@python-works.com>
parents: 2330
diff changeset
627 user = self._get_user(user)
2330
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
628 obj = UserEmailMap.query().get(email_id)
b0fef8a77568 Added simple UI for admin to manage emails map
Marcin Kuzminski <marcin@python-works.com>
parents: 2278
diff changeset
629 if obj:
2478
8eab81115660 white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2467
diff changeset
630 self.sa.delete(obj)