Initial version
This commit is contained in:
parent
73be78364a
commit
311a9a1b2e
2
.gitignore
vendored
2
.gitignore
vendored
@ -160,3 +160,5 @@ cython_debug/
|
||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||
#.idea/
|
||||
|
||||
venv
|
||||
|
||||
|
33
Gruntfile.js
Normal file
33
Gruntfile.js
Normal file
@ -0,0 +1,33 @@
|
||||
module.exports = function(grunt) {
|
||||
|
||||
// Project configuration.
|
||||
grunt.initConfig({
|
||||
pkg: grunt.file.readJSON( 'package.json' ),
|
||||
|
||||
// Tasks here
|
||||
version: {
|
||||
control: {
|
||||
options: {
|
||||
prefix: 'Version: '
|
||||
},
|
||||
src: [ 'control' ],
|
||||
},
|
||||
python: {
|
||||
options: {
|
||||
prefix: '__version__\\s*=\\s*\"'
|
||||
},
|
||||
src: [ 'src/*.py' ],
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
// Load all grunt plugins here
|
||||
grunt.loadNpmTasks('grunt-version');
|
||||
|
||||
// Bump version task
|
||||
grunt.registerTask( 'bump', [ 'version' ]);
|
||||
|
||||
// Release task
|
||||
grunt.registerTask( 'release', [ 'version', 'gitcommit', 'gittag', 'gitpush' ]);
|
||||
|
||||
};
|
25
README.md
25
README.md
@ -1,2 +1,27 @@
|
||||
# pleroma2nip05
|
||||
|
||||
## Install
|
||||
|
||||
Create a python venv
|
||||
`python3 -m venv venv`
|
||||
|
||||
Activate the venv
|
||||
`python3 -m venv venv`
|
||||
|
||||
Install requirements
|
||||
`pip3 install -r requirements`
|
||||
|
||||
## Create the config file
|
||||
|
||||
Create /etc/pleroma2nip05/config.yml from the config.yml in this repo
|
||||
|
||||
## Configure nginx
|
||||
|
||||
Add this to your Pleroma vhost
|
||||
|
||||
`
|
||||
location /.well-known/nostr.json {
|
||||
proxy_pass http://localhost:5000/json;
|
||||
}
|
||||
|
||||
`
|
||||
|
5
scripts/package.sh
Normal file
5
scripts/package.sh
Normal file
@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
rm -rf dist
|
||||
mkdir dist
|
||||
cd src && tar -czf ../dist/pleroma2nip05.tgz *
|
82
src/app.py
Normal file
82
src/app.py
Normal file
@ -0,0 +1,82 @@
|
||||
#!/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
|
||||
|
||||
__VERSION__ = '0.5'
|
||||
|
||||
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
|
||||
# {
|
||||
# "names": {
|
||||
# "bob": "b0635d6a9851d3aed0cd6c495b282167acf761729078d975fc341b22650b07b9"
|
||||
# },
|
||||
# "relays": {
|
||||
# "b0635d6a9851d3aed0cd6c495b282167acf761729078d975fc341b22650b07b9": [ "wss://relay.example.com", "wss://relay2.example.com" ]
|
||||
# }
|
||||
# }
|
||||
|
||||
# {"names":{"gvs":"eb2881406ad19ba7cf01c210ce002f4fe53e8ce6d84e77df5a2319f9f00a8005"}}
|
||||
|
||||
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")
|
||||
# cursor.execute("SELECT version();")
|
||||
# # Fetch result
|
||||
# record = cursor.fetchone()
|
||||
# print("You are connected to - ", record, "\n")
|
||||
|
||||
except (Exception, Error) as error:
|
||||
print("Error while connecting to PostgreSQL", error)
|
||||
# finally:
|
||||
# if (connection):
|
||||
# cursor.close()
|
||||
# connection.close()
|
||||
# print("PostgreSQL connection is closed")
|
||||
|
||||
|
||||
# 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" ]
|
||||
|
||||
@app.route("/json")
|
||||
def get_json():
|
||||
cursor.execute(userquery)
|
||||
localusers = cursor.fetchall()
|
||||
|
||||
nostr = {}
|
||||
nostr['names'] = {}
|
||||
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')
|
||||
|
||||
|
||||
# nostr['names']['gvs'] = 'eb2881406ad19ba7cf01c210ce002f4fe53e8ce6d84e77df5a2319f9f00a8005'
|
||||
nostr['relays'] = {}
|
||||
nostr['relays']['eb2881406ad19ba7cf01c210ce002f4fe53e8ce6d84e77df5a2319f9f00a8005'] = relays
|
||||
|
||||
print(json.dumps(nostr))
|
||||
return json.dumps(nostr)
|
4
src/config.yml
Normal file
4
src/config.yml
Normal file
@ -0,0 +1,4 @@
|
||||
pguser: pleroma
|
||||
pgpass:
|
||||
pghost: localhost
|
||||
pleromadb: pleroma
|
4
src/requirements.txt
Normal file
4
src/requirements.txt
Normal file
@ -0,0 +1,4 @@
|
||||
flask==2.2.3
|
||||
pyjson==1.3.0
|
||||
psycopg2==2.9.5
|
||||
pyaml==21.10.1
|
Loading…
Reference in New Issue
Block a user