Пример #1
0
def switch(request, project_id, next_url=None):
    """
    Switch session parameters to project with project_id
    """
    if project_id is None:
        raise ValueError(_("Missing 'project_id'"))

    if next_url is not None:
        next_url = next_url
    else:
        next_url = _build_next_url(request)

    try:
        project = Project.objects.get(id=project_id)
    except Project.DoesNotExist as err:
        messages.add_message(request, messages.ERROR,
                             _("Can't find this project"))
        log.exception('{}{}'.format(_('Exception:').encode('UTF-8'), err))
        return HttpResponseRedirect(next_url)

    keystone = Keystone(request)

    request.session['project_id'] = project_id
    request.session['project_name'] = project.name
    request.session['service_catalog'] = keystone.get_endpoints()
    request.session['auth_token'] = keystone.conn.auth_token

    return HttpResponseRedirect(next_url)
Пример #2
0
    def get_context_data(self, **kwargs):
        context = super(CreateProjectSuccessView,
                        self).get_context_data(**kwargs)

        request = kwargs.get('request')

        context['project_info'] = request.session.get('project_info')
        context['project_info']['auth_url'] = settings.KEYSTONE_URL

        project_name = context['project_info']['project_name']
        user_name = context['project_info']['user_name']
        password = context['project_info']['user_password']

        try:
            keystone = Keystone(request,
                                username=user_name,
                                password=password,
                                project_name=project_name)
            context['project_info']['endpoints'] = keystone.get_endpoints()
        except exceptions.AuthorizationFailure:
            msg = _('Unable to retrieve Keystone data')
            messages.add_message(request, messages.ERROR, msg)
            log.error(f'{request.user}: {msg}')

        return context
Пример #3
0
    def get_context_data(self, **kwargs):
        context = super(CreateProjectSuccessView,
                        self).get_context_data(**kwargs)

        request = kwargs.get("request")

        context["project_info"] = request.session.get("project_info")
        context["project_info"]["auth_url"] = settings.KEYSTONE_URL

        project_name = context["project_info"]["project_name"]
        user_name = context["project_info"]["user_name"]
        password = context["project_info"]["user_password"]

        try:
            keystone = Keystone(request,
                                username=user_name,
                                password=password,
                                project_name=project_name)
            context["project_info"]["endpoints"] = keystone.get_endpoints()
        except exceptions.AuthorizationFailure:
            msg = _("Unable to retrieve Keystone data")
            messages.add_message(request, messages.ERROR, msg)
            log.error(f"{request.user}: {msg}")

        return context
Пример #4
0
def maybe_update_token(request):
    token_time = request.session.get('token_time')

    if token_time is None or token_time < datetime.utcnow():
        log.info('Updating token for user [{}]'.format(request.user))

        try:
            keystone = Keystone(request)
        except exceptions.AuthorizationFailure:
            msg = _('Unable to retrieve Keystone data')
            messages.add_message(request, messages.ERROR, msg)
            log.error(f'{request.user}: {msg}')

            return False

        if keystone.conn is None:
            return False

        request.session['token_time'] = (
            timedelta(minutes=15) + datetime.utcnow()
        )
        request.session['auth_token'] = keystone.conn.auth_token
        request.session['service_catalog'] = keystone.get_endpoints()

        return True

    return False
