Beispiel #1
0
    def test_login(self):
        TOKEN_ID = 1

        form_data = {
            'method': 'Login',
            'password': self.PASSWORD,
            'username': self.TEST_USER
        }

        self.mox.StubOutWithMock(api, 'token_create')
        aToken = self.mox.CreateMock(api.Token)
        aToken.id = TOKEN_ID
        aToken.serviceCatalog = {}
        api.token_create(IsA(http.HttpRequest), "", self.TEST_USER,
                         self.PASSWORD).AndReturn(aToken)

        self.mox.StubOutWithMock(api, 'token_info')
        tokenInfo = {
            'user': self.TEST_USER,
            'tenant': self.TEST_TENANT,
            'admin': False
        }
        api.token_info(IsA(http.HttpRequest), aToken).AndReturn(tokenInfo)

        self.mox.ReplayAll()

        res = self.client.post(reverse('auth_login'), form_data)

        self.assertRedirectsNoFollow(res, reverse('dash_overview'))

        self.mox.VerifyAll()
    def test_login(self):
        TOKEN_ID = 1

        form_data = {'method': 'Login',
                    'password': self.PASSWORD,
                    'username': self.TEST_USER}

        self.mox.StubOutWithMock(api, 'token_create')
        aToken = self.mox.CreateMock(api.Token)
        aToken.id = TOKEN_ID
        aToken.serviceCatalog = {}
        api.token_create(IsA(http.HttpRequest), "", self.TEST_USER,
                         self.PASSWORD).AndReturn(aToken)

        self.mox.StubOutWithMock(api, 'token_info')
        tokenInfo = {'user': self.TEST_USER,
                     'tenant': self.TEST_TENANT,
                     'admin': False}
        api.token_info(IsA(http.HttpRequest), aToken).AndReturn(tokenInfo)

        self.mox.ReplayAll()

        res = self.client.post(reverse('auth_login'), form_data)

        self.assertRedirectsNoFollow(res, reverse('dash_overview'))

        self.mox.VerifyAll()
    def test_switch_tenants(self):
        NEW_TENANT = 'newTenant'
        TOKEN_ID = 1

        self.setActiveUser(self.TEST_TOKEN, self.TEST_USER, self.TEST_TENANT,
                           False, self.TEST_SERVICE_CATALOG)

        form_data = {'method': 'LoginWithTenant',
                     'password': self.PASSWORD,
                     'tenant': NEW_TENANT,
                     'username': self.TEST_USER}

        self.mox.StubOutWithMock(api, 'token_create')
        aToken = self.mox.CreateMock(api.Token)
        aToken.id = TOKEN_ID
        aToken.serviceCatalog = {}
        api.token_create(IsA(http.HttpRequest), NEW_TENANT, self.TEST_USER,
                         self.PASSWORD).AndReturn(aToken)

        self.mox.StubOutWithMock(api, 'token_info')
        tokenInfo = {'user': self.TEST_USER,
                     'tenant': NEW_TENANT,
                     'admin': False}
        api.token_info(IsA(http.HttpRequest), aToken).AndReturn(tokenInfo)

        self.mox.ReplayAll()

        res = self.client.post(reverse('auth_switch', args=[NEW_TENANT]),
                               form_data)

        self.assertRedirectsNoFollow(res, reverse('dash_overview'))
        self.assertEqual(self.client.session['tenant'], NEW_TENANT)

        self.mox.VerifyAll()
    def handle(self, request, data):
        try:
            token = api.token_create(request,
                                     data.get('tenant', ''),
                                     data['username'],
                                     data['password'])
            info = api.token_info(request, token)

            request.session['token'] = token.id
            request.session['user'] = info['user']
            request.session['tenant'] = data.get('tenant', info['tenant'])
            request.session['admin'] = info['admin']
            request.session['serviceCatalog'] = token.serviceCatalog
            LOG.info('Login form for user "%s". Service Catalog data:\n%s' %
                     (data['username'], token.serviceCatalog))

            return shortcuts.redirect('dash_overview')

        except api_exceptions.Unauthorized as e:
            msg = 'Error authenticating: %s' % e.message
            LOG.error(msg, exc_info=True)
            messages.error(request, msg)
        except api_exceptions.ApiException as e:
            messages.error(request, 'Error authenticating with keystone: %s' %
                                     e.message)
