from json import loads
from re import sub
from datetime import datetime
+from email import utils
with open("config.json") as f:
config = loads(f.read())
# No known blocks
return responses.JSONResponse(status_code=200, content={})
+@app.get(base_url+"/rss")
+def rss(request: Request, domain: str = None):
+ conn = sqlite3.connect("blocks.db")
+ c = conn.cursor()
+ if domain != None:
+ wildchar = "*." + ".".join(domain.split(".")[-domain.count("."):])
+ punycode = domain.encode('idna').decode('utf-8')
+ c.execute("select blocker, blocked, block_level, reason, first_added, last_seen from blocks where blocked = ? or blocked = ? or blocked = ? or blocked = ? or blocked = ? or blocked = ? order by first_added desc limit 50",
+ (domain, "*." + domain, wildchar, get_hash(domain), punycode, "*." + punycode))
+ else:
+ c.execute("select blocker, blocked, block_level, reason, first_added, last_seen from blocks order by first_added desc limit 50")
+ blocks = c.fetchall()
+ c.close()
+
+ result = []
+ for blocker, blocked, block_level, reason, first_added, last_seen in blocks:
+ first_added = utils.format_datetime(datetime.fromtimestamp(first_added))
+ if reason == None or reason == '':
+ reason = "No reason provided."
+ else:
+ reason = "Provided reason: '" + reason + "'"
+ result.append({"blocker": blocker, "blocked": blocked, "block_level": block_level, "reason": reason, "first_added": first_added})
+
+ timestamp = utils.format_datetime(datetime.now())
+
+ return templates.TemplateResponse("rss.xml", {"request": request, "timestamp": timestamp, "domain": domain, "blocks": result}, headers={"Content-Type": "application/rss+xml"})
+
if __name__ == "__main__":
uvicorn.run("api:app", host="127.0.0.1", port=port, log_level="info")
-