예제 #1
0
파일: utils.py 프로젝트: nabockh/code
 def _wrapped_view(self, request, *args, **kwargs):
     etype = event_type
     if type(event_type) == int or type(event_type) == str:
         params = [event_type, self.request.user if isinstance(self.request.user, User) else None]
     elif type(event_type) == dict:
         etype = event_type.get(self.request.method)
         params = [etype, self.request.user if isinstance(self.request.user, User) else None]
     else:
         raise TypeError('"event_type" argument can be only int, str or dict')
     result = view_func(self, request, *args, **kwargs)
     obj = getattr(self, object) if object else None
     if etype:
         if obj:
             params.append(obj)
         Event.log(*params)
     return result
예제 #2
0
파일: views.py 프로젝트: nabockh/code
def complete_process(request, backend, *args, **kwargs):
    """Authentication complete process"""
    # pop redirect value before the session is trashed on login()
    redirect_value = request.session.get(REDIRECT_FIELD_NAME, '') or \
                     request.REQUEST.get(REDIRECT_FIELD_NAME, '')
    user = auth_complete(request, backend, *args, **kwargs)

    if isinstance(user, HttpResponse):
        return user

    if not user and request.user.is_authenticated():
        return HttpResponseRedirect(redirect_value)

    msg = None
    if user:
        if getattr(user, 'is_active', True):
            # catch is_new flag before login() might reset the instance
            is_new = getattr(user, 'is_new', False)
            login(request, user)
            Event.log(metric_events.LOGIN, user)
            # user.social_user is the used UserSocialAuth instance defined
            # in authenticate process
            treshold = 10  # seconds
            if is_new:
                first_time_user_login.send(sender=request.user, user=request.user)
                if not redirect_value:
                    redirect_value = FIRST_TIME_USER_REDIRECT_URL
            social_user = user.social_user
            if redirect_value:
                request.session[REDIRECT_FIELD_NAME] = redirect_value or \
                                                       DEFAULT_REDIRECT
            else:
                redirect_value = REGISTERED_USER_REDIRECT_URL

            if setting('SOCIAL_AUTH_SESSION_EXPIRATION', True):
                # Set session expiration date if present and not disabled by
                # setting. Use last social-auth instance for current provider,
                # users can associate several accounts with a same provider.
                expiration = social_user.expiration_datetime()
                if expiration:
                    try:
                        request.session.set_expiry(expiration)
                    except OverflowError:
                        # Handle django time zone overflow, set default expiry.
                        request.session.set_expiry(None)

            # store last login backend name in session
            request.session['social_auth_last_login_backend'] = \
                    social_user.provider

            # Remove possible redirect URL from session, if this is a new
            # account, send him to the new-users-page if defined.
            new_user_redirect = backend_setting(backend,
                                           'SOCIAL_AUTH_NEW_USER_REDIRECT_URL')
            if new_user_redirect and is_new:
                url = new_user_redirect
            else:
                url = redirect_value or \
                      backend_setting(backend,
                                      'SOCIAL_AUTH_LOGIN_REDIRECT_URL') or \
                      DEFAULT_REDIRECT
        else:
            msg = setting('SOCIAL_AUTH_INACTIVE_USER_MESSAGE', None)
            url = backend_setting(backend, 'SOCIAL_AUTH_INACTIVE_USER_URL',
                                  LOGIN_ERROR_URL)
    else:
        msg = setting('LOGIN_ERROR_MESSAGE', None)
        url = backend_setting(backend, 'LOGIN_ERROR_URL', LOGIN_ERROR_URL)
    if msg:
        messages.error(request, msg)

    if redirect_value and redirect_value != url:
        redirect_value = quote(redirect_value)
        if '?' in url:
            url += '&%s=%s' % (REDIRECT_FIELD_NAME, redirect_value)
        else:
            url += '?%s=%s' % (REDIRECT_FIELD_NAME, redirect_value)
    return HttpResponseRedirect(url)