예제 #1
0
    def test_authenticate(self):
        from tardis.tardis_portal.auth.ldap_auth import ldap_auth
        from django.core.handlers.wsgi import WSGIRequest
        from django.contrib.auth.models import User

        # Tests Authenticate API
        l = ldap_auth()
        req = WSGIRequest({"REQUEST_METHOD": "POST"})
        req._post = {'username': '******',
                     'password': '******',
                     'authMethod': 'ldap'}
        u = l.authenticate(req)
        u1 = {'email': '*****@*****.**',
              'display': 'Test', 'id': 'testuser1'}
        self.failUnlessEqual(u, u1)

        # Test authservice API
        from tardis.tardis_portal.auth import auth_service
        req = WSGIRequest({"REQUEST_METHOD": "POST"})
        req._post = {'username': '******',
                     'password': '******',
                     'authMethod': 'ldap'}
        user = auth_service.authenticate('ldap', request=req)
        self.assertTrue(isinstance(user, User))

        # Check that there is an entry in the user authentication table
        from tardis.tardis_portal.models import UserAuthentication
        userAuth = UserAuthentication.objects.get(
            userProfile__user=user,
            authenticationMethod=l.name)

        user1 = UserAuthentication.objects.get(username=user.username,
                        authenticationMethod='ldap').userProfile.user
        self.assertEqual(user, user1)
예제 #2
0
    def consume(self, event):
        # type: (Mapping[str, Any]) -> None
        server_meta = event['server_meta']

        environ = {
            'REQUEST_METHOD': 'SOCKET',
            'SCRIPT_NAME': '',
            'PATH_INFO': '/json/messages',
            'SERVER_NAME': '127.0.0.1',
            'SERVER_PORT': 9993,
            'SERVER_PROTOCOL': 'ZULIP_SOCKET/1.0',
            'wsgi.version': (1, 0),
            'wsgi.input': StringIO(),
            'wsgi.errors': sys.stderr,
            'wsgi.multithread': False,
            'wsgi.multiprocess': True,
            'wsgi.run_once': False,
            'zulip.emulated_method': 'POST'
        }

        if 'socket_user_agent' in event['request']:
            environ['HTTP_USER_AGENT'] = event['request']['socket_user_agent']
            del event['request']['socket_user_agent']

        # We're mostly using a WSGIRequest for convenience
        environ.update(server_meta['request_environ'])
        request = WSGIRequest(environ)
        # Note: If we ever support non-POST methods, we'll need to change this.
        request._post = event['request']
        request.csrf_processing_done = True

        user_profile = get_user_profile_by_id(server_meta['user_id'])
        request._cached_user = user_profile

        resp = self.handler.get_response(request)
        server_meta['time_request_finished'] = time.time()
        server_meta['worker_log_data'] = request._log_data

        resp_content = resp.content.decode('utf-8')
        response_data = ujson.loads(resp_content)
        if response_data['result'] == 'error':
            check_and_send_restart_signal()

        result = {
            'response': response_data,
            'req_id': event['req_id'],
            'server_meta': server_meta
        }

        redis_key = req_redis_key(event['req_id'])
        self.redis_client.hmset(redis_key, {
            'status': 'complete',
            'response': resp_content
        })

        # Since this sends back to Tornado, we can't use
        # call_consume_in_tests here.
        queue_json_publish(server_meta['return_queue'], result, lambda e: None)
예제 #3
0
    def test_authenticate(self):
        from tardis.tardis_portal.auth.ldap_auth import ldap_auth
        from django.core.handlers.wsgi import WSGIRequest
        from django.contrib.auth.models import User

        # Tests Authenticate API
        l = ldap_auth()
        req = WSGIRequest({"REQUEST_METHOD": "POST"})
        req._post = {
            'username': '******',
            'password': '******',
            'authMethod': 'ldap'
        }
        u = l.authenticate(req)
        u1 = {
            'email': '*****@*****.**',
            'display': 'Test',
            'id': 'testuser1'
        }
        self.failUnlessEqual(u, u1)

        # Test authservice API
        from tardis.tardis_portal.auth import auth_service
        req = WSGIRequest({"REQUEST_METHOD": "POST"})
        req._post = {
            'username': '******',
            'password': '******',
            'authMethod': 'ldap'
        }
        user = auth_service.authenticate('ldap', request=req)
        self.assertTrue(isinstance(user, User))

        # Check that there is an entry in the user authentication table
        from tardis.tardis_portal.models import UserAuthentication
        userAuth = UserAuthentication.objects.get(userProfile__user=user,
                                                  authenticationMethod=l.name)

        user1 = UserAuthentication.objects.get(
            username=user.username,
            authenticationMethod='ldap').userProfile.user
        self.assertEqual(user, user1)
