Support IndexNox

This commit is contained in:
Konstantin 2024-04-05 18:46:44 +02:00
parent 6bd0df1f34
commit 9b4bb6c9f1
5 changed files with 53 additions and 4 deletions

9
base/indexnow.py Normal file
View file

@ -0,0 +1,9 @@
import hashlib
from base64 import urlsafe_b64encode
from django.conf import settings
from django.utils.crypto import pbkdf2
def get_key():
return settings.INDEXNOW_KEY

View file

@ -1,3 +1,14 @@
from django.shortcuts import render
from django.conf import settings
from django.http import Http404, HttpResponse
from django.utils.crypto import constant_time_compare
from django.views import View
from base.indexnow import get_key
class KeyView(View):
def get(self, request, key):
if not constant_time_compare(key, get_key()):
raise Http404()
return HttpResponse(key)
# Create your views here.

25
base/wagtail_hooks.py Normal file
View file

@ -0,0 +1,25 @@
from django.conf import settings
from wagtail import hooks
from wagtail.models import Page
from urllib.parse import urlparse
from base.indexnow import get_key
import requests
@hooks.register('after_publish_page')
def after_publish_page(request, page):
page_url = page.full_url
# avoid if the host is localhost (development)
print("preparing to notify")
if urlparse(page_url).hostname == "localhost":
print("not notifying indexnow for localhost" + get_key() + ", page url: " + page_url)
return
session = requests.Session()
session.post(
"https://api.indexnow.org/indexnow",
json={
"host": urlparse(page_url).hostname,
"urlList": [page_url],
"key": get_key(),
},
).raise_for_status()