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')