Beispiel #5
0
    def test_switch_tenants(self):
        NEW_TENANT = 'newTenant'
        TOKEN_ID = 1

        self.setActiveUser(self.TEST_TOKEN, self.TEST_USER, self.TEST_TENANT,
                           False, self.TEST_SERVICE_CATALOG)

        form_data = {
            'method': 'LoginWithTenant',
            'password': self.PASSWORD,
            'tenant': NEW_TENANT,
            'username': self.TEST_USER
        }

        self.mox.StubOutWithMock(api, 'token_create')
        aToken = self.mox.CreateMock(api.Token)
        aToken.id = TOKEN_ID
        aToken.serviceCatalog = {}
        api.token_create(IsA(http.HttpRequest), NEW_TENANT, self.TEST_USER,
                         self.PASSWORD).AndReturn(aToken)

        self.mox.StubOutWithMock(api, 'token_info')
        tokenInfo = {
            'user': self.TEST_USER,
            'tenant': NEW_TENANT,
            'admin': False
        }
        api.token_info(IsA(http.HttpRequest), aToken).AndReturn(tokenInfo)

        self.mox.ReplayAll()

        res = self.client.post(reverse('auth_switch', args=[NEW_TENANT]),
                               form_data)

        self.assertRedirectsNoFollow(res, reverse('dash_overview'))
        self.assertEqual(self.client.session['tenant'], NEW_TENANT)

        self.mox.VerifyAll()
Beispiel #6
0
    def handle(self, request, data):
        try:
            token = api.auth_api().tokens.create("",
                                                 data['username'],
                                                 data['password'])
            info = api.token_info(token)
            request.session['token'] = token.id
            request.session['user'] = info['user']
            request.session['tenant'] = info['tenant']
            request.session['admin'] = info['admin']
            request.session['serviceCatalog'] = token.serviceCatalog
            logging.info(token.serviceCatalog)

            if request.session['admin']:
                return shortcuts.redirect('syspanel_overview')
            else:
                return shortcuts.redirect('dash_overview')

        except api_exceptions.Unauthorized as e:
            messages.error(request, 'Error authenticating: %s' % e.message)
