def pingback_ping(source, target): """pingback.ping(sourceURI, targetURI) => 'Pingback message' Notifies the server that a link has been added to sourceURI, pointing to targetURI. See: http://hixie.ch/specs/pingback/pingback-1.0""" try: if source == target: return UNDEFINED_ERROR site = Site.objects.get_current() try: document = ''.join(urlopen(source).readlines()) except (HTTPError, URLError): return SOURCE_DOES_NOT_EXIST if not target in document: return SOURCE_DOES_NOT_LINK scheme, netloc, path, query, fragment = urlsplit(target) if netloc != site.domain: return TARGET_DOES_NOT_EXIST try: view, args, kwargs = resolve(path) except Resolver404: return TARGET_DOES_NOT_EXIST try: entry = Entry.published.get( slug=kwargs['slug'], creation_date__year=kwargs['year'], creation_date__month=kwargs['month'], creation_date__day=kwargs['day']) if not entry.pingbacks_are_open: return TARGET_IS_NOT_PINGABLE except (KeyError, Entry.DoesNotExist): return TARGET_IS_NOT_PINGABLE soup = BeautifulSoup(document) title = soup.find('title') title = title and strip_tags(title) or _('No title') description = generate_pingback_content(soup, target, PINGBACK_CONTENT_LENGTH) pingback, created = comments.get_model().objects.get_or_create( content_type=ContentType.objects.get_for_model(Entry), object_pk=entry.pk, user_url=source, site=site, defaults={'comment': description, 'user_name': title, 'submit_date': timezone.now()}) if created: pingback.flags.create(user=get_user_flagger(), flag=PINGBACK) pingback_was_posted.send(pingback.__class__, pingback=pingback, entry=entry) return 'Pingback from %s to %s registered.' % (source, target) return PINGBACK_ALREADY_REGISTERED except: return UNDEFINED_ERROR
def pingback_ping(source, target): """pingback.ping(sourceURI, targetURI) => 'Pingback message' Notifies the server that a link has been added to sourceURI, pointing to targetURI. See: http://hixie.ch/specs/pingback/pingback-1.0""" try: if source == target: return UNDEFINED_ERROR site = Site.objects.get_current() try: document = ''.join(urlopen(source).readlines()) except (HTTPError, URLError): return SOURCE_DOES_NOT_EXIST if not target in document: return SOURCE_DOES_NOT_LINK scheme, netloc, path, query, fragment = urlsplit(target) if netloc != site.domain: return TARGET_DOES_NOT_EXIST try: view, args, kwargs = resolve(path) except Resolver404: return TARGET_DOES_NOT_EXIST try: entry = Entry.published.get( slug=kwargs['slug'], creation_date__year=kwargs['year'], creation_date__month=kwargs['month'], creation_date__day=kwargs['day']) if not entry.pingbacks_are_open: return TARGET_IS_NOT_PINGABLE except (KeyError, Entry.DoesNotExist): return TARGET_IS_NOT_PINGABLE soup = BeautifulSoup(document) title = soup.find('title') title = title and strip_tags(title) or _('No title') description = generate_pingback_content(soup, target, PINGBACK_CONTENT_LENGTH) pingback, created = comments.get_model().objects.get_or_create( content_type=ContentType.objects.get_for_model(Entry), object_pk=entry.pk, user_url=source, site=site, defaults={'comment': description, 'user_name': title}) if created: pingback.flags.create(user=get_user_flagger(), flag=PINGBACK) pingback_was_posted.send(pingback.__class__, pingback=pingback, entry=entry) return 'Pingback from %s to %s registered.' % (source, target) return PINGBACK_ALREADY_REGISTERED except: return UNDEFINED_ERROR
def pingback_ping(source, target): """ pingback.ping(sourceURI, targetURI) => 'Pingback message' Notifies the server that a link has been added to sourceURI, pointing to targetURI. See: http://hixie.ch/specs/pingback/pingback-1.0 """ try: if source == target: return UNDEFINED_ERROR site = Site.objects.get_current() try: document = ''.join(map( lambda byte_line: byte_line.decode('utf-8'), urlopen(source).readlines())) except (HTTPError, URLError): return SOURCE_DOES_NOT_EXIST if target not in document: return SOURCE_DOES_NOT_LINK target_splitted = urlsplit(target) if target_splitted.netloc != site.domain: return TARGET_DOES_NOT_EXIST try: view, args, kwargs = resolve(target_splitted.path) except Resolver404: return TARGET_DOES_NOT_EXIST try: entry = Entry.published.get( slug=kwargs['slug'], publication_date__year=kwargs['year'], publication_date__month=kwargs['month'], publication_date__day=kwargs['day']) if not entry.pingbacks_are_open: return TARGET_IS_NOT_PINGABLE except (KeyError, Entry.DoesNotExist): return TARGET_IS_NOT_PINGABLE soup = BeautifulSoup(document, 'html.parser') title = str(soup.find('title')) title = title and strip_tags(title) or _('No title') description = generate_pingback_content(soup, target, PINGBACK_CONTENT_LENGTH) pingback_klass = comments.get_model() pingback_datas = { 'content_type': ContentType.objects.get_for_model(Entry), 'object_pk': entry.pk, 'site': site, 'user_url': source, 'user_name': title, 'comment': description } pingback = pingback_klass(**pingback_datas) if check_is_spam(pingback, entry, FakeRequest()): return PINGBACK_IS_SPAM pingback_defaults = {'comment': pingback_datas.pop('comment'), 'user_name': pingback_datas.pop('user_name')} pingback, created = pingback_klass.objects.get_or_create( defaults=pingback_defaults, **pingback_datas) if created: pingback.flags.create(user=get_user_flagger(), flag=PINGBACK) pingback_was_posted.send(pingback.__class__, pingback=pingback, entry=entry) return 'Pingback from %s to %s registered.' % (source, target) return PINGBACK_ALREADY_REGISTERED except Exception: return UNDEFINED_ERROR
def pingback_ping(source, target): """ pingback.ping(sourceURI, targetURI) => 'Pingback message' Notifies the server that a link has been added to sourceURI, pointing to targetURI. See: http://hixie.ch/specs/pingback/pingback-1.0 """ try: if source == target: return UNDEFINED_ERROR site = Site.objects.get_current() try: document = ''.join(map( lambda byte_line: byte_line.decode('utf-8'), urlopen(source).readlines())) except (HTTPError, URLError): return SOURCE_DOES_NOT_EXIST if target not in document: return SOURCE_DOES_NOT_LINK target_splitted = urlsplit(target) if target_splitted.netloc != site.domain: return TARGET_DOES_NOT_EXIST try: view, args, kwargs = resolve(target_splitted.path) except Resolver404: return TARGET_DOES_NOT_EXIST try: entry = Entry.published.get( slug=kwargs['slug'], publication_date__year=kwargs['year'], publication_date__month=kwargs['month'], publication_date__day=kwargs['day']) if not entry.pingbacks_are_open: return TARGET_IS_NOT_PINGABLE except (KeyError, Entry.DoesNotExist): return TARGET_IS_NOT_PINGABLE soup = BeautifulSoup(document, 'html.parser') title = six.text_type(soup.find('title')) title = title and strip_tags(title) or _('No title') description = generate_pingback_content(soup, target, PINGBACK_CONTENT_LENGTH) pingback_klass = comments.get_model() pingback_datas = { 'content_type': ContentType.objects.get_for_model(Entry), 'object_pk': entry.pk, 'site': site, 'user_url': source, 'user_name': title, 'comment': description } pingback = pingback_klass(**pingback_datas) if check_is_spam(pingback, entry, FakeRequest()): return PINGBACK_IS_SPAM pingback_defaults = {'comment': pingback_datas.pop('comment'), 'user_name': pingback_datas.pop('user_name')} pingback, created = pingback_klass.objects.get_or_create( defaults=pingback_defaults, **pingback_datas) if created: pingback.flags.create(user=get_user_flagger(), flag=PINGBACK) pingback_was_posted.send(pingback.__class__, pingback=pingback, entry=entry) return 'Pingback from %s to %s registered.' % (source, target) return PINGBACK_ALREADY_REGISTERED except Exception: return UNDEFINED_ERROR