Пример #5
0
    def post(self, request, *args, **kwargs):

        form = DeleteProjectConfirm(data=request.POST)

        if not form.is_valid():
            return self.render_to_response(
                self.get_context_data(form=form, request=request))

        user = form.data.get('user')
        password = form.data.get('password')

        project_id = self.kwargs.get('project_id')
        project_name = self.keystone.project_get(project_id).name

        try:
            keystone_app = Keystone(request,
                                    username=user,
                                    password=password,
                                    tenant_name=project_name)
        except exceptions.Unauthorized:
            # Falhou ao auntenticar com as credenciais enviadas pelo usuario
            messages.add_message(request, messages.ERROR,
                                 _('Invalid credentials.'))

            return self.render_to_response(
                context=self.get_context_data(form=form, request=request))

        endpoints = keystone_app.get_endpoints()
        storage_url = endpoints['adminURL']
        auth_token = self.keystone.conn.auth_token

        swift_del_result = delete_swift_account(storage_url, auth_token)

        if not swift_del_result:
            messages.add_message(request, messages.ERROR,
                                 _('Error when delete project'))

            return HttpResponseRedirect(
                reverse('edit_project', kwargs={'project_id': project_id}))

        try:
            self.keystone.vault_delete_project(project_id)
            messages.add_message(request, messages.SUCCESS,
                                 _('Successfully deleted project.'))

        except Exception as e:
            log.exception('{}{}'.format(_('Exception:').encode('UTF-8'), e))
            messages.add_message(request, messages.ERROR,
                                 _('Error when delete project'))

        return HttpResponseRedirect(self.success_url)
Пример #6
0
    def post(self, request, *args, **kwargs):

        form = DeleteProjectConfirm(data=request.POST)

        if not form.is_valid():
            return self.render_to_response(
                self.get_context_data(form=form, request=request)
            )

        user = form.data.get('user')
        password = form.data.get('password')

        project_id = self.kwargs.get('project_id')
        project_name = self.keystone.project_get(project_id).name

        try:
            keystone_app = Keystone(request,
                                    username=user,
                                    password=password,
                                    tenant_name=project_name)
        except exceptions.Unauthorized:
            # Falhou ao auntenticar com as credenciais enviadas pelo usuario
            messages.add_message(request, messages.ERROR, _('Invalid credentials.'))

            return self.render_to_response(
                context=self.get_context_data(form=form, request=request)
            )

        endpoints = keystone_app.get_endpoints()
        storage_url = endpoints['adminURL']
        auth_token = self.keystone.conn.auth_token

        swift_del_result = delete_swift_account(storage_url, auth_token)

        if not swift_del_result:
            messages.add_message(request, messages.ERROR,
                                 _('Error when delete project'))

            return HttpResponseRedirect(reverse('edit_project', kwargs={'project_id': project_id}))

        try:
            self.keystone.vault_delete_project(project_id)
            messages.add_message(request, messages.SUCCESS,
                                 _('Successfully deleted project.'))

        except Exception as e:
            log.exception('{}{}'.format(_('Exception:').encode('UTF-8'), e))
            messages.add_message(request, messages.ERROR,
                                 _('Error when delete project'))

        return HttpResponseRedirect(self.success_url)
Пример #7
0
    def get_context_data(self, **kwargs):
        context = super(CreateProjectSuccessView, self).get_context_data(**kwargs)

        request = kwargs.get('request')

        context['project_info'] = request.session.get('project_info')
        context['project_info']['auth_url'] = settings.KEYSTONE_URL

        project_name = context['project_info']['project_name']
        user_name = context['project_info']['user_name']
        password = context['project_info']['user_password']

        keystone = Keystone(request, username=user_name, password=password,
                            tenant_name=project_name)

        context['project_info']['endpoints'] = keystone.get_endpoints()

        return context
Пример #8
0
    def get_context_data(self, **kwargs):
        context = super(CreateProjectSuccessView,
                        self).get_context_data(**kwargs)

        request = kwargs.get('request')

        context['project_info'] = request.session.get('project_info')
        context['project_info']['auth_url'] = settings.KEYSTONE_URL

        project_name = context['project_info']['project_name']
        user_name = context['project_info']['user_name']
        password = context['project_info']['user_password']

        keystone = Keystone(request,
                            username=user_name,
                            password=password,
                            tenant_name=project_name)

        context['project_info']['endpoints'] = keystone.get_endpoints()

        return context