예제 #4
0
    def consume(self, event):
        # type: (Mapping[str, Any]) -> None
        server_meta = event['server_meta']

        environ = {
            'REQUEST_METHOD': 'SOCKET',
            'SCRIPT_NAME': '',
            'PATH_INFO': '/json/messages',
            'SERVER_NAME': '127.0.0.1',
            'SERVER_PORT': 9993,
            'SERVER_PROTOCOL': 'ZULIP_SOCKET/1.0',
            'wsgi.version': (1, 0),
            'wsgi.input': StringIO(),
            'wsgi.errors': sys.stderr,
            'wsgi.multithread': False,
            'wsgi.multiprocess': True,
            'wsgi.run_once': False,
            'zulip.emulated_method': 'POST'
        }

        if 'socket_user_agent' in event['request']:
            environ['HTTP_USER_AGENT'] = event['request']['socket_user_agent']
            del event['request']['socket_user_agent']

        # We're mostly using a WSGIRequest for convenience
        environ.update(server_meta['request_environ'])
        request = WSGIRequest(environ)
        # Note: If we ever support non-POST methods, we'll need to change this.
        request._post = event['request']
        request.csrf_processing_done = True

        user_profile = get_user_profile_by_id(server_meta['user_id'])
        request._cached_user = user_profile

        resp = self.handler.get_response(request)
        server_meta['time_request_finished'] = time.time()
        server_meta['worker_log_data'] = request._log_data

        resp_content = resp.content.decode('utf-8')
        response_data = ujson.loads(resp_content)
        if response_data['result'] == 'error':
            check_and_send_restart_signal()

        result = {'response': response_data, 'req_id': event['req_id'],
                  'server_meta': server_meta}

        redis_key = req_redis_key(event['req_id'])
        self.redis_client.hmset(redis_key, {'status': 'complete',
                                            'response': resp_content})

        # Since this sends back to Tornado, we can't use
        # call_consume_in_tests here.
        queue_json_publish(server_meta['return_queue'], result, lambda e: None)
예제 #5
0
    def test_getgroups(self):
        from django.contrib.auth.models import User
        from django.core.handlers.wsgi import WSGIRequest
        from tardis.tardis_portal.auth import auth_service
        req = WSGIRequest({"REQUEST_METHOD": "POST"})
        req._post = {'username': '******',
                     'password': '******',
                     'authMethod': 'ldap'}
        user = auth_service.authenticate('ldap', request=req)
        self.assertTrue(isinstance(user, User))
        req.user = user

        from tardis.tardis_portal.auth.ldap_auth import ldap_auth
        # Tests getGroups
        l = ldap_auth()
        self.assertEqual([g for g in l.getGroups(req)], ['full', 'systems'])
예제 #6
0
    def test_getgroups(self):
        from django.contrib.auth.models import User
        from django.core.handlers.wsgi import WSGIRequest
        from tardis.tardis_portal.auth import auth_service
        req = WSGIRequest({"REQUEST_METHOD": "POST"})
        req._post = {
            'username': '******',
            'password': '******',
            'authMethod': 'ldap'
        }
        user = auth_service.authenticate('ldap', request=req)
        self.assertTrue(isinstance(user, User))
        req.user = user

        from tardis.tardis_portal.auth.ldap_auth import ldap_auth
        # Tests getGroups
        l = ldap_auth()
        self.assertEqual([g for g in l.getGroups(req)], ['full', 'systems'])