pleroma2nip05/src/app.py

84 lines
2.4 KiB
Python
Raw Normal View History

2023-03-06 12:34:26 +01:00
#!/bin/env python3
# Pleroma2nip05: Server nip05 users for Pleroma users
# AGPL v3.0 or later licensed
# Copyright (C) Taurix IT 2023
import json
from flask import Flask, jsonify
import yaml
import psycopg2
import psycopg2.extras
2023-03-06 14:15:01 +01:00
from datetime import datetime
2023-03-06 12:34:26 +01:00
2023-03-07 14:50:04 +01:00
__VERSION__ = '1.0.0'
2023-03-06 12:34:26 +01:00
app = Flask('app')
print("Pleroma2nip05 v%s" % (__VERSION__))
with open(r'/etc/pleroma2nip05/config.yml') as configfile:
config = yaml.load(configfile, Loader=yaml.FullLoader)
# https://<domain>/.well-known/nostr.json
try:
# Connect to an existing database
connection = psycopg2.connect(user=config.get('pguser'),
password=config.get('pgpass'),
host=config.get('pghost'),
database=config.get('pleromadb'))
cursor = connection.cursor(cursor_factory = psycopg2.extras.RealDictCursor)
print("PostgreSQL server information")
print(connection.get_dsn_parameters(), "\n")
2023-03-06 14:15:01 +01:00
2023-03-06 12:34:26 +01:00
except (Exception, Error) as error:
print("Error while connecting to PostgreSQL", error)
# Get local users only
userquery = "SELECT nickname, fields FROM users WHERE nickname NOT LIKE '%@%';"
relays = [ "wss://relay.rebelbase.site" , "wss://nostr-pub.wellorder.net" , "wss://relay.orangepill.dev", "wss://relay.shitforce.one" ]
2023-03-06 14:15:01 +01:00
lastupdate = None
localusers = None
2023-03-06 12:34:26 +01:00
@app.route("/json")
def get_json():
2023-03-06 14:15:01 +01:00
global lastupdate
global localusers
global userquery
global userquery
print(lastupdate)
now = datetime.now()
if lastupdate is not None:
diff = (now - lastupdate)
age = diff.total_seconds()
else:
age = 9999999
if age > int(config.get('ttl')):
print('From DB')
cursor.execute(userquery)
localusers = cursor.fetchall()
lastupdate = now
else:
print('From cache')
2023-03-06 12:34:26 +01:00
nostr = {}
nostr['names'] = {}
2023-03-06 13:02:52 +01:00
nostr['relays'] = {}
2023-03-06 12:34:26 +01:00
if localusers is not None:
for user in localusers:
if user['nickname'] == 'gvs':
if user.get('fields') is not None:
for field in user.get('fields'):
if field.get('name').lower() == 'nostr':
nostr['names'][user['nickname']] = field.get('value')
2023-03-06 13:02:52 +01:00
nostr['relays'][field.get('value')] = relays
2023-03-06 12:34:26 +01:00
2023-03-06 13:02:52 +01:00
# print(json.dumps(nostr))
2023-03-06 12:34:26 +01:00
return json.dumps(nostr)