mirror of
https://github.com/nikdoof/dimension-sh-nikdoof-web.git
synced 2025-12-23 22:59:26 +00:00
67 lines
1.7 KiB
Python
Executable File
67 lines
1.7 KiB
Python
Executable File
#!/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)
|