Add antenna-ping script

This commit is contained in:
2021-06-30 14:49:20 +01:00
parent b9225f086c
commit 1155633165
2 changed files with 67 additions and 1 deletions

View File

@@ -23,4 +23,4 @@ deploy:
.PHONY: notify-antenna
notify-antenna:
tools/gemcall -u gemini://warmedal.se/~antenna/submit?dimension.sh/~nikdoof/logs/atom.xml
tools/antenna-ping dimension.sh/~nikdoof/logs/atom.xml

66
tools/antenna-ping Executable file
View File

@@ -0,0 +1,66 @@
#!/usr/bin/env python3.9
# Modified from ew0k's gemcall
# Requires Python 3.7+
import socket
import urllib.parse as up
import ssl
import sys
import argparse
up.uses_relative.append("gemini")
up.uses_netloc.append("gemini")
ANTENNA_PING_URL = 'gemini://warmedal.se/~antenna/submit'
def call_gemini(url, cert=None, key=None):
parsed = up.urlparse(url).encode('idna')
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.minimum_version = ssl.TLSVersion.TLSv1_2
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
if (cert and key):
context.load_cert_chain(cert, key)
sock = socket.create_connection((parsed.hostname, parsed.port or 1965))
ssock = context.wrap_socket(sock, server_hostname=parsed.hostname)
ssock.sendall((up.urlunparse(parsed).decode('UTF-8')+'\r\n').encode('ascii'))
res = ssock.makefile(mode="rb").read().decode('UTF-8')
# get the first line
try:
header = res.splitlines()[0]
resp_code = int(header.split(' ')[0])
except:
return False
else:
if resp_code >= 20 and resp_code < 30:
return True
else:
return False
def ping_antenna(url, antenna_url):
return call_gemini(f'{antenna_url}?{url}')
def main():
parser = argparse.ArgumentParser('antenna-ping')
parser.add_argument('url', nargs='+', help='URL of the atom feed to send to Antenna')
parser.add_argument('--antenna-url', default=ANTENNA_PING_URL)
args = parser.parse_args()
for url in args.url:
print(f'Sending {url}... ', end='')
if ping_antenna(url, antenna_url=args.antenna_url):
print('success')
else:
print('failed')
if __name__ == '__main__':
sys.exit(main() or 0)