def tenants(request):
    if not request.user or not request.user.is_authenticated():
        return {}

    try:
        return {'tenants': api.token_list_tenants(request, request.user.token)}
    except api_exceptions.BadRequest, e:
        messages.error(request, "Unable to retrieve tenant list from\
                                  keystone: %s" % e.message)
        return {'tenants': []}
def handle_login(request, username, password, tenant):
    try:
        token = api.token_create(request, tenant, username, password)
        info = api.token_info(request, token)
        if auth.Roles.needs_tenant(info['roles']):
            if not tenant:
                for tenant_obj in api.token_list_tenants(request, token.id):
                    if not tenant_obj.enabled:
                        continue
                    try:
                        tenant = tenant_obj.id
                        token = api.token_create(request, tenant, username, password)
                        info = api.token_info(request, token)
                    except openstackx.api.exceptions.Unauthorized:
                       continue
                    break
                if not tenant:
                    display_error(request, 'No tenants/projects for user %s' % username)
                    return shortcuts.redirect(topbar + '/splash')
        else:
            info['roles'] -= set(auth.Roles.TENANTED_ROLES)

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

        return shortcuts.redirect(auth.Roles.get_default_page(info['roles']))

    except api_exceptions.Unauthorized as e:
        display_error(request, 'Error authenticating: %s' % e.message)
        return shortcuts.redirect(topbar + '/splash')
    except api_exceptions.ApiException as e:
        display_error(request, 'Error authenticating with keystone: %s' % e.message)
        return shortcuts.redirect(topbar + '/splash')