예제 #1
0
    def login(self, request):
        """
        Verify credentials
        """
        try:
            user = authenticate(request)

            if not user:
                raise AuthenticationFailed("User not authenticated.")

            if not user.is_active:
                raise AuthenticationFailed("This user has been disabled.")

            login(request, user)

            return Response(UserSerializer(user).data)
        except NoEmailException as ex:
            # The user's clientId didn't have an email
            logger.warning("Email required for login.", exc_info=ex)
            raise AuthenticationFailed(str(ex))
        except AuthError as ex:
            # This indicates an error that may require attention by the
            # Treeherder or Taskcluster teams.  Logging this to New Relic to
            # increase visibility.
            newrelic.agent.record_exception()
            logger.exception("Error", exc_info=ex)
            raise AuthenticationFailed(str(ex))
예제 #2
0
파일: auth.py 프로젝트: darkwing/treeherder
    def login(self, request):
        """
        Verify credentials with Taskcluster
        """
        auth_header = request.META.get("HTTP_TCAUTH", None)
        host = request.get_host().split(":")[0]
        port = request.get_port()

        try:
            user = authenticate(auth_header=auth_header,
                                host=host,
                                port=int(port))
            if not user:
                raise AuthenticationFailed("User not authenticated.")

            if not user.is_active:
                raise AuthenticationFailed("This user has been disabled.")

            login(request, user)

            return Response(UserSerializer(user).data)
        except TaskclusterAuthenticationFailed as ex:
            # This is an error where the user wasn't able to log in
            # for some reason.
            logger.warning("Error authenticating with Taskcluster",
                           exc_info=ex)
            raise AuthenticationFailed(ex.message)
        except (TaskclusterConnectionError, TaskclusterRestFailure) as ex:
            # This indicates an error that may require attention by the
            # Treeherder or Taskcluster teams.  Logging this to New Relic to
            # increase visibility.
            newrelic.agent.record_exception()
            logger.exception("Error communicating with Taskcluster",
                             exc_info=ex)
            raise AuthenticationFailed(ex.message)