# vim: tabstop=4 shiftwidth=4 softtabstop=4# Copyright 2012 United States Government as represented by the# Administrator of the National Aeronautics and Space Administration.# All Rights Reserved.## Copyright 2012 Nebula, Inc.##    Licensed under the Apache License, Version 2.0 (the "License"); you may#    not use this file except in compliance with the License. You may obtain#    a copy of the License at##         http://www.apache.org/licenses/LICENSE-2.0##    Unless required by applicable law or agreed to in writing, software#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the#    License for the specific language governing permissions and limitations#    under the License.import loggingfrom django import shortcutsfrom django.conf import settingsfrom django.contrib.auth import REDIRECT_FIELD_NAMEfrom django.utils.translation import ugettext as _import horizonfrom horizon import apifrom horizon import exceptionsfrom horizon import formsfrom horizon import usersfrom horizon.base import Horizonfrom horizon.views.auth_forms import Login, LoginWithTenant, _set_session_dataLOG = logging.getLogger(__name__)def user_home(request):    """ Reversible named view to direct a user to the appropriate homepage. """    return shortcuts.redirect(horizon.get_user_home(request.user))class LoginView(forms.ModalFormView):    """    Logs in a user and redirects them to the URL specified by    :func:`horizon.get_user_home`.    """    form_class = Login    template_name = "horizon/auth/login.html"    def get_context_data(self, **kwargs):        context = super(LoginView, self).get_context_data(**kwargs)        redirect_to = self.request.REQUEST.get(REDIRECT_FIELD_NAME, "")        context["redirect_field_name"] = REDIRECT_FIELD_NAME        context["next"] = redirect_to        return context    def get_initial(self):        initial = super(LoginView, self).get_initial()        current_region = self.request.session.get('region_endpoint', None)        requested_region = self.request.GET.get('region', None)        regions = dict(getattr(settings, "AVAILABLE_REGIONS", []))        if requested_region in regions and requested_region != current_region:            initial.update({'region': requested_region})        return initialdef switch_tenants(request, tenant_id):    """    Swaps a user from one tenant to another using the unscoped token from    Keystone to exchange scoped tokens for the new tenant.    """    form, handled = LoginWithTenant.maybe_handle(            request, initial={'tenant': tenant_id,                              'username': request.user.username})    if handled:        return handled    unscoped_token = request.session.get('unscoped_token', None)    if unscoped_token:        try:            token = api.token_create_scoped(request,                                            tenant_id,                                            unscoped_token)            _set_session_data(request, token)            user = users.User(users.get_user_from_request(request))            return shortcuts.redirect(Horizon.get_user_home(user))        except:            exceptions.handle(request,                              _("You are not authorized for that tenant."))    return shortcuts.redirect("horizon:auth_login")def logout(request):    """ Clears the session and logs the current user out. """    # BUG: NVD-CWE-Other Other    # request.session.clear()    # FIXED:     request.user_logout()    # FIXME(gabriel): we don't ship a view named splash    return shortcuts.redirect('splash')