##// END OF EJS Templates
Remove wrong/unnecessary/unfixable comment(s)
Remove wrong/unnecessary/unfixable comment(s)

File last commit:

r4116:ffd45b18 rhodecode-2.2.5-gpl
r4175:e9f6b533 kallithea-2.2.5-r...
Show More
user.py
488 lines | 16.9 KiB | text/x-python | PythonLexer
ldap auth rewrite, moved split authfunc into two functions,...
r761 # -*- coding: utf-8 -*-
fixed license issue #149
r1206 # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
Code refactoring,models renames...
r629 # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
Code refactoring,models renames...
r629 # You should have received a copy of the GNU General Public License
fixed license issue #149
r1206 # along with this program. If not, see <http://www.gnu.org/licenses/>.
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 """
rhodecode.model.user
~~~~~~~~~~~~~~~~~~~~
users model for RhodeCode
:created_on: Apr 9, 2010
:author: marcink
:copyright: (c) 2013 RhodeCode GmbH.
:license: GPLv3, see LICENSE for more details.
"""
fixed security issue when saving ldap user saved plaintext password
r750
Code refactoring,models renames...
r629 import logging
import traceback
implements #222 registration feedback...
r1731 from pylons import url
ldap auth rewrite, moved split authfunc into two functions,...
r761 from pylons.i18n.translation import _
Added validation into user email map
r2479 from sqlalchemy.exc import DatabaseError
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116
Added validation into user email map
r2479
Jonathan Sternberg
Include the current user as a created_by/deleted_by attribute for USER_HOOK extensions.
r4017 from rhodecode.lib.utils2 import safe_unicode, generate_api_key, get_current_rhodecode_user
moved caching query to libs
r1669 from rhodecode.lib.caching_query import FromCache
ldap auth rewrite, moved split authfunc into two functions,...
r761 from rhodecode.model import BaseModel
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 from rhodecode.model.db import User, UserToPerm, Notification, \
UserEmailMap, UserIpMap
tries to fix issue #177 by fallback to user.user_id instead of fetching from db, user.user_id...
r1269 from rhodecode.lib.exceptions import DefaultUserException, \
UserOwnsReposException
moved out password reset tasks from celery, it doesn't make any sense to keep them there, additionally they are broken...
r3401 from rhodecode.model.meta import Session
fixed #72 show warning on removal when user still is owner of existing repositories...
r713
ldap auth rewrite, moved split authfunc into two functions,...
r761
log = logging.getLogger(__name__)
Code refactoring,models renames...
r629
user defined permission will update the global permissions, and overwrite default settings.
r1267
fixed Example celery config to ampq,...
r752 class UserModel(BaseModel):
Added associated classes into child models
r2522 cls = User
notification to commit author + gardening
r1716
fixes #288...
r1594 def get(self, user_id, cache=False):
Code refactoring,models renames...
r629 user = self.sa.query(User)
if cache:
user = user.options(FromCache("sql_cache_short",
"get_user_%s" % user_id))
return user.get(user_id)
API updates...
r2009 def get_user(self, user):
Share common getter functions in base model, and remove duplicated functions from other models
r2432 return self._get_user(user)
API updates...
r2009
fixes #288...
r1594 def get_by_username(self, username, cache=False, case_insensitive=False):
fixed security issue when saving ldap user saved plaintext password
r750
#78, fixed more reliable case insensitive searches
r742 if case_insensitive:
user = self.sa.query(User).filter(User.username.ilike(username))
else:
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 user = self.sa.query(User)\
.filter(User.username == username)
Code refactoring,models renames...
r629 if cache:
user = user.options(FromCache("sql_cache_short",
"get_user_%s" % username))
return user.scalar()
Added associated classes into child models
r2522 def get_by_email(self, email, cache=False, case_insensitive=False):
return User.get_by_email(email, case_insensitive, cache)
fixes #288...
r1594 def get_by_api_key(self, api_key, cache=False):
fix for api key lookup, reuse same function in user model
r1693 return User.get_by_api_key(api_key, cache)
Major rewrite of auth objects. Moved parts of filling user data into user model....
r1117
Jonathan Sternberg
Include the current user as a created_by/deleted_by attribute for USER_HOOK extensions.
r4017 def create(self, form_data, cur_user=None):
if not cur_user:
Replaced fallback username from ? to None in hook loggers
r4018 cur_user = getattr(get_current_rhodecode_user(), 'username', None)
Added pre-create user hook....
r4074
from rhodecode.lib.hooks import log_create_user, check_allowed_create_user
_fd = form_data
Removed redundant Exception catching
r4075 user_data = {
Added pre-create user hook....
r4074 'username': _fd['username'], 'password': _fd['password'],
'email': _fd['email'], 'firstname': _fd['firstname'], 'lastname': _fd['lastname'],
'active': _fd['active'], 'admin': False
}
# raises UserCreationError if it's not allowed
Removed redundant Exception catching
r4075 check_allowed_create_user(user_data, cur_user)
Switched forms to new validators
r2467 from rhodecode.lib.auth import get_crypt_password
Code refactoring,models renames...
r629 try:
new_user = User()
for k, v in form_data.items():
Switched forms to new validators
r2467 if k == 'password':
v = get_crypt_password(v)
Renamed name to firstname in forms...
r2544 if k == 'firstname':
k = 'name'
Code refactoring,models renames...
r629 setattr(new_user, k, v)
Added api_key into user, api key get's generated again after password change...
r1116 new_user.api_key = generate_api_key(form_data['username'])
Code refactoring,models renames...
r629 self.sa.add(new_user)
Jonathan Sternberg
User create/delete hooks for rcextensions....
r4016
Jonathan Sternberg
Include the current user as a created_by/deleted_by attribute for USER_HOOK extensions.
r4017 log_create_user(new_user.get_dict(), cur_user)
Nicolas VINOT
Add API for repositories and groups (creation, permission)
r1586 return new_user
Don't catch all exceptions
r3631 except Exception:
Code refactoring,models renames...
r629 log.error(traceback.format_exc())
raise
Updated create_or_update method to not change API key when password is not updated
r2513 def create_or_update(self, username, password, email, firstname='',
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 lastname='', active=True, admin=False,
extern_type=None, extern_name=None, cur_user=None):
User usermodel instead of db model to manage accounts...
r1634 """
Creates a new instance if not found, or updates current one
auto white-space removal
r1818
User usermodel instead of db model to manage accounts...
r1634 :param username:
:param password:
:param email:
:param active:
Updated create_or_update method to not change API key when password is not updated
r2513 :param firstname:
User usermodel instead of db model to manage accounts...
r1634 :param lastname:
:param active:
:param admin:
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 :param extern_name:
:param extern_type:
formatting and small changes
r4019 :param cur_user:
User usermodel instead of db model to manage accounts...
r1634 """
Jonathan Sternberg
Include the current user as a created_by/deleted_by attribute for USER_HOOK extensions.
r4017 if not cur_user:
Replaced fallback username from ? to None in hook loggers
r4018 cur_user = getattr(get_current_rhodecode_user(), 'username', None)
- fixes celery sqlalchemy session issues for async forking...
r1728
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 from rhodecode.lib.auth import get_crypt_password, check_password
Added pre-create user hook....
r4074 from rhodecode.lib.hooks import log_create_user, check_allowed_create_user
Removed redundant Exception catching
r4075 user_data = {
Added pre-create user hook....
r4074 'username': username, 'password': password,
'email': email, 'firstname': firstname, 'lastname': lastname,
'active': active, 'admin': admin
}
# raises UserCreationError if it's not allowed
Removed redundant Exception catching
r4075 check_allowed_create_user(user_data, cur_user)
- fixes celery sqlalchemy session issues for async forking...
r1728
garden...
r1976 log.debug('Checking for %s account in RhodeCode database' % username)
User usermodel instead of db model to manage accounts...
r1634 user = User.get_by_username(username, case_insensitive=True)
if user is None:
garden...
r1976 log.debug('creating new user %s' % username)
User usermodel instead of db model to manage accounts...
r1634 new_user = User()
Updated create_or_update method to not change API key when password is not updated
r2513 edit = False
User usermodel instead of db model to manage accounts...
r1634 else:
garden...
r1976 log.debug('updating user %s' % username)
User usermodel instead of db model to manage accounts...
r1634 new_user = user
Updated create_or_update method to not change API key when password is not updated
r2513 edit = True
- fixes celery sqlalchemy session issues for async forking...
r1728
User usermodel instead of db model to manage accounts...
r1634 try:
new_user.username = username
new_user.admin = admin
new_user.email = email
new_user.active = active
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 new_user.extern_name = safe_unicode(extern_name) if extern_name else None
new_user.extern_type = safe_unicode(extern_type) if extern_type else None
Updated create_or_update method to not change API key when password is not updated
r2513 new_user.name = firstname
User usermodel instead of db model to manage accounts...
r1634 new_user.lastname = lastname
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116
if not edit:
new_user.api_key = generate_api_key(username)
# set password only if creating an user or password is changed
password_change = new_user.password and not check_password(password,
new_user.password)
if not edit or password_change:
reason = 'new password' if edit else 'new user'
log.debug('Updating password reason=>%s' % (reason,))
new_user.password = get_crypt_password(password) if password else None
User usermodel instead of db model to manage accounts...
r1634 self.sa.add(new_user)
Jonathan Sternberg
User create/delete hooks for rcextensions....
r4016
if not edit:
Jonathan Sternberg
Include the current user as a created_by/deleted_by attribute for USER_HOOK extensions.
r4017 log_create_user(new_user.get_dict(), cur_user)
User usermodel instead of db model to manage accounts...
r1634 return new_user
except (DatabaseError,):
log.error(traceback.format_exc())
raise
- fixes celery sqlalchemy session issues for async forking...
r1728
Code refactoring,models renames...
r629 def create_registration(self, form_data):
implements #222 registration feedback...
r1731 from rhodecode.model.notification import NotificationModel
Code refactoring,models renames...
r629 try:
fixed issue with empty APIKEYS on registration #438
r2248 form_data['admin'] = False
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 form_data['extern_name'] = 'rhodecode'
form_data['extern_type'] = 'rhodecode'
fixed issue with empty APIKEYS on registration #438
r2248 new_user = self.create(form_data)
Code refactoring,models renames...
r629
self.sa.add(new_user)
implements #222 registration feedback...
r1731 self.sa.flush()
# notification to admins
Mads Kiilerich
Fix a lot of casings - use standard casing in most places
r3654 subject = _('New user registration')
fixes #59, notifications for user registrations + some changes to mailer
r689 body = ('New user registration\n'
implements #222 registration feedback...
r1731 '---------------------\n'
'- Username: %s\n'
'- Full Name: %s\n'
'- Email: %s\n')
formatting and small changes
r4019 body = body % (new_user.username, new_user.full_name, new_user.email)
implements #222 registration feedback...
r1731 edit_url = url('edit_user', id=new_user.user_id, qualified=True)
#344 optional firstname lastname on user creation...
r1950 kw = {'registered_user_url': edit_url}
implements #222 registration feedback...
r1731 NotificationModel().create(created_by=new_user, subject=subject,
body=body, recipients=None,
type_=Notification.TYPE_REGISTRATION,
email_kwargs=kw)
fixes #59, notifications for user registrations + some changes to mailer
r689
Don't catch all exceptions
r3631 except Exception:
Code refactoring,models renames...
r629 log.error(traceback.format_exc())
raise
Implemented #658 Changing username in LDAP-Mode should not be allowed....
r3021 def update(self, user_id, form_data, skip_attrs=[]):
fix crypt password on update my account
r2488 from rhodecode.lib.auth import get_crypt_password
Code refactoring,models renames...
r629 try:
fixes #288...
r1594 user = self.get(user_id, cache=False)
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 if user.username == User.DEFAULT_USER:
Code refactoring,models renames...
r629 raise DefaultUserException(
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 _("You can't Edit this user since it's "
"crucial for entire application"))
fixed #72 show warning on removal when user still is owner of existing repositories...
r713
Code refactoring,models renames...
r629 for k, v in form_data.items():
Implemented #658 Changing username in LDAP-Mode should not be allowed....
r3021 if k in skip_attrs:
continue
Renamed name to firstname in forms...
r2544 if k == 'new_password' and v:
fix crypt password on update my account
r2488 user.password = get_crypt_password(v)
Code refactoring,models renames...
r629 else:
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 # old legacy thing orm models store firstname as name,
# need proper refactor to username
Renamed name to firstname in forms...
r2544 if k == 'firstname':
k = 'name'
Added api_key into user, api key get's generated again after password change...
r1116 setattr(user, k, v)
self.sa.add(user)
Don't catch all exceptions
r3631 except Exception:
Code refactoring,models renames...
r629 log.error(traceback.format_exc())
raise
fixed api issue with changing username during update_user
r2657 def update_user(self, user, **kwargs):
from rhodecode.lib.auth import get_crypt_password
try:
user = self._get_user(user)
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 if user.username == User.DEFAULT_USER:
fixed api issue with changing username during update_user
r2657 raise DefaultUserException(
_("You can't Edit this user since it's"
" crucial for entire application")
)
for k, v in kwargs.items():
if k == 'password' and v:
v = get_crypt_password(v)
setattr(user, k, v)
self.sa.add(user)
return user
Don't catch all exceptions
r3631 except Exception:
fixed api issue with changing username during update_user
r2657 log.error(traceback.format_exc())
raise
Jonathan Sternberg
Include the current user as a created_by/deleted_by attribute for USER_HOOK extensions.
r4017 def delete(self, user, cur_user=None):
if not cur_user:
Replaced fallback username from ? to None in hook loggers
r4018 cur_user = getattr(get_current_rhodecode_user(), 'username', None)
Share common getter functions in base model, and remove duplicated functions from other models
r2432 user = self._get_user(user)
auto white-space removal
r1818
Code refactoring,models renames...
r629 try:
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 if user.username == User.DEFAULT_USER:
Code refactoring,models renames...
r629 raise DefaultUserException(
Improved message about deleting user who owns repositories
r2153 _(u"You can't remove this user since it's"
fixed #397 Private repository groups shows up before login...
r2124 " crucial for entire application")
)
fixed #72 show warning on removal when user still is owner of existing repositories...
r713 if user.repositories:
Improved message about deleting user who owns repositories
r2153 repos = [x.repo_name for x in user.repositories]
fixed #397 Private repository groups shows up before login...
r2124 raise UserOwnsReposException(
Improved message about deleting user who owns repositories
r2153 _(u'user "%s" still owns %s repositories and cannot be '
'removed. Switch owners or remove those repositories. %s')
% (user.username, len(repos), ', '.join(repos))
fixed #397 Private repository groups shows up before login...
r2124 )
Code refactoring,models renames...
r629 self.sa.delete(user)
Jonathan Sternberg
User create/delete hooks for rcextensions....
r4016
from rhodecode.lib.hooks import log_delete_user
Jonathan Sternberg
Include the current user as a created_by/deleted_by attribute for USER_HOOK extensions.
r4017 log_delete_user(user.get_dict(), cur_user)
Don't catch all exceptions
r3631 except Exception:
Code refactoring,models renames...
r629 log.error(traceback.format_exc())
raise
fixes #223 improve password reset form
r1417 def reset_password_link(self, data):
from rhodecode.lib.celerylib import tasks, run_task
moved out password reset tasks from celery, it doesn't make any sense to keep them there, additionally they are broken...
r3401 from rhodecode.model.notification import EmailNotificationModel
user_email = data['email']
try:
user = User.get_by_email(user_email)
if user:
log.debug('password reset user found %s' % user)
link = url('reset_password_confirmation', key=user.api_key,
qualified=True)
reg_type = EmailNotificationModel.TYPE_PASSWORD_RESET
body = EmailNotificationModel().get_email_tmpl(reg_type,
**{'user': user.short_contact,
'reset_url': link})
log.debug('sending email')
run_task(tasks.send_email, user_email,
Mads Kiilerich
Fix a lot of casings - use standard casing in most places
r3654 _("Password reset link"), body, body)
moved out password reset tasks from celery, it doesn't make any sense to keep them there, additionally they are broken...
r3401 log.info('send new password mail to %s' % user_email)
else:
log.debug("password reset email %s not found" % user_email)
Don't catch all exceptions
r3631 except Exception:
moved out password reset tasks from celery, it doesn't make any sense to keep them there, additionally they are broken...
r3401 log.error(traceback.format_exc())
return False
return True
fixes #223 improve password reset form
r1417
Code refactoring,models renames...
r629 def reset_password(self, data):
from rhodecode.lib.celerylib import tasks, run_task
moved out password reset tasks from celery, it doesn't make any sense to keep them there, additionally they are broken...
r3401 from rhodecode.lib import auth
user_email = data['email']
Removed redundant Exception catching
r4075 pre_db = True
moved out password reset tasks from celery, it doesn't make any sense to keep them there, additionally they are broken...
r3401 try:
Removed redundant Exception catching
r4075 user = User.get_by_email(user_email)
new_passwd = auth.PasswordGenerator().gen_password(8,
auth.PasswordGenerator.ALPHABETS_BIG_SMALL)
if user:
user.password = auth.get_crypt_password(new_passwd)
Session().add(user)
Session().commit()
log.info('change password for %s' % user_email)
if new_passwd is None:
raise Exception('unable to generate new password')
moved out password reset tasks from celery, it doesn't make any sense to keep them there, additionally they are broken...
r3401
Removed redundant Exception catching
r4075 pre_db = False
moved out password reset tasks from celery, it doesn't make any sense to keep them there, additionally they are broken...
r3401 run_task(tasks.send_email, user_email,
_('Your new password'),
formatting and small changes
r4019 _('Your new RhodeCode password:%s') % (new_passwd,))
moved out password reset tasks from celery, it doesn't make any sense to keep them there, additionally they are broken...
r3401 log.info('send new password mail to %s' % user_email)
Don't catch all exceptions
r3631 except Exception:
moved out password reset tasks from celery, it doesn't make any sense to keep them there, additionally they are broken...
r3401 log.error('Failed to update user password')
log.error(traceback.format_exc())
Removed redundant Exception catching
r4075 if pre_db:
# we rollback only if local db stuff fails. If it goes into
# run_task, we're pass rollback state this wouldn't work then
Session().rollback()
moved out password reset tasks from celery, it doesn't make any sense to keep them there, additionally they are broken...
r3401
return True
#49 Enabled anonymous access for web interface controllable from permissions pannel
r673
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 def fill_data(self, auth_user, user_id=None, api_key=None, username=None):
#49 Enabled anonymous access for web interface controllable from permissions pannel
r673 """
Major rewrite of auth objects. Moved parts of filling user data into user model....
r1117 Fetches auth_user by user_id,or api_key if present.
Fills auth_user attributes with those taken from database.
source code cleanup: remove trailing white space, normalize file endings
r1203 Additionally set's is_authenitated if lookup fails
#49 Enabled anonymous access for web interface controllable from permissions pannel
r673 present in database
source code cleanup: remove trailing white space, normalize file endings
r1203
Major rewrite of auth objects. Moved parts of filling user data into user model....
r1117 :param auth_user: instance of user to set attributes
:param user_id: user id to fetch by
:param api_key: api key to fetch by
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 :param username: username to fetch by
#49 Enabled anonymous access for web interface controllable from permissions pannel
r673 """
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 if user_id is None and api_key is None and username is None:
raise Exception('You need to pass user_id, api_key or username')
fixed anonymous access bug.
r686
Major rewrite of auth objects. Moved parts of filling user data into user model....
r1117 try:
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 dbuser = None
if user_id:
dbuser = self.get(user_id)
elif api_key:
Major rewrite of auth objects. Moved parts of filling user data into user model....
r1117 dbuser = self.get_by_api_key(api_key)
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 elif username:
dbuser = self.get_by_username(username)
Major rewrite of auth objects. Moved parts of filling user data into user model....
r1117
Liad Shani
Added automatic logout of deactivated/deleted users
r1618 if dbuser is not None and dbuser.active:
garden...
r1976 log.debug('filling %s data' % dbuser)
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 for k, v in dbuser.get_dict().iteritems():
if k not in ['api_keys', 'permissions']:
setattr(auth_user, k, v)
Liad Shani
Added automatic logout of deactivated/deleted users
r1618 else:
return False
Major rewrite of auth objects. Moved parts of filling user data into user model....
r1117
Don't catch all exceptions
r3631 except Exception:
Major rewrite of auth objects. Moved parts of filling user data into user model....
r1117 log.error(traceback.format_exc())
auth_user.is_authenticated = False
Liad Shani
Added automatic logout of deactivated/deleted users
r1618 return False
Major rewrite of auth objects. Moved parts of filling user data into user model....
r1117
Liad Shani
Added automatic logout of deactivated/deleted users
r1618 return True
fixed anonymous access bug.
r686
commit less models...
r1749 def has_perm(self, user, perm):
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 perm = self._get_perm(perm)
Share common getter functions in base model, and remove duplicated functions from other models
r2432 user = self._get_user(user)
commit less models...
r1749
fixed repo_create permission by adding missing commit statements...
r1758 return UserToPerm.query().filter(UserToPerm.user == user)\
commit less models...
r1749 .filter(UserToPerm.permission == perm).scalar() is not None
def grant_perm(self, user, perm):
#227 Initial version of repository groups permissions system...
r1982 """
Grant user global permissions
commit less models...
r1749
#227 Initial version of repository groups permissions system...
r1982 :param user:
:param perm:
"""
Share common getter functions in base model, and remove duplicated functions from other models
r2432 user = self._get_user(user)
perm = self._get_perm(perm)
fixes issue when user tried to resubmit same permission into user/user_groups
r2078 # if this permission is already granted skip it
_perm = UserToPerm.query()\
.filter(UserToPerm.user == user)\
.filter(UserToPerm.permission == perm)\
.scalar()
if _perm:
return
commit less models...
r1749 new = UserToPerm()
fixed repo_create permission by adding missing commit statements...
r1758 new.user = user
commit less models...
r1749 new.permission = perm
self.sa.add(new)
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 return new
commit less models...
r1749
def revoke_perm(self, user, perm):
#227 Initial version of repository groups permissions system...
r1982 """
Revoke users global permissions
auto white-space removal
r1818
#227 Initial version of repository groups permissions system...
r1982 :param user:
:param perm:
"""
Share common getter functions in base model, and remove duplicated functions from other models
r2432 user = self._get_user(user)
perm = self._get_perm(perm)
auto white-space removal
r1818
fixes issue when user tried to resubmit same permission into user/user_groups
r2078 obj = UserToPerm.query()\
.filter(UserToPerm.user == user)\
.filter(UserToPerm.permission == perm)\
.scalar()
fixed repo_create permission by adding missing commit statements...
r1758 if obj:
self.sa.delete(obj)
Added simple UI for admin to manage emails map
r2330
def add_extra_email(self, user, email):
"""
Adds email address to UserEmailMap
:param user:
:param email:
"""
Added validation into user email map
r2479 from rhodecode.model import forms
form = forms.UserExtraEmailForm()()
data = form.to_python(dict(email=email))
Share common getter functions in base model, and remove duplicated functions from other models
r2432 user = self._get_user(user)
Added validation into user email map
r2479
Added simple UI for admin to manage emails map
r2330 obj = UserEmailMap()
obj.user = user
Added validation into user email map
r2479 obj.email = data['email']
Added simple UI for admin to manage emails map
r2330 self.sa.add(obj)
return obj
def delete_extra_email(self, user, email_id):
"""
Removes email address from UserEmailMap
:param user:
:param email_id:
"""
Share common getter functions in base model, and remove duplicated functions from other models
r2432 user = self._get_user(user)
Added simple UI for admin to manage emails map
r2330 obj = UserEmailMap.query().get(email_id)
if obj:
white space cleanup
r2478 self.sa.delete(obj)
Added UserIpMap interface for allowed IP addresses and IP restriction access...
r3125
def add_extra_ip(self, user, ip):
"""
Adds ip address to UserIpMap
:param user:
:param ip:
"""
from rhodecode.model import forms
form = forms.UserExtraIpForm()()
data = form.to_python(dict(ip=ip))
user = self._get_user(user)
obj = UserIpMap()
obj.user = user
obj.ip_addr = data['ip']
self.sa.add(obj)
return obj
def delete_extra_ip(self, user, ip_id):
"""
Removes ip address from UserIpMap
:param user:
:param ip_id:
"""
user = self._get_user(user)
obj = UserIpMap.query().get(ip_id)
if obj:
self.sa.delete(obj)