def pingback_ping(self): source = self.params[0] target = self.params[1] slug = target.split('/')[-2] try: entry = Entry.objects.get(slug=slug) if not entry.allow_comments: raise Entry.DoesNotExist except Entry.DoesNotExist: return XmlRpcDispatcher.fault(33, 'The specified URI cannot be used as target') try: Comment.objects.get(entry=entry, type__in=['P', 'T'], author_uri=source) return XmlRpcDispatcher.fault(48, 'The pingback has already been registered') except Comment.DoesNotExist: pass s = Spider(source) if not s.backlinks(target): if s.code == 200: return XmlRpcDispatcher.fault(17, 'The source URI does not contain a link to the target URI') return XmlRpcDispatcher.fault(16, 'The source URI does not exist') Comment.objects.create(entry=entry, type='P', author=hostname_from_uri(source, http=False), author_uri=source, body='') return XmlRpcDispatcher.pingback_reply('Pingback stored')
def trackback_view(request, entry_id): title = request.POST.get('title') excerpt = request.POST.get('excerpt', '') url = request.POST.get('url') blog_name = request.POST.get('blog_name') if not url: return HttpResponse('''<?xml version="1.0" encoding="utf-8"?> <response> <error>1</error> <message>No URL specified</message> </response>''', mimetype='text/xml') if len(url) > 1024: return HttpResponse('''<?xml version="1.0" encoding="utf-8"?> <response> <error>1</error> <message>Entity Too Large</message> </response>''', mimetype='text/xml') if not is_absolute_link(url): return HttpResponse('''<?xml version="1.0" encoding="utf-8"?> <response> <error>1</error> <message>URL must match https?://.*</message> </response>''', mimetype='text/xml') entry = get_object_or_404(Entry, pk=entry_id) if not entry.allow_comments: return HttpResponse('''<?xml version="1.0" encoding="utf-8"?> <response> <error>1</error> <message>Trackbacks are not allowed for this entry</message> </response>''', mimetype='text/xml') try: Comment.objects.get(entry=entry, type__in=['T', 'P'], author_uri=url) return HttpResponse('''<?xml version="1.0" encoding="utf-8"?> <response> <error>1</error> <message>Trackback already registered</message> </response>''', mimetype='text/xml') except Comment.DoesNotExist: pass s = Spider(url) if not s.backlinks(entry.get_absolute_url()): return HttpResponse('''<?xml version="1.0" encoding="utf-8"?> <response> <error>1</error> <message>URL doesn't link back</message> </response>''', mimetype='text/xml') if not blog_name: blog_name = url.split('/')[2] if title: excerpt = '%s\n\n%s' % (title, excerpt) Comment.objects.create(entry=entry, author=blog_name, author_uri=url, body=excerpt, type='T') return HttpResponse('''<?xml version="1.0" encoding="utf-8"?> <response> <error>0</error> </response>''')