def login(nickname=None, password=None, login_method=None, remember=False, referer=None): """Login.""" if cfg.get('CFG_ACCESS_CONTROL_LEVEL_SITE') > 0: return abort(401) # page is not authorized if 'action' in request.values: warnings.warn('Action argument "{}" is not used anymore.'.format( request.values['action']), DeprecationWarning) form = LoginForm(CombinedMultiDict( [ImmutableMultiDict({'referer': referer, 'login_method': 'Local'} if referer else {'login_method': 'Local'}), request.values]), csrf_enabled=False) if request.method == "POST": try: if login_method == 'Local' and form.validate_on_submit() and \ authenticate(nickname, password, login_method=login_method, remember=remember): flash( _("You are logged in as %(nick)s.", nick=nickname), "success" ) return login_redirect(referer) else: flash(_("Invalid credentials."), "error") except Exception as e: current_app.logger.error( 'Exception during login process: %s', str(e) ) flash(_("Problem with login."), "error") return render_template('accounts/login.html', form=form), 401
def login_callback(user_info): """Login user base on SSO context (create one if necessary). Function should not raise an exception if `user_info` is not valid or `User` was not found in database. """ from invenio_accounts.models import User from invenio_ext.login import (authenticate, login_redirect, current_user) from invenio_ext.sqlalchemy import db user_info['group'] = fetch_groups(user_info['group']).values() user_info['external'] = fetch_external(user_info.get('external')) try: auth = authenticate(user_info['email'], login_method='SSO') if auth is None: user = User() user.nickname = user_info['nickname'] user.email = user_info['email'] user.password = '' user.settings = {'login_method': 'SSO'} db.session.add(user) db.session.commit() auth = authenticate(user_info['email'], login_method='SSO') if auth is None: return redirect('/') current_user.info['group'] = current_user.get('group', []) + \ user_info['group'] current_user.save() except: flash('Problem with login (%s)' % (str(user_info)), 'error') return redirect('/') return login_redirect()
def login(nickname=None, password=None, login_method=None, remember=False, referer=None): """Login.""" if cfg.get('CFG_ACCESS_CONTROL_LEVEL_SITE') > 0: return abort(401) # page is not authorized if 'action' in request.values: warnings.warn( 'Action argument "{}" is not used anymore.'.format( request.values['action']), DeprecationWarning) form = LoginForm(CombinedMultiDict([ ImmutableMultiDict({ 'referer': referer, 'login_method': 'Local' } if referer else {'login_method': 'Local'}), request.values ]), csrf_enabled=False) if request.method == "POST": try: if login_method == 'Local' and form.validate_on_submit() and \ authenticate(nickname, password, login_method=login_method, remember=remember): flash(_("You are logged in as %(nick)s.", nick=nickname), "success") return login_redirect(referer) else: flash(_("Invalid credentials."), "error") except Exception as e: current_app.logger.error('Exception during login process: %s', str(e)) flash(_("Problem with login."), "error") return render_template('accounts/login.html', form=form), 401