##// END OF EJS Templates
fixed api issue with changing username during update_user
fixed api issue with changing username during update_user

File last commit:

r2626:4abce2c1 beta
r2657:001c7e2a beta
Show More
settings.py
447 lines | 17.5 KiB | text/x-python | PythonLexer
Added isanonymous decorator for checking permissions for anonymous access
r779 # -*- coding: utf-8 -*-
"""
fixed spelling mistakes, and some minor docs bugs
r860 rhodecode.controllers.admin.settings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
source code cleanup: remove trailing white space, normalize file endings
r1203
Added isanonymous decorator for checking permissions for anonymous access
r779 settings controller for rhodecode admin
source code cleanup: remove trailing white space, normalize file endings
r1203
Added isanonymous decorator for checking permissions for anonymous access
r779 :created_on: Jul 14, 2010
:author: marcink
2012 copyrights
r1824 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
Added isanonymous decorator for checking permissions for anonymous access
r779 :license: GPLv3, see COPYING for more details.
"""
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 #
renamed project to rhodecode
r547 # 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 #
renamed project to rhodecode
r547 # 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/>.
Added isanonymous decorator for checking permissions for anonymous access
r779
implemented #89 google analytics code
r890 import logging
import traceback
import formencode
added useful system info + packages to settings page.
r2192 import pkg_resources
import platform
implemented #89 google analytics code
r890
Code refactor number 2
r1022 from sqlalchemy import func
renamed project to rhodecode
r547 from formencode import htmlfill
Major refactoring, removed when possible calls to app globals....
r1036 from pylons import request, session, tmpl_context as c, url, config
renamed project to rhodecode
r547 from pylons.controllers.util import abort, redirect
from pylons.i18n.translation import _
implemented #89 google analytics code
r890
renamed project to rhodecode
r547 from rhodecode.lib import helpers as h
from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \
Added isanonymous decorator for checking permissions for anonymous access
r779 HasPermissionAnyDecorator, NotAnonymous
renamed project to rhodecode
r547 from rhodecode.lib.base import BaseController, render
implements #60, ldap configuration and authentication....
r705 from rhodecode.lib.celerylib import tasks, run_task
renamed project to rhodecode
r547 from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \
fixed missing repo_name_slug
r1027 set_rhodecode_config, repo_name_slug
refactoring of models names for repoGroup permissions
r1633 from rhodecode.model.db import RhodeCodeUi, Repository, RepoGroup, \
Added views for new ajax functions, got somehow lost in previos commit
r2625 RhodeCodeSetting, PullRequest, PullRequestReviewers
renamed project to rhodecode
r547 from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \
ApplicationUiSettingsForm
Refactor codes for scm model...
r691 from rhodecode.model.scm import ScmModel
Code refactoring,models renames...
r629 from rhodecode.model.user import UserModel
Deprecated UserModel removals...
r1501 from rhodecode.model.db import User
reduce cookie size for better support of client side sessions
r1718 from rhodecode.model.notification import EmailNotificationModel
commit less models...
r1749 from rhodecode.model.meta import Session
Added views for new ajax functions, got somehow lost in previos commit
r2625 from pylons.decorators import jsonify
from rhodecode.model.pull_request import PullRequestModel
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
class SettingsController(BaseController):
"""REST Controller styled on the Atom Publishing Protocol"""
# To properly map this controller, ensure your config/routing.py
# file has a resource setup:
source code cleanup: remove trailing white space, normalize file endings
r1203 # map.resource('setting', 'settings', controller='admin/settings',
renamed project to rhodecode
r547 # path_prefix='/admin', name_prefix='admin_')
@LoginRequired()
def __before__(self):
c.admin_user = session.get('admin_user')
c.admin_username = session.get('admin_username')
white space cleanup
r2207 c.modules = sorted([(p.project_name, p.version)
fix ordering of system packages info
r2223 for p in pkg_resources.working_set],
key=lambda k: k[0].lower())
added useful system info + packages to settings page.
r2192 c.py_version = platform.python_version()
white space cleanup
r2207 c.platform = platform.platform()
renamed project to rhodecode
r547 super(SettingsController, self).__before__()
Code refactoring,models renames...
r629
@HasPermissionAllDecorator('hg.admin')
renamed project to rhodecode
r547 def index(self, format='html'):
"""GET /admin/settings: All items in the collection"""
# url('admin_settings')
refactoring of models names for repoGroup permissions
r1633 defaults = RhodeCodeSetting.get_app_settings()
project refactoring, cleaned up lib.utils from rarly used functions, and place them...
r756 defaults.update(self.get_hg_ui_settings())
added useful system info + packages to settings page.
r2192
renamed project to rhodecode
r547 return htmlfill.render(
render('admin/settings/settings.html'),
defaults=defaults,
encoding="UTF-8",
force_defaults=False
Code refactoring,models renames...
r629 )
renamed project to rhodecode
r547 @HasPermissionAllDecorator('hg.admin')
def create(self):
"""POST /admin/settings: Create a new item"""
# url('admin_settings')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 @HasPermissionAllDecorator('hg.admin')
def new(self, format='html'):
"""GET /admin/settings/new: Form to create a new item"""
# url('admin_new_setting')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 @HasPermissionAllDecorator('hg.admin')
def update(self, setting_id):
"""PUT /admin/settings/setting_id: Update an existing item"""
# Forms posted to this method should contain a hidden field:
# <input type="hidden" name="_method" value="PUT" />
# Or using helpers:
# h.form(url('admin_setting', setting_id=ID),
# method='put')
# url('admin_setting', setting_id=ID)
if setting_id == 'mapping':
rm_obsolete = request.POST.get('destroy', False)
garden...
r1976 log.debug('Rescanning directories with destroy=%s' % rm_obsolete)
Major refactoring, removed when possible calls to app globals....
r1036 initial = ScmModel().repo_scan()
extended admin rescan to show what repositories was added and what removed...
r1039 log.debug('invalidating all repositories')
Moved out reposcan into hg Model....
r665 for repo_name in initial.keys():
invalidate_cache('get_repo_cached_%s' % repo_name)
extended admin rescan to show what repositories was added and what removed...
r1039 added, removed = repo2db_mapper(initial, rm_obsolete)
Moved out reposcan into hg Model....
r665
extended admin rescan to show what repositories was added and what removed...
r1039 h.flash(_('Repositories successfully'
PEP8ify - controllers
r1245 ' rescanned added: %s,removed: %s') % (added, removed),
category='success')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 if setting_id == 'whoosh':
project refactoring, cleaned up lib.utils from rarly used functions, and place them...
r756 repo_location = self.get_hg_ui_settings()['paths_root_path']
renamed project to rhodecode
r547 full_index = request.POST.get('full_index', False)
pep8
r1164 run_task(tasks.whoosh_index, repo_location, full_index)
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 h.flash(_('Whoosh reindex task scheduled'), category='success')
if setting_id == 'global':
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 application_form = ApplicationSettingsForm()()
try:
form_result = application_form.to_python(dict(request.POST))
implemented #89 google analytics code
r890
renamed project to rhodecode
r547 try:
refactoring of models names for repoGroup permissions
r1633 hgsettings1 = RhodeCodeSetting.get_by_name('title')
PEP8ify - controllers
r1245 hgsettings1.app_settings_value = \
form_result['rhodecode_title']
Code refactoring,models renames...
r629
refactoring of models names for repoGroup permissions
r1633 hgsettings2 = RhodeCodeSetting.get_by_name('realm')
PEP8ify - controllers
r1245 hgsettings2.app_settings_value = \
form_result['rhodecode_realm']
Code refactoring,models renames...
r629
refactoring of models names for repoGroup permissions
r1633 hgsettings3 = RhodeCodeSetting.get_by_name('ga_code')
PEP8ify - controllers
r1245 hgsettings3.app_settings_value = \
form_result['rhodecode_ga_code']
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 self.sa.add(hgsettings1)
self.sa.add(hgsettings2)
implemented #89 google analytics code
r890 self.sa.add(hgsettings3)
renamed project to rhodecode
r547 self.sa.commit()
renamed hg_app to rhodecode
r548 set_rhodecode_config(config)
renamed project to rhodecode
r547 h.flash(_('Updated application settings'),
category='success')
Code refactoring,models renames...
r629
pep8
r1164 except Exception:
renamed project to rhodecode
r547 log.error(traceback.format_exc())
PEP8ify - controllers
r1245 h.flash(_('error occurred during updating '
'application settings'),
renamed project to rhodecode
r547 category='error')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 self.sa.rollback()
Code refactoring,models renames...
r629
refactor codes and setup for python 2.5...
r564 except formencode.Invalid, errors:
renamed project to rhodecode
r547 return htmlfill.render(
render('admin/settings/settings.html'),
defaults=errors.value,
errors=errors.error_dict or {},
prefix_error=False,
Code refactoring,models renames...
r629 encoding="UTF-8")
renamed project to rhodecode
r547 if setting_id == 'mercurial':
application_form = ApplicationUiSettingsForm()()
try:
form_result = application_form.to_python(dict(request.POST))
Removed hardcoded hooks names from settings....
r2401 # fix namespaces for hooks
_f = lambda s: s.replace('.', '_')
renamed project to rhodecode
r547 try:
Code refactoring,models renames...
r629
more renames for rhode code !!
r549 hgsettings1 = self.sa.query(RhodeCodeUi)\
.filter(RhodeCodeUi.ui_key == 'push_ssl').one()
renamed project to rhodecode
r547 hgsettings1.ui_value = form_result['web_push_ssl']
Code refactoring,models renames...
r629
more renames for rhode code !!
r549 hgsettings2 = self.sa.query(RhodeCodeUi)\
.filter(RhodeCodeUi.ui_key == '/').one()
Code refactoring,models renames...
r629 hgsettings2.ui_value = form_result['paths_root_path']
renamed project to rhodecode
r547 #HOOKS
more renames for rhode code !!
r549 hgsettings3 = self.sa.query(RhodeCodeUi)\
Removed hardcoded hooks names from settings....
r2401 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_UPDATE)\
.one()
hgsettings3.ui_active = bool(form_result[_f('hooks_%s' %
RhodeCodeUi.HOOK_UPDATE)])
Code refactoring,models renames...
r629
more renames for rhode code !!
r549 hgsettings4 = self.sa.query(RhodeCodeUi)\
Removed hardcoded hooks names from settings....
r2401 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_REPO_SIZE)\
.one()
whitespace cleanup
r2409 hgsettings4.ui_active = bool(form_result[_f('hooks_%s' %
Removed hardcoded hooks names from settings....
r2401 RhodeCodeUi.HOOK_REPO_SIZE)])
Code refactoring,models renames...
r629
added option to enable/disable of logger hooks from admin panel....
r661 hgsettings5 = self.sa.query(RhodeCodeUi)\
Removed hardcoded hooks names from settings....
r2401 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_PUSH)\
.one()
whitespace cleanup
r2409 hgsettings5.ui_active = bool(form_result[_f('hooks_%s' %
Removed hardcoded hooks names from settings....
r2401 RhodeCodeUi.HOOK_PUSH)])
Code refactoring,models renames...
r629
added option to enable/disable of logger hooks from admin panel....
r661 hgsettings6 = self.sa.query(RhodeCodeUi)\
Removed hardcoded hooks names from settings....
r2401 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_PULL)\
.one()
hgsettings6.ui_active = bool(form_result[_f('hooks_%s' %
RhodeCodeUi.HOOK_PULL)])
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 self.sa.add(hgsettings1)
self.sa.add(hgsettings2)
self.sa.add(hgsettings3)
self.sa.add(hgsettings4)
added option to enable/disable of logger hooks from admin panel....
r661 self.sa.add(hgsettings5)
self.sa.add(hgsettings6)
renamed project to rhodecode
r547 self.sa.commit()
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 h.flash(_('Updated mercurial settings'),
category='success')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 except:
log.error(traceback.format_exc())
PEP8ify - controllers
r1245 h.flash(_('error occurred during updating '
'application settings'), category='error')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 self.sa.rollback()
Code refactoring,models renames...
r629
refactor codes and setup for python 2.5...
r564 except formencode.Invalid, errors:
renamed project to rhodecode
r547 return htmlfill.render(
render('admin/settings/settings.html'),
defaults=errors.value,
errors=errors.error_dict or {},
prefix_error=False,
Code refactoring,models renames...
r629 encoding="UTF-8")
Added more advanced hook management into rhodecode admin settings
r1460 if setting_id == 'hooks':
ui_key = request.POST.get('new_hook_ui_key')
ui_value = request.POST.get('new_hook_ui_value')
try:
Added email sending test site
r1673
Added more advanced hook management into rhodecode admin settings
r1460 if ui_value and ui_key:
RhodeCodeUi.create_or_update_hook(ui_key, ui_value)
h.flash(_('Added new hook'),
category='success')
# check for edits
update = False
_d = request.POST.dict_of_lists()
fixes testing email in settings
r1798 for k, v in zip(_d.get('hook_ui_key', []),
_d.get('hook_ui_value_new', [])):
Added more advanced hook management into rhodecode admin settings
r1460 RhodeCodeUi.create_or_update_hook(k, v)
update = True
if update:
h.flash(_('Updated hooks'), category='success')
fixed missing commit after hook delete
r2086 self.sa.commit()
Added more advanced hook management into rhodecode admin settings
r1460 except:
log.error(traceback.format_exc())
h.flash(_('error occurred during hook creation'),
category='error')
return redirect(url('admin_edit_setting', setting_id='hooks'))
Added email sending test site
r1673 if setting_id == 'email':
test_email = request.POST.get('test_email')
test_email_subj = 'RhodeCode TestEmail'
test_email_body = 'RhodeCode Email test'
fixes testing email in settings
r1798
Notification fixes...
r1717 test_email_html_body = EmailNotificationModel()\
fixes testing email in settings
r1798 .get_email_tmpl(EmailNotificationModel.TYPE_DEFAULT,
body=test_email_body)
Added email sending test site
r1673
fixes testing email in settings
r1798 recipients = [test_email] if [test_email] else None
run_task(tasks.send_email, recipients, test_email_subj,
Notification fixes...
r1717 test_email_body, test_email_html_body)
Added email sending test site
r1673 h.flash(_('Email task created'), category='success')
renamed project to rhodecode
r547 return redirect(url('admin_settings'))
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 @HasPermissionAllDecorator('hg.admin')
def delete(self, setting_id):
"""DELETE /admin/settings/setting_id: Delete an existing item"""
# Forms posted to this method should contain a hidden field:
# <input type="hidden" name="_method" value="DELETE" />
# Or using helpers:
# h.form(url('admin_setting', setting_id=ID),
# method='delete')
# url('admin_setting', setting_id=ID)
Added more advanced hook management into rhodecode admin settings
r1460 if setting_id == 'hooks':
hook_id = request.POST.get('hook_id')
RhodeCodeUi.delete(hook_id)
fixed missing commit after hook delete
r2086 self.sa.commit()
Added email sending test site
r1673
renamed project to rhodecode
r547 @HasPermissionAllDecorator('hg.admin')
def show(self, setting_id, format='html'):
PEP8ify - controllers
r1245 """
GET /admin/settings/setting_id: Show a specific item"""
renamed project to rhodecode
r547 # url('admin_setting', setting_id=ID)
Code refactoring,models renames...
r629
@HasPermissionAllDecorator('hg.admin')
renamed project to rhodecode
r547 def edit(self, setting_id, format='html'):
PEP8ify - controllers
r1245 """
GET /admin/settings/setting_id/edit: Form to
edit an existing item"""
renamed project to rhodecode
r547 # url('admin_edit_setting', setting_id=ID)
Added more advanced hook management into rhodecode admin settings
r1460 c.hooks = RhodeCodeUi.get_builtin_hooks()
c.custom_hooks = RhodeCodeUi.get_custom_hooks()
return htmlfill.render(
render('admin/settings/hooks.html'),
defaults={},
encoding="UTF-8",
force_defaults=False
)
Added isanonymous decorator for checking permissions for anonymous access
r779 @NotAnonymous()
renamed project to rhodecode
r547 def my_account(self):
"""
source code cleanup: remove trailing white space, normalize file endings
r1203 GET /_admin/my_account Displays info about my account
renamed project to rhodecode
r547 """
Added isanonymous decorator for checking permissions for anonymous access
r779 # url('admin_settings_my_account')
Moved out reposcan into hg Model....
r665
Deprecated UserModel removals...
r1501 c.user = User.get(self.rhodecode_user.user_id)
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached...
r1366 all_repos = self.sa.query(Repository)\
another major codes rewrite:...
r1045 .filter(Repository.user_id == c.user.user_id)\
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached...
r1366 .order_by(func.lower(Repository.repo_name)).all()
Refactor codes for scm model...
r691 c.user_repos = ScmModel().get_repos(all_repos)
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 if c.user.username == 'default':
Code refactoring,models renames...
r629 h.flash(_("You can't edit this user since it's"
renamed project to rhodecode
r547 " crucial for entire application"), category='warning')
return redirect(url('users'))
Code refactoring,models renames...
r629
new improved models with helper functions for easier data fetching
r832 defaults = c.user.get_dict()
highly improved performance of my_account page by removing super heavy htmlfill call on whole page
r2353
c.form = htmlfill.render(
render('admin/users/user_edit_my_account_form.html'),
renamed project to rhodecode
r547 defaults=defaults,
encoding="UTF-8",
force_defaults=False
Code refactoring,models renames...
r629 )
highly improved performance of my_account page by removing super heavy htmlfill call on whole page
r2353 return render('admin/users/user_edit_my_account.html')
renamed project to rhodecode
r547
My account pages shouldn't be accessible by anonymous users
r2626 @NotAnonymous()
renamed project to rhodecode
r547 def my_account_update(self):
"""PUT /_admin/my_account_update: Update an existing item"""
# Forms posted to this method should contain a hidden field:
# <input type="hidden" name="_method" value="PUT" />
# Or using helpers:
# h.form(url('admin_settings_my_account_update'),
# method='put')
# url('admin_settings_my_account_update', id=ID)
replaced all global calls to template context (rhodecode_user), into instance attributes
r1121 uid = self.rhodecode_user.user_id
Renamed name to firstname in forms...
r2544 email = self.rhodecode_user.email
PEP8ify - controllers
r1245 _form = UserForm(edit=True,
Renamed name to firstname in forms...
r2544 old_data={'user_id': uid, 'email': email})()
renamed project to rhodecode
r547 form_result = {}
try:
form_result = _form.to_python(dict(request.POST))
Renamed name to firstname in forms...
r2544 UserModel().update_my_account(uid, form_result)
Added isanonymous decorator for checking permissions for anonymous access
r779 h.flash(_('Your account was updated successfully'),
renamed project to rhodecode
r547 category='success')
commit less models...
r1749 Session.commit()
refactor codes and setup for python 2.5...
r564 except formencode.Invalid, errors:
Deprecated UserModel removals...
r1501 c.user = User.get(self.rhodecode_user.user_id)
fixed admin settings form resubmition bug....
r687
highly improved performance of my_account page by removing super heavy htmlfill call on whole page
r2353 c.form = htmlfill.render(
render('admin/users/user_edit_my_account_form.html'),
renamed project to rhodecode
r547 defaults=errors.value,
errors=errors.error_dict or {},
prefix_error=False,
encoding="UTF-8")
highly improved performance of my_account page by removing super heavy htmlfill call on whole page
r2353 return render('admin/users/user_edit_my_account.html')
renamed project to rhodecode
r547 except Exception:
log.error(traceback.format_exc())
Added isanonymous decorator for checking permissions for anonymous access
r779 h.flash(_('error occurred during update of user %s') \
renamed project to rhodecode
r547 % form_result.get('username'), category='error')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 return redirect(url('my_account'))
My account pages shouldn't be accessible by anonymous users
r2626
@NotAnonymous()
Added views for new ajax functions, got somehow lost in previos commit
r2625 def my_account_my_repos(self):
all_repos = self.sa.query(Repository)\
.filter(Repository.user_id == self.rhodecode_user.user_id)\
.order_by(func.lower(Repository.repo_name))\
.all()
c.user_repos = ScmModel().get_repos(all_repos)
return render('admin/users/user_edit_my_account_repos.html')
My account pages shouldn't be accessible by anonymous users
r2626 @NotAnonymous()
Added views for new ajax functions, got somehow lost in previos commit
r2625 def my_account_my_pullrequests(self):
c.my_pull_requests = PullRequest.query()\
.filter(PullRequest.user_id==
self.rhodecode_user.user_id)\
.all()
c.participate_in_pull_requests = \
[x.pull_request for x in PullRequestReviewers.query()\
.filter(PullRequestReviewers.user_id==
self.rhodecode_user.user_id)\
.all()]
return render('admin/users/user_edit_my_account_pullrequests.html')
Added isanonymous decorator for checking permissions for anonymous access
r779 @NotAnonymous()
renamed project to rhodecode
r547 @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
def create_repository(self):
"""GET /_admin/create_repository: Form to create a new item"""
added proper groups names in add repo from settings
r1161
refactoring of models names for repoGroup permissions
r1633 c.repo_groups = RepoGroup.groups_choices()
added proper groups names in add repo from settings
r1161 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
fixed typo in repo create
r2484 choices, c.landing_revs = ScmModel().get_repo_landing_revs()
added proper groups names in add repo from settings
r1161
renamed project to rhodecode
r547 new_repo = request.GET.get('repo', '')
Code refactor number 2
r1022 c.new_repo = repo_name_slug(new_repo)
added proper groups names in add repo from settings
r1161
renamed project to rhodecode
r547 return render('admin/repos/repo_add_create_repository.html')
Code refactoring,models renames...
r629
My account pages shouldn't be accessible by anonymous users
r2626 @NotAnonymous()
project refactoring, cleaned up lib.utils from rarly used functions, and place them...
r756 def get_hg_ui_settings(self):
ret = self.sa.query(RhodeCodeUi).all()
if not ret:
raise Exception('Could not get application ui settings !')
settings = {}
for each in ret:
k = each.ui_key
v = each.ui_value
if k == '/':
k = 'root_path'
if k.find('.') != -1:
k = k.replace('.', '_')
if each.ui_section == 'hooks':
v = each.ui_active
settings[each.ui_section + '_' + k] = v
return settings