authentication: allow setting extern type with registration.

- This will allow external identity plugins to define proper externs instead of always
  using "rhodecode" one
This commit is contained in:
Marcin Kuzminski 2018-11-29 18:13:31 +01:00
parent 7f5b660427
commit 64c5591c2e
2 changed files with 23 additions and 6 deletions

View file

@ -273,16 +273,26 @@ class LoginView(BaseAppView):
route_name='register', request_method='POST',
renderer='rhodecode:templates/register.mako')
def register_post(self):
from rhodecode.authentication.plugins import auth_rhodecode
self.load_default_context()
captcha = self._get_captcha_data()
auto_active = 'hg.register.auto_activate' in User.get_default_user()\
.AuthUser().permissions['global']
extern_name = auth_rhodecode.RhodeCodeAuthPlugin.uid
extern_type = auth_rhodecode.RhodeCodeAuthPlugin.uid
register_form = RegisterForm(self.request.translate)()
try:
form_result = register_form.to_python(self.request.POST)
form_result['active'] = auto_active
external_identity = self.request.POST.get('external_identity')
if external_identity:
extern_name = external_identity
extern_type = external_identity
if captcha.active:
captcha_status, captcha_message = self.validate_captcha(
@ -295,11 +305,17 @@ class LoginView(BaseAppView):
raise formencode.Invalid(
_msg, _value, None, error_dict=error_dict)
new_user = UserModel().create_registration(form_result)
new_user = UserModel().create_registration(
form_result, extern_name=extern_name, extern_type=extern_type)
action_data = {'data': new_user.get_api_data(),
'user_agent': self.request.user_agent}
if external_identity:
action_data['external_identity'] = external_identity
audit_user = audit_logger.UserWrap(
username=new_user.username,
user_id=new_user.user_id,

View file

@ -344,8 +344,8 @@ class UserModel(BaseModel):
new_user.is_new_user = not edit
# for users that didn's specify auth type, we use RhodeCode built in
from rhodecode.authentication.plugins import auth_rhodecode
extern_name = extern_name or auth_rhodecode.RhodeCodeAuthPlugin.name
extern_type = extern_type or auth_rhodecode.RhodeCodeAuthPlugin.name
extern_name = extern_name or auth_rhodecode.RhodeCodeAuthPlugin.uid
extern_type = extern_type or auth_rhodecode.RhodeCodeAuthPlugin.uid
try:
new_user.username = username
@ -392,14 +392,15 @@ class UserModel(BaseModel):
log.error(traceback.format_exc())
raise
def create_registration(self, form_data):
def create_registration(self, form_data,
extern_name='rhodecode', extern_type='rhodecode'):
from rhodecode.model.notification import NotificationModel
from rhodecode.model.notification import EmailNotificationModel
try:
form_data['admin'] = False
form_data['extern_name'] = 'rhodecode'
form_data['extern_type'] = 'rhodecode'
form_data['extern_name'] = extern_name
form_data['extern_type'] = extern_type
new_user = self.create(form_data)
self.sa.add(new_user)