#!/usr/bin/python3 import os,sys,html,json,datetime import urllib.parse import requests #if os.environ['SERVER_NAME']!='chrisoft.org': # import socks,socket # socks.set_default_proxy(socks.SOCKS5,"127.0.0.1",1080) # socket.socket=socks.socksocket # def getaddrinfo(*args): # return [(socket.AF_INET,socket.SOCK_STREAM,6,'',(args[0],args[1]))] # socket.getaddrinfo=getaddrinfo def fail(x=None): print('Status: 400 Bad Request',end='\r\n') print('Content-type: text/plain',end='\r\n') print(end='\r\n') print('400.') if x is not None:print(x) exit() if os.environ['REQUEST_METHOD']!='POST': fail() try: f=json.load(sys.stdin) except Exception: fail() try: mname=urllib.parse.unquote(f['mname'],encoding='utf-8') mcontent=urllib.parse.unquote(f['mcontent'],encoding='utf-8') mname=html.escape(mname) mcontent=html.escape(mcontent).replace('\n','
') mtime=datetime.datetime.now(tz=datetime.timezone(datetime.timedelta(hours=8))).strftime('%Y-%m-%d %H:%M') except Exception as e: fail() if len(mname)+len(mcontent)>16384: fail(x=':)') try: with open(os.environ['DOCUMENT_ROOT']+'/abuseipdb_key',mode='r',encoding='utf-8') as apikey_f: apikey=apikey_f.read() rsp=requests.get('https://api.abuseipdb.com/api/v2/check',params={'ipAddress':urllib.parse.quote(os.environ['REMOTE_ADDR']),'maxAgeInDays':'120','verbose':'','key':apikey.strip()}) rspj=rsp.json()['data'] if rspj['totalReports']>0: fail(x=':)') except Exception as e: fail(x=e) print('Status: 200 OK',end='\r\n') print('Content-type: text/plain',end='\r\n') print(end='\r\n') msgp=os.environ['DOCUMENT_ROOT']+'/leave-a-message/messages' with open(msgp,mode='r',encoding='utf-8') as f: o=json.load(f) newm={'cont':mcontent,'author':mname,'time':mtime} o.append(newm) with open(msgp,mode='w',encoding='utf-8') as f: json.dump(o,f) archivp=os.environ['DOCUMENT_ROOT']+'/leave-a-message/archive.txt' with open(archivp,mode='a',encoding='utf-8') as f: f.write(f'comment: {mcontent}\n') f.write(f'author: {mname}\n') f.write(f'time: {mtime}\n') f.write(f'IP: {os.environ["REMOTE_ADDR"]}\n\n') # vim: set noexpandtab :