##// END OF EJS Templates
Add MIT-Permissive-License.txt
Add MIT-Permissive-License.txt

File last commit:

r4116:ffd45b18 rhodecode-2.2.5-gpl
r4119:08baa849 rhodecode-2.2.5-gpl
Show More
auth_settings.py
139 lines | 5.2 KiB | text/x-python | PythonLexer
# -*- coding: utf-8 -*-
# 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.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
rhodecode.controllers.admin.auth_settings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pluggable authentication controller for RhodeCode
:created_on: Nov 26, 2010
:author: akesterson
"""
import pprint
import logging
import formencode.htmlfill
import traceback
from pylons import request, response, session, tmpl_context as c, url
from pylons.controllers.util import abort, redirect
from pylons.i18n.translation import _
from sqlalchemy.exc import DatabaseError
from rhodecode.lib import helpers as h
from rhodecode.lib.compat import json, formatted_json
from rhodecode.lib.base import BaseController, render
from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
from rhodecode.lib import auth_modules
from rhodecode.model.forms import AuthSettingsForm
from rhodecode.model.db import RhodeCodeSetting
from rhodecode.model.meta import Session
log = logging.getLogger(__name__)
class AuthSettingsController(BaseController):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
def __before__(self):
super(AuthSettingsController, self).__before__()
def __load_defaults(self):
c.available_plugins = [
'rhodecode.lib.auth_modules.auth_rhodecode',
'rhodecode.lib.auth_modules.auth_container',
'rhodecode.lib.auth_modules.auth_ldap',
'rhodecode.lib.auth_modules.auth_crowd',
]
c.enabled_plugins = RhodeCodeSetting.get_auth_plugins()
def index(self, defaults=None, errors=None, prefix_error=False):
self.__load_defaults()
_defaults = {}
# default plugins loaded
formglobals = {
"auth_plugins": ["rhodecode.lib.auth_modules.auth_rhodecode"]
}
formglobals.update(RhodeCodeSetting.get_auth_settings())
formglobals["plugin_settings"] = {}
formglobals["auth_plugins_shortnames"] = {}
_defaults["auth_plugins"] = formglobals["auth_plugins"]
for module in formglobals["auth_plugins"]:
plugin = auth_modules.loadplugin(module)
plugin_name = plugin.name
formglobals["auth_plugins_shortnames"][module] = plugin_name
formglobals["plugin_settings"][module] = plugin.plugin_settings()
for v in formglobals["plugin_settings"][module]:
fullname = ("auth_" + plugin_name + "_" + v["name"])
if "default" in v:
_defaults[fullname] = v["default"]
# Current values will be the default on the form, if there are any
setting = RhodeCodeSetting.get_by_name(fullname)
if setting:
_defaults[fullname] = setting.app_settings_value
# we want to show , seperated list of enabled plugins
_defaults['auth_plugins'] = ','.join(_defaults['auth_plugins'])
if defaults:
_defaults.update(defaults)
formglobals["defaults"] = _defaults
# set template context variables
for k, v in formglobals.iteritems():
setattr(c, k, v)
log.debug(pprint.pformat(formglobals, indent=4))
log.debug(formatted_json(defaults))
return formencode.htmlfill.render(
render('admin/auth/auth_settings.html'),
defaults=_defaults,
errors=errors,
prefix_error=prefix_error,
encoding="UTF-8",
force_defaults=True,
)
def auth_settings(self):
"""POST create and store auth settings"""
self.__load_defaults()
_form = AuthSettingsForm(c.enabled_plugins)()
log.debug("POST Result: %s" % formatted_json(dict(request.POST)))
try:
form_result = _form.to_python(dict(request.POST))
for k, v in form_result.items():
if k == 'auth_plugins':
# we want to store it comma separated inside our settings
v = ','.join(v)
log.debug("%s = %s" % (k, str(v)))
setting = RhodeCodeSetting.create_or_update(k, v)
Session().add(setting)
Session().commit()
h.flash(_('Auth settings updated successfully'),
category='success')
except formencode.Invalid, errors:
log.error(traceback.format_exc())
e = errors.error_dict or {}
return self.index(
defaults=errors.value,
errors=e,
prefix_error=False)
except Exception:
log.error(traceback.format_exc())
h.flash(_('error occurred during update of auth settings'),
category='error')
return redirect(url('auth_home'))