Ivan Kolodyazhny f33e5fd8ac Drop deprecated Keystone V2 API support
Keystone V2 API was deprecated in Stein release in Horizon and
removed from Keystone in Queens release.

Change-Id: I917e273d3174adf0874e516b3d635ccb8ba58a27
2019-09-12 17:15:07 +00:00

192 lines
7.2 KiB
Python

# Copyright 2018 SUSE Linux GmbH
#
# 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.
from django.conf import settings
from django import http
from django.template.loader import render_to_string
from django.urls import reverse
from django.urls import reverse_lazy
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
from horizon import forms
from horizon import tables
from horizon.utils import memoized
from horizon import views
from openstack_dashboard import api
from openstack_dashboard.dashboards.identity.application_credentials \
import forms as project_forms
from openstack_dashboard.dashboards.identity.application_credentials \
import tables as project_tables
INDEX_URL = "horizon:identity:application_credentials:index"
class IndexView(tables.DataTableView):
table_class = project_tables.ApplicationCredentialsTable
template_name = 'identity/application_credentials/index.html'
page_title = _("Application Credentials")
def needs_filter_first(self, table):
return self._needs_filter_first
def get_data(self):
app_creds = []
filters = self.get_filters()
self._needs_filter_first = False
# If filter_first is set and if there are not other filters
# selected, then search criteria must be provided
# and return an empty list
filter_first = settings.FILTER_DATA_FIRST
if filter_first['identity.application_credentials'] and not filters:
self._needs_filter_first = True
return app_creds
try:
app_creds = api.keystone.application_credential_list(
self.request, filters=filters)
except Exception:
exceptions.handle(
self.request,
_('Unable to retrieve application credential list.'))
return app_creds
class CreateView(forms.ModalFormView):
template_name = 'identity/application_credentials/create.html'
form_id = 'create_application_credential_form'
form_class = project_forms.CreateApplicationCredentialForm
submit_label = _("Create Application Credential")
submit_url = reverse_lazy(
'horizon:identity:application_credentials:create')
success_url = reverse_lazy(
'horizon:identity:application_credentials:success')
page_title = _("Create Application Credential")
def get_form_kwargs(self):
kwargs = super(CreateView, self).get_form_kwargs()
kwargs['next_view'] = CreateSuccessfulView
return kwargs
class CreateSuccessfulView(forms.ModalFormView):
template_name = 'identity/application_credentials/success.html'
page_title = _("Your Application Credential")
form_class = project_forms.CreateSuccessfulForm
model_id = "create_application_credential_successful_modal"
success_url = reverse_lazy(
'horizon:identity:application_credentials:index')
cancel_label = _("Close")
download_openrc_label = _("Download openrc file")
download_clouds_yaml_label = _("Download clouds.yaml")
def get_context_data(self, **kwargs):
context = super(CreateSuccessfulView, self).get_context_data(**kwargs)
context['download_openrc_label'] = self.download_openrc_label
context['download_clouds_yaml_label'] = self.download_clouds_yaml_label
context['download_openrc_url'] = reverse(
'horizon:identity:application_credentials:download_openrc')
context['download_clouds_yaml_url'] = reverse(
'horizon:identity:application_credentials:download_clouds_yaml')
return context
def get_initial(self):
app_cred = self.request.session['application_credential']
return {
'app_cred_id': app_cred['id'],
'app_cred_name': app_cred['name'],
'app_cred_secret': app_cred['secret']
}
def _get_context(request):
auth_url = api.base.url_for(request,
'identity',
endpoint_type='publicURL')
interface = 'public'
region = getattr(request.user, 'services_region', '')
app_cred = request.session['application_credential']
context = dict(auth_url=auth_url,
interface=interface,
region=region,
application_credential_id=app_cred['id'],
application_credential_name=app_cred['name'],
application_credential_secret=app_cred['secret'])
return context
def _render_attachment(filename, template, context, request):
content = render_to_string(template, context, request=request)
disposition = 'attachment; filename="%s"' % filename
response = http.HttpResponse(content, content_type="text/plain")
response['Content-Disposition'] = disposition.encode('utf-8')
response['Content-Length'] = str(len(response.content))
return response
def download_rc_file(request):
context = _get_context(request)
template = 'identity/application_credentials/openrc.sh.template'
filename = 'app-cred-%s-openrc.sh' % context['application_credential_name']
response = _render_attachment(filename, template, context, request)
return response
def download_clouds_yaml_file(request):
context = _get_context(request)
context['cloud_name'] = getattr(
settings, "OPENSTACK_CLOUDS_YAML_NAME", 'openstack')
context['profile'] = getattr(
settings, "OPENSTACK_CLOUDS_YAML_PROFILE", None)
context['regions'] = [
region_tuple[1] for region_tuple in getattr(
settings, "AVAILABLE_REGIONS", [])
]
template = 'identity/application_credentials/clouds.yaml.template'
filename = 'clouds.yaml'
return _render_attachment(filename, template, context, request)
class DetailView(views.HorizonTemplateView):
template_name = 'identity/application_credentials/detail.html'
page_title = "{{ application_credential.name }}"
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
app_cred = self.get_data()
table = project_tables.ApplicationCredentialsTable(self.request)
context["application_credential"] = app_cred
context["url"] = reverse(INDEX_URL)
context["actions"] = table.render_row_actions(app_cred)
return context
@memoized.memoized_method
def get_data(self):
try:
app_cred_id = self.kwargs['application_credential_id']
app_cred = api.keystone.application_credential_get(self.request,
app_cred_id)
except Exception:
exceptions.handle(
self.request,
_('Unable to retrieve application credential details.'),
redirect=reverse(INDEX_URL))
return app_cred