Пример #9
0
    def post(self, request, *args, **kwargs):
        form = DeleteProjectConfirm(data=request.POST)

        if not form.is_valid():
            return self.render_to_response(
                self.get_context_data(form=form, request=request))

        user = form.data.get('user')
        password = form.data.get('password')

        project_id = self.kwargs.get('project_id')
        project_name = self.keystone.project_get(project_id).name

        try:
            keystone_app = Keystone(request,
                                    username=user,
                                    password=password,
                                    project_name=project_name)
        except exceptions.Unauthorized:
            # Fail to authenticate with sent credentials
            messages.add_message(request, messages.ERROR,
                                 _('Invalid credentials.'))

            return self.render_to_response(
                context=self.get_context_data(form=form, request=request))
        except exceptions.AuthorizationFailure:
            msg = _('Unable to retrieve Keystone data')
            messages.add_message(request, messages.ERROR, msg)
            log.error(f'{request.user}: {msg}')

            return self.render_to_response(
                context=self.get_context_data(form=form, request=request))

        endpoints = keystone_app.get_endpoints()
        storage_url = endpoints.get('object_store').get('adminURL')
        auth_token = self.keystone.conn.auth_token

        swift_del_result = delete_swift_account(storage_url, auth_token)

        if not swift_del_result:
            messages.add_message(request, messages.ERROR,
                                 _('Error when deleting swift account'))

            return HttpResponseRedirect(
                reverse('edit_project',
                        kwargs={
                            'project_id': project_id,
                            'project': project_name
                        }))

        try:
            self.keystone.vault_project_delete(project_name)
            messages.add_message(request, messages.SUCCESS,
                                 _('Successfully deleted project.'))

        except Exception as e:
            log.exception('{}{}'.format(_('Exception:').encode('UTF-8'), e))
            messages.add_message(request, messages.ERROR,
                                 _('Error when deleting project'))

        # Purge project from current projects
        utils.purge_current_project(request, project_id)

        project_name = request.session.get('project_name')
        success_url = reverse('change_project')

        return HttpResponseRedirect(success_url)
Пример #10
0
    def post(self, request, *args, **kwargs):
        form = DeleteProjectConfirm(data=request.POST)

        if not form.is_valid():
            return self.render_to_response(
                self.get_context_data(form=form, request=request))

        user = form.data.get("user")
        password = form.data.get("password")

        project_id = self.kwargs.get("project_id")
        project_name = self.keystone.project_get(project_id).name

        try:
            keystone_app = Keystone(request,
                                    username=user,
                                    password=password,
                                    project_name=project_name)
        except exceptions.Unauthorized:
            # Fail to authenticate with sent credentials
            messages.add_message(request, messages.ERROR,
                                 _("Invalid credentials."))

            return self.render_to_response(
                context=self.get_context_data(form=form, request=request))
        except exceptions.AuthorizationFailure:
            msg = _("Unable to retrieve Keystone data")
            messages.add_message(request, messages.ERROR, msg)
            log.error(f"{request.user}: {msg}")

            return self.render_to_response(
                context=self.get_context_data(form=form, request=request))

        endpoints = keystone_app.get_endpoints()
        storage_url = endpoints.get("object_store").get("adminURL")
        auth_token = self.keystone.conn.auth_token

        result, msg = delete_swift_account(storage_url, auth_token)

        if not result:
            messages.add_message(
                request, messages.ERROR,
                f'{_("Error when deleting swift account")}: {msg}')

            return HttpResponseRedirect(
                reverse("edit_project",
                        kwargs={
                            "project_id": project_id,
                            "project": project_name
                        }))

        try:
            self.keystone.vault_project_delete(project_name)
            messages.add_message(request, messages.SUCCESS,
                                 _("Successfully deleted project."))
        except Exception as err:
            log.exception(f'Exception: {err}')
            messages.add_message(request, messages.ERROR,
                                 _("Error when deleting project"))

        # Purge project from current projects
        utils.purge_current_project(request, project_id)

        project_name = request.session.get("project_name")
        success_url = reverse("change_project")

        return HttpResponseRedirect(success_url)