2019-06-28 18:55:29 +00:00
|
|
|
__filename__ = "epicyon.py"
|
|
|
|
__author__ = "Bob Mottram"
|
|
|
|
__license__ = "AGPL3+"
|
|
|
|
__version__ = "0.0.1"
|
|
|
|
__maintainer__ = "Bob Mottram"
|
|
|
|
__email__ = "bob@freedombone.net"
|
|
|
|
__status__ = "Production"
|
|
|
|
|
|
|
|
from person import createPerson
|
|
|
|
from person import setPreferredUsername
|
2019-06-28 20:00:25 +00:00
|
|
|
from person import setBio
|
2019-06-28 18:55:29 +00:00
|
|
|
from webfinger import webfingerHandle
|
2019-07-02 09:25:29 +00:00
|
|
|
from posts import getPosts
|
2019-06-29 10:08:59 +00:00
|
|
|
from posts import createPublicPost
|
2019-06-29 11:47:33 +00:00
|
|
|
from posts import deleteAllPosts
|
2019-06-29 13:17:02 +00:00
|
|
|
from posts import createOutbox
|
2019-06-29 13:44:21 +00:00
|
|
|
from posts import archivePosts
|
2019-06-30 10:14:02 +00:00
|
|
|
from posts import sendPost
|
2019-07-01 10:25:03 +00:00
|
|
|
from posts import getPersonBox
|
2019-06-28 18:55:29 +00:00
|
|
|
from session import createSession
|
2019-06-29 16:47:37 +00:00
|
|
|
from session import getJson
|
2019-06-28 18:55:29 +00:00
|
|
|
import json
|
2019-06-30 22:56:37 +00:00
|
|
|
import os
|
2019-06-28 18:55:29 +00:00
|
|
|
import sys
|
|
|
|
import requests
|
|
|
|
from pprint import pprint
|
2019-06-30 20:14:03 +00:00
|
|
|
from tests import testHttpsig
|
2019-06-28 18:55:29 +00:00
|
|
|
from daemon import runDaemon
|
2019-06-28 19:52:35 +00:00
|
|
|
import socket
|
2019-06-29 18:23:13 +00:00
|
|
|
from follow import clearFollows
|
2019-06-29 20:21:37 +00:00
|
|
|
from follow import clearFollowers
|
2019-06-29 18:23:13 +00:00
|
|
|
from follow import followPerson
|
|
|
|
from follow import followerOfPerson
|
|
|
|
from follow import unfollowPerson
|
|
|
|
from follow import unfollowerOfPerson
|
2019-06-30 21:20:02 +00:00
|
|
|
from tests import testPostMessageBetweenServers
|
|
|
|
from tests import runAllTests
|
2019-07-03 09:24:55 +00:00
|
|
|
import argparse
|
2019-06-30 21:20:02 +00:00
|
|
|
|
2019-07-03 09:24:55 +00:00
|
|
|
def str2bool(v):
|
|
|
|
if isinstance(v, bool):
|
|
|
|
return v
|
|
|
|
if v.lower() in ('yes', 'true', 't', 'y', '1'):
|
|
|
|
return True
|
|
|
|
elif v.lower() in ('no', 'false', 'f', 'n', '0'):
|
|
|
|
return False
|
|
|
|
else:
|
|
|
|
raise argparse.ArgumentTypeError('Boolean value expected.')
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(description='ActivityPub Server')
|
|
|
|
parser.add_argument('-d','--domain', dest='domain', type=str,default='localhost',
|
|
|
|
help='Domain name of the server')
|
|
|
|
parser.add_argument('-p','--port', dest='port', type=int,default=80,
|
|
|
|
help='Port number to run on')
|
|
|
|
parser.add_argument('--path', dest='baseDir', type=str,default=os.getcwd(),
|
|
|
|
help='Directory in which to store posts')
|
|
|
|
parser.add_argument('-f','--federate', nargs='+',dest='federationList',
|
|
|
|
help='Specify federation list separated by spaces')
|
|
|
|
parser.add_argument("--https", type=str2bool, nargs='?',
|
|
|
|
const=True, default=False,
|
|
|
|
help="Use https")
|
|
|
|
parser.add_argument("--tor", type=str2bool, nargs='?',
|
|
|
|
const=True, default=False,
|
|
|
|
help="Route via Tor")
|
|
|
|
parser.add_argument("--tests", type=str2bool, nargs='?',
|
|
|
|
const=True, default=False,
|
|
|
|
help="Run unit tests")
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.tests:
|
|
|
|
runAllTests()
|
|
|
|
sys.exit()
|
|
|
|
|
|
|
|
print(args.domain)
|
|
|
|
print(str(args.federationList))
|
|
|
|
|
|
|
|
username='admin'
|
|
|
|
domain=args.domain
|
|
|
|
port=args.port
|
|
|
|
https=args.https
|
|
|
|
useTor=args.tor
|
|
|
|
baseDir=args.baseDir
|
|
|
|
if baseDir.endswith('/'):
|
|
|
|
print("--path option should not end with '/'")
|
|
|
|
sys.exit()
|
|
|
|
|
|
|
|
federationList=[]
|
|
|
|
if args.federationList:
|
|
|
|
federationList=args.federationList.copy()
|
|
|
|
print(baseDir)
|
|
|
|
sys.exit()
|
2019-06-28 18:55:29 +00:00
|
|
|
|
2019-07-02 09:25:29 +00:00
|
|
|
session = createSession(domain,port,useTor)
|
2019-07-01 14:30:48 +00:00
|
|
|
personCache={}
|
|
|
|
cachedWebfingers={}
|
2019-06-30 22:56:37 +00:00
|
|
|
|
2019-06-29 20:21:37 +00:00
|
|
|
#unfollowPerson(username,domain,'squirrel','secret.com')
|
|
|
|
#sys.exit()
|
|
|
|
|
|
|
|
#asHeader = {'Accept': 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'}
|
2019-06-29 16:47:37 +00:00
|
|
|
#userFollowing = getJson(session,"https://mastodon.social/users/Gargron/followers?page=true",asHeader,None)
|
2019-06-29 20:21:37 +00:00
|
|
|
#userFollowing = getJson(session,"https://mastodon.social/users/Gargron/following",asHeader,None)
|
|
|
|
#userFollowing = getJson(session,"https://mastodon.social/users/Gargron/following?page=1",asHeader,None)
|
|
|
|
#pprint(userFollowing)
|
|
|
|
#sys.exit()
|
2019-06-29 15:18:35 +00:00
|
|
|
|
|
|
|
|
2019-06-30 22:56:37 +00:00
|
|
|
privateKeyPem,publicKeyPem,person,wfEndpoint=createPerson(baseDir,username,domain,port,https,True)
|
2019-06-29 13:17:02 +00:00
|
|
|
#deleteAllPosts(username,domain)
|
2019-07-01 09:59:57 +00:00
|
|
|
setPreferredUsername(baseDir,username,domain,'badger')
|
|
|
|
setBio(baseDir,username,domain,'Some personal info')
|
2019-07-01 12:47:08 +00:00
|
|
|
#createPublicPost(baseDir,username, domain, port,https, "G'day world!", False, True, None, None, 'Not suitable for Vogons')
|
2019-06-30 22:56:37 +00:00
|
|
|
#archivePosts(username,domain,baseDir,4)
|
|
|
|
#outboxJson=createOutbox(baseDir,username,domain,port,https,2,True,None)
|
2019-06-29 17:12:26 +00:00
|
|
|
#pprint(outboxJson)
|
2019-06-29 10:08:59 +00:00
|
|
|
|
2019-07-02 17:12:49 +00:00
|
|
|
#testPostMessageBetweenServers()
|
2019-07-02 21:27:50 +00:00
|
|
|
runDaemon(domain,port,https,federationList,useTor)
|
2019-06-28 18:55:29 +00:00
|
|
|
|
|
|
|
#testHttpsig()
|
2019-07-02 21:27:50 +00:00
|
|
|
sys.exit()
|
2019-06-28 18:55:29 +00:00
|
|
|
|
|
|
|
#pprint(person)
|
|
|
|
#print('\n')
|
|
|
|
#pprint(wfEndpoint)
|
|
|
|
|
|
|
|
handle="https://mastodon.social/@Gargron"
|
2019-07-01 14:30:48 +00:00
|
|
|
wfRequest = webfingerHandle(session,handle,True,cachedWebfingers)
|
2019-06-28 18:55:29 +00:00
|
|
|
if not wfRequest:
|
|
|
|
sys.exit()
|
2019-07-01 10:25:03 +00:00
|
|
|
|
2019-07-02 09:25:29 +00:00
|
|
|
personUrl,pubKeyId,pubKey,personId=getPersonBox(session,wfRequest,personCache,'outbox')
|
|
|
|
#pprint(personUrl)
|
|
|
|
#sys.exit()
|
2019-07-01 10:25:03 +00:00
|
|
|
|
2019-07-01 09:59:57 +00:00
|
|
|
wfResult = json.dumps(wfRequest, indent=4, sort_keys=True)
|
2019-07-02 09:25:29 +00:00
|
|
|
#print(str(wfResult))
|
|
|
|
#sys.exit()
|
2019-06-28 18:55:29 +00:00
|
|
|
|
|
|
|
maxMentions=10
|
|
|
|
maxEmoji=10
|
|
|
|
maxAttachments=5
|
2019-07-02 20:54:22 +00:00
|
|
|
userPosts = getPosts(session,personUrl,30,maxMentions,maxEmoji,maxAttachments,federationList,personCache)
|
2019-06-29 10:08:59 +00:00
|
|
|
#print(str(userPosts))
|