def post(self, request, organization, team, project): if not can_remove_project(request.user, project): return HttpResponseRedirect(reverse('sentry')) form = self.get_form(request) if form.is_valid(): if project.status == ProjectStatus.VISIBLE: project.update(status=ProjectStatus.PENDING_DELETION) delete_project.delay(object_id=project.id) AuditLogEntry.objects.create( organization=organization, actor=request.user, ip_address=request.META['REMOTE_ADDR'], target_object=project.id, event=AuditLogEntryEvent.PROJECT_REMOVE, data=project.get_audit_log_data(), ) messages.add_message( request, messages.SUCCESS, _(u'The project %r was scheduled for deletion.') % (project.name.encode('utf-8'),)) return HttpResponseRedirect(reverse('sentry-organization-home', args=[team.organization.id])) context = { 'form': form, } return self.respond('sentry/projects/remove.html', context)
def delete(self, request, project): """ Delete a project Schedules a project for deletion. {method} {path} **Note:** Deletion happens asynchronously and therefor is not immediate. However once deletion has begun the state of a project changes and will be hidden from most public views. """ if project.is_internal_project(): return Response( '{"error": "Cannot remove projects internally used by Sentry."}', status=status.HTTP_403_FORBIDDEN) updated = Project.objects.filter( id=project.id, status=ProjectStatus.VISIBLE, ).update(status=ProjectStatus.PENDING_DELETION) if updated: delete_project.delay(object_id=project.id) AuditLogEntry.objects.create( organization=project.organization, actor=request.user, ip_address=request.META['REMOTE_ADDR'], target_object=project.id, event=AuditLogEntryEvent.PROJECT_REMOVE, data=project.get_audit_log_data(), ) return Response(status=204)
def delete(self, request, project): """ Delete a project Schedules a project for deletion. {method} {path} **Note:** Deletion happens asynchronously and therefor is not immediate. However once deletion has begun the state of a project changes and will be hidden from most public views. """ if project.is_internal_project(): return Response('{"error": "Cannot remove projects internally used by Sentry."}', status=status.HTTP_403_FORBIDDEN) updated = Project.objects.filter( id=project.id, status=ProjectStatus.VISIBLE, ).update(status=ProjectStatus.PENDING_DELETION) if updated: delete_project.delay(object_id=project.id) self.create_audit_entry( request=request, organization=project.organization, target_object=project.id, event=AuditLogEntryEvent.PROJECT_REMOVE, data=project.get_audit_log_data(), ) return Response(status=204)
def delete(self, request, project_id): project = Project.objects.get(id=project_id) if project.is_internal_project(): return Response( '{"error": "Cannot remove projects internally used by Sentry."}', status=status.HTTP_403_FORBIDDEN) if not (request.user.is_superuser or project.team.owner_id == request.user.id): return Response('{"error": "form"}', status=status.HTTP_403_FORBIDDEN) if project.status != STATUS_HIDDEN: project.update(status=STATUS_HIDDEN) delete_project.delay(object_id=project.id) AuditLogEntry.objects.create( organization=project.organization, actor=request.user, ip_address=request.META['REMOTE_ADDR'], target_object=project.id, event=AuditLogEntryEvent.PROJECT_REMOVE, data=project.get_audit_log_data(), ) return Response(status=204)
def remove_project(request, team, project): if not can_remove_project(request.user, project): return HttpResponseRedirect(reverse('sentry')) form = RemoveProjectForm(request.user, request.POST or None) if form.is_valid(): if project.status != STATUS_HIDDEN: project.update(status=STATUS_HIDDEN) delete_project.delay(object_id=project.id) messages.add_message( request, messages.SUCCESS, _('Deletion has been queued and will happen automatically.')) return HttpResponseRedirect(reverse('sentry-manage-team-projects', args=[project.team.slug])) context = csrf(request) context.update({ 'team': team, 'form': form, 'project': project, }) return render_to_response('sentry/projects/remove.html', context, request)
def post(self, request, organization, team, project): if not can_remove_project(request.user, project): return HttpResponseRedirect(reverse('sentry')) form = self.get_form(request) if form.is_valid(): if project.status == ProjectStatus.VISIBLE: project.update(status=ProjectStatus.PENDING_DELETION) delete_project.delay(object_id=project.id) AuditLogEntry.objects.create( organization=organization, actor=request.user, ip_address=request.META['REMOTE_ADDR'], target_object=project.id, event=AuditLogEntryEvent.PROJECT_REMOVE, data=project.get_audit_log_data(), ) messages.add_message( request, messages.SUCCESS, _(u'The project %r was scheduled for deletion.') % (project.name.encode('utf-8'), )) return HttpResponseRedirect( reverse('sentry-organization-home', args=[team.organization.id])) context = { 'form': form, } return self.respond('sentry/projects/remove.html', context)
def remove_project(request, team, project): if not can_remove_project(request.user, project): return HttpResponseRedirect(reverse('sentry')) form = RemoveProjectForm(request.user, request.POST or None) if form.is_valid(): if project.status != STATUS_HIDDEN: project.update(status=STATUS_HIDDEN) delete_project.delay(object_id=project.id) messages.add_message( request, messages.SUCCESS, _('Deletion has been queued and will happen automatically.')) return HttpResponseRedirect( reverse('sentry-manage-team-projects', args=[project.team.slug])) context = csrf(request) context.update({ 'team': team, 'form': form, 'project': project, }) return render_to_response('sentry/projects/remove.html', context, request)
def post(self, request, organization, team, project): if not can_remove_project(request.user, project): return HttpResponseRedirect(reverse('sentry')) form = self.get_form(request) if form.is_valid(): if project.status != STATUS_HIDDEN: project.update(status=STATUS_HIDDEN) delete_project.delay(object_id=project.id) AuditLogEntry.objects.create( organization=organization, actor=request.user, ip_address=request.META['REMOTE_ADDR'], target_object=project.id, event=AuditLogEntryEvent.PROJECT_REMOVE, data=project.get_audit_log_data(), ) messages.add_message( request, messages.SUCCESS, _('Deletion has been queued and will happen automatically.')) return HttpResponseRedirect(reverse('sentry-organization-home', args=[team.organization.id])) context = { 'form': form, } return self.respond('sentry/projects/remove.html', context)
def delete(self, request, project_id): """ Delete a project Schedules a project for deletion. {method} {path} **Note:** Deletion happens asyncrhonously and therefor is not immediate. However once deletion has begun the state of a project changes and will be hidden from most public views. """ project = Project.objects.get(id=project_id) if project.is_internal_project(): return Response('{"error": "Cannot remove projects internally used by Sentry."}', status=status.HTTP_403_FORBIDDEN) if not (request.user.is_superuser or project.team.owner_id == request.user.id): return Response('{"error": "form"}', status=status.HTTP_403_FORBIDDEN) if project.status == ProjectStatus.VISIBLE: project.update(status=ProjectStatus.PENDING_DELETION) delete_project.delay(object_id=project.id) AuditLogEntry.objects.create( organization=project.organization, actor=request.user, ip_address=request.META['REMOTE_ADDR'], target_object=project.id, event=AuditLogEntryEvent.PROJECT_REMOVE, data=project.get_audit_log_data(), ) return Response(status=204)
def delete(self, request, project): """ Delete a Project ```````````````` Schedules a project for deletion. Deletion happens asynchronously and therefor is not immediate. However once deletion has begun the state of a project changes and will be hidden from most public views. :pparam string organization_slug: the slug of the organization the project belongs to. :pparam string project_slug: the slug of the project to delete. :auth: required """ if project.is_internal_project(): return Response( '{"error": "Cannot remove projects internally used by Sentry."}', status=status.HTTP_403_FORBIDDEN) logging.getLogger('sentry.deletions').info( 'Project %s/%s (id=%s) removal requested by user (id=%s)', project.organization.slug, project.slug, project.id, request.user.id) updated = Project.objects.filter( id=project.id, status=ProjectStatus.VISIBLE, ).update(status=ProjectStatus.PENDING_DELETION) if updated: delete_project.delay(object_id=project.id, countdown=3600) self.create_audit_entry( request=request, organization=project.organization, target_object=project.id, event=AuditLogEntryEvent.PROJECT_REMOVE, data=project.get_audit_log_data(), ) return Response(status=204)
def delete(self, request, project): """ Delete a Project ```````````````` Schedules a project for deletion. Deletion happens asynchronously and therefor is not immediate. However once deletion has begun the state of a project changes and will be hidden from most public views. :pparam string organization_slug: the slug of the organization the project belongs to. :pparam string project_slug: the slug of the project to delete. :auth: required """ if project.is_internal_project(): return Response('{"error": "Cannot remove projects internally used by Sentry."}', status=status.HTTP_403_FORBIDDEN) logging.getLogger('sentry.deletions').info( 'Project %s/%s (id=%s) removal requested by user (id=%s)', project.organization.slug, project.slug, project.id, request.user.id) updated = Project.objects.filter( id=project.id, status=ProjectStatus.VISIBLE, ).update(status=ProjectStatus.PENDING_DELETION) if updated: delete_project.delay(object_id=project.id, countdown=3600) self.create_audit_entry( request=request, organization=project.organization, target_object=project.id, event=AuditLogEntryEvent.PROJECT_REMOVE, data=project.get_audit_log_data(), ) return Response(status=204)
def remove_project(request, team, project): if not can_remove_project(request.user, project): return HttpResponseRedirect(reverse('sentry')) project_list = filter(lambda x: x != project, Project.objects.get_for_user(request.user)) form = RemoveProjectForm(request.user, project_list, request.POST or None) if form.is_valid(): removal_type = form.cleaned_data['removal_type'] if removal_type == '1': from sentry.tasks.deletion import delete_project delete_project.delay(object_id=project.id) project.update(status=STATUS_HIDDEN) messages.add_message( request, messages.SUCCESS, _('Deletion has been queued and should occur shortly.')) elif removal_type == '2': new_project = form.cleaned_data['project'] project.merge_to(new_project) elif removal_type == '3': project.update(status=STATUS_HIDDEN) else: raise ValueError(removal_type) return HttpResponseRedirect( reverse('sentry-manage-team-projects', args=[project.team.slug])) context = csrf(request) context.update({ 'team': team, 'form': form, 'project': project, }) return render_to_response('sentry/projects/remove.html', context, request)
def remove_project(request, team, project): if not can_remove_project(request.user, project): return HttpResponseRedirect(reverse('sentry')) project_list = filter(lambda x: x != project, Project.objects.get_for_user(request.user)) form = RemoveProjectForm(request.user, project_list, request.POST or None) if form.is_valid(): removal_type = form.cleaned_data['removal_type'] if removal_type == '1': from sentry.tasks.deletion import delete_project delete_project.delay(object_id=project.id) project.update(status=STATUS_HIDDEN) messages.add_message( request, messages.SUCCESS, _('Deletion has been queued and should occur shortly.')) elif removal_type == '2': new_project = form.cleaned_data['project'] project.merge_to(new_project) elif removal_type == '3': project.update(status=STATUS_HIDDEN) else: raise ValueError(removal_type) return HttpResponseRedirect(reverse('sentry-manage-team-projects', args=[project.team.slug])) context = csrf(request) context.update({ 'team': team, 'form': form, 'project': project, }) return render_to_response('sentry/projects/remove.html', context, request)
def delete(self, request, project_id): project = Project.objects.get(id=project_id) if project.is_internal_project(): return Response('{"error": "Cannot remove projects internally used by Sentry."}', status=status.HTTP_403_FORBIDDEN) if not (request.user.is_superuser or project.team.owner_id == request.user.id): return Response('{"error": "form"}', status=status.HTTP_403_FORBIDDEN) if project.status != STATUS_HIDDEN: project.update(status=STATUS_HIDDEN) delete_project.delay(object_id=project.id) AuditLogEntry.objects.create( organization=project.organization, actor=request.user, ip_address=request.META['REMOTE_ADDR'], target_object=project.id, event=AuditLogEntryEvent.PROJECT_REMOVE, data=project.get_audit_log_data(), ) return Response(status=204)