Beispiel #7
0
    def handle(self, request, data):
        try:
            token = api.token_create(request, data.get('tenant', ''),
                                     data['username'], data['password'])
            info = api.token_info(request, token)

            request.session['token'] = token.id
            request.session['user'] = info['user']
            request.session['tenant'] = data.get('tenant', info['tenant'])
            request.session['admin'] = info['admin']
            request.session['serviceCatalog'] = token.serviceCatalog
            LOG.info('Login form for user "%s". Service Catalog data:\n%s' %
                     (data['username'], token.serviceCatalog))

            return shortcuts.redirect('dash_overview')

        except api_exceptions.Unauthorized as e:
            msg = 'Error authenticating: %s' % e.message
            LOG.error(msg, exc_info=True)
            messages.error(request, msg)
        except api_exceptions.ApiException as e:
            messages.error(
                request, 'Error authenticating with keystone: %s' % e.message)
    def test_token_info(self):
        """ This function uses the keystone api, but not through an
            api client, because there doesn't appear to be one for
            keystone
        """
        GLANCE_URL = "http://glance/glance_api/"
        KEYSTONE_HOST = "keystonehost"
        KEYSTONE_PORT = 8080
        KEYSTONE_URL = "http://%s:%d/keystone/" % (KEYSTONE_HOST, KEYSTONE_PORT)

        serviceCatalog = {
            "glance": [{"adminURL": GLANCE_URL + "admin", "internalURL": GLANCE_URL + "internal"}],
            "identity": [{"adminURL": KEYSTONE_URL + "admin", "internalURL": KEYSTONE_URL + "internal"}],
        }

        token = Token(TEST_TOKEN_ID, TEST_TENANT_ID, TEST_USERNAME, serviceCatalog)

        jsonData = {
            "auth": {
                "token": {"expires": "2011-07-02T02:01:19.382655", "id": "3c5748d5-bec6-4215-843a-f959d589f4b0"},
                "user": {"username": "******", "roleRefs": [{"roleId": "Minion"}], "tenantId": u"1234"},
            }
        }

        jsonDataAdmin = {
            "auth": {
                "token": {"expires": "2011-07-02T02:01:19.382655", "id": "3c5748d5-bec6-4215-843a-f959d589f4b0"},
                "user": {"username": "******", "roleRefs": [{"roleId": "Admin"}], "tenantId": u"1234"},
            }
        }

        # setup test where user is not admin
        self.mox.StubOutClassWithMocks(httplib, "HTTPConnection")

        conn = httplib.HTTPConnection(KEYSTONE_HOST, KEYSTONE_PORT)
        response = self.mox.CreateMock(httplib.HTTPResponse)

        conn.request(IsA(str), IsA(str), headers=IsA(dict))
        conn.getresponse().AndReturn(response)

        response.read().AndReturn(json.dumps(jsonData))

        expected_nonadmin_val = {"tenant": "1234", "user": "******", "admin": False}

        # setup test where user is admin
        conn = httplib.HTTPConnection(KEYSTONE_HOST, KEYSTONE_PORT)
        response = self.mox.CreateMock(httplib.HTTPResponse)

        conn.request(IsA(str), IsA(str), headers=IsA(dict))
        conn.getresponse().AndReturn(response)

        response.read().AndReturn(json.dumps(jsonDataAdmin))

        expected_admin_val = {"tenant": "1234", "user": "******", "admin": True}

        self.mox.ReplayAll()

        ret_val = api.token_info(None, token)

        self.assertDictEqual(ret_val, expected_nonadmin_val)

        ret_val = api.token_info(None, token)

        self.assertDictEqual(ret_val, expected_admin_val)

        self.mox.VerifyAll()
    def test_token_info(self):
        """ This function uses the keystone api, but not through an
            api client, because there doesn't appear to be one for
            keystone
        """
        GLANCE_URL = 'http://glance/glance_api/'
        KEYSTONE_HOST = 'keystonehost'
        KEYSTONE_PORT = 8080
        KEYSTONE_URL = 'http://%s:%d/keystone/' % (KEYSTONE_HOST,
                                                   KEYSTONE_PORT)

        serviceCatalog = {
                'glance': [{'adminURL': GLANCE_URL + 'admin',
                            'internalURL': GLANCE_URL + 'internal'},
                          ],
                'identity': [{'adminURL': KEYSTONE_URL + 'admin',
                          'internalURL': KEYSTONE_URL + 'internal'},
                        ],
                }

        token = Token(TEST_TOKEN_ID, TEST_TENANT_ID,
                      TEST_USERNAME, serviceCatalog)

        jsonData = {
                'auth': {
                    'token': {
                        'expires': '2011-07-02T02:01:19.382655',
                        'id': '3c5748d5-bec6-4215-843a-f959d589f4b0',
                        },
                    'user': {
                        'username': '******',
                        'roleRefs': [{'roleId': 'Minion'}],
                        'tenantId': u'1234'
                        }
                    }
                }

        jsonDataAdmin = {
                'auth': {
                    'token': {
                        'expires': '2011-07-02T02:01:19.382655',
                        'id': '3c5748d5-bec6-4215-843a-f959d589f4b0',
                        },
                    'user': {
                        'username': '******',
                        'roleRefs': [{'roleId': 'Admin'}],
                        'tenantId': u'1234'
                        }
                    }
                }

        # setup test where user is not admin
        self.mox.StubOutClassWithMocks(httplib, 'HTTPConnection')

        conn = httplib.HTTPConnection(KEYSTONE_HOST, KEYSTONE_PORT)
        response = self.mox.CreateMock(httplib.HTTPResponse)

        conn.request(IsA(str), IsA(str), headers=IsA(dict))
        conn.getresponse().AndReturn(response)

        response.read().AndReturn(json.dumps(jsonData))

        expected_nonadmin_val = {
                'tenant': '1234',
                'user': '******',
                'admin': False
                }

        # setup test where user is admin
        conn = httplib.HTTPConnection(KEYSTONE_HOST, KEYSTONE_PORT)
        response = self.mox.CreateMock(httplib.HTTPResponse)

        conn.request(IsA(str), IsA(str), headers=IsA(dict))
        conn.getresponse().AndReturn(response)

        response.read().AndReturn(json.dumps(jsonDataAdmin))

        expected_admin_val = {
                'tenant': '1234',
                'user': '******',
                'admin': True
                }

        self.mox.ReplayAll()

        ret_val = api.token_info(None, token)

        self.assertDictEqual(ret_val, expected_nonadmin_val)

        ret_val = api.token_info(None, token)

        self.assertDictEqual(ret_val, expected_admin_val)

        self.mox.VerifyAll()