def replay_event(request, team, project, group, event_id): try: event = Event.objects.get(group=group, id=event_id) except Event.DoesNotExist: return HttpResponseRedirect(reverse('sentry')) interfaces = event.interfaces if 'sentry.interfaces.Http' not in interfaces: # TODO: show a proper error return HttpResponseRedirect(reverse('sentry')) http = interfaces['sentry.interfaces.Http'] if http.headers: headers = '\n'.join('%s: %s' % (k, v) for k, v in http.headers.iteritems() if k[0].upper() == k[0]) else: headers = '' if isinstance(http.data, dict): data = safe_urlencode(http.data) else: data = http.data if http.query_string: full_url = http.url + '?' + http.query_string else: full_url = http.url initial = { 'url': full_url, 'method': http.method, 'headers': headers, 'data': data, } form = ReplayForm(request.POST or None, initial=initial) if form.is_valid(): result = Replayer( url=form.cleaned_data['url'], method=form.cleaned_data['method'], data=form.cleaned_data['data'], headers=form.cleaned_data['headers'], ).replay() else: result = None context = { 'team': team, 'project': project, 'group': event.group, 'event': event, 'form': form, 'result': result, } context.update(csrf(request)) return render_to_response('sentry/events/replay_request.html', context, request)
def replay_event(request, team, project, group, event_id): try: event = Event.objects.get(group=group, id=event_id) except Event.DoesNotExist: return HttpResponseRedirect(reverse('sentry')) Event.objects.bind_nodes([event], 'data') interfaces = event.interfaces if 'sentry.interfaces.Http' not in interfaces: # TODO: show a proper error return HttpResponseRedirect(reverse('sentry')) http = interfaces['sentry.interfaces.Http'] if http.headers: headers = '\n'.join('%s: %s' % (k, v) for k, v in http.headers.iteritems() if k[0].upper() == k[0]) else: headers = '' if isinstance(http.data, dict): data = safe_urlencode(http.data) else: data = http.data if http.query_string: full_url = http.url + '?' + http.query_string else: full_url = http.url initial = { 'url': full_url, 'method': http.method, 'headers': headers, 'data': data, } form = ReplayForm(request.POST or None, initial=initial) if form.is_valid(): result = Replayer( url=form.cleaned_data['url'], method=form.cleaned_data['method'], data=form.cleaned_data['data'], headers=form.cleaned_data['headers'], ).replay() else: result = None context = { 'team': team, 'project': project, 'group': event.group, 'event': event, 'form': form, 'result': result, } context.update(csrf(request)) return render_to_response('sentry/events/replay_request.html', context, request)
def test_it_works(self): form = ReplayForm(dict( url='http://example.com', method='GET', data='', headers='Foo: bar\nContent-Type: text/plain', )) assert form.is_valid() assert form.cleaned_data['headers'] == {'Foo': 'bar', 'Content-Type': 'text/plain'}
def replay_event(request, organization, project, group, event_id): try: event = Event.objects.get(group=group, id=event_id) except Event.DoesNotExist: return HttpResponseRedirect(reverse('sentry')) Event.objects.bind_nodes([event], 'data') interfaces = event.interfaces if 'sentry.interfaces.Http' not in interfaces: # TODO: show a proper error return HttpResponseRedirect(reverse('sentry')) # TODO(mattrobenolt): Add Cookie as a header http = interfaces['sentry.interfaces.Http'] if http.headers: headers = '\n'.join('%s: %s' % (k, v) for k, v in http.headers if k[0].upper() == k[0]) else: headers = '' if isinstance(http.data, dict): data = safe_urlencode(http.data) else: data = http.data initial = { 'url': urlparse.urldefrag(http.full_url)[0], 'method': http.method, 'headers': headers, 'data': data, } form = ReplayForm(request.POST or None, initial=initial) if form.is_valid(): result = Replayer( url=form.cleaned_data['url'], method=form.cleaned_data['method'], data=form.cleaned_data['data'], headers=form.cleaned_data['headers'], ).replay() else: result = None context = { 'organization': organization, 'team': project.team, 'project': project, 'group': event.group, 'event': event, 'form': form, 'result': result, } context.update(csrf(request)) return render_to_response('sentry/events/replay_request.html', context, request)
def test_it_works(self): form = ReplayForm( dict( url='http://example.com', method='GET', data='', headers='Foo: bar\nContent-Type: text/plain', )) assert form.is_valid() assert form.cleaned_data['headers'] == { 'Foo': 'bar', 'Content-Type': 'text/plain' }
def handle(self, request, organization, project, team, group_id, event_id): try: event = Event.objects.get(group=group_id, id=event_id) except Event.DoesNotExist: return self.redirect(reverse('sentry')) Event.objects.bind_nodes([event], 'data') interfaces = event.interfaces if 'sentry.interfaces.Http' not in interfaces: # TODO: show a proper error return self.redirect(reverse('sentry')) # TODO(mattrobenolt): Add Cookie as a header http = interfaces['sentry.interfaces.Http'] if http.headers: headers = '\n'.join('%s: %s' % (k, v) for k, v in http.headers if k[0].upper() == k[0]) else: headers = '' if isinstance(http.data, dict): data = safe_urlencode(http.data) else: data = http.data initial = { 'url': urlparse.urldefrag(http.full_url)[0], 'method': http.method, 'headers': headers, 'data': data, } form = ReplayForm(request.POST or None, initial=initial) if form.is_valid(): result = Replayer( url=form.cleaned_data['url'], method=form.cleaned_data['method'], data=form.cleaned_data['data'], headers=form.cleaned_data['headers'], ).replay() else: result = None context = { 'group': event.group, 'event': event, 'form': form, 'result': result, } return self.respond('sentry/events/replay_request.html', context)