Create post

master
Bob Mottram 2019-06-30 12:07:39 +01:00
parent 32d8119c9b
commit 5578972304
2 changed files with 13 additions and 5 deletions

View File

@ -12,10 +12,13 @@ import commentjson
import html import html
import datetime import datetime
import os, shutil import os, shutil
import base64
from pprint import pprint from pprint import pprint
from random import randint from random import randint
from session import getJson from session import getJson
from session import postJson
from person import getPersonKey from person import getPersonKey
from Crypto.Hash import SHA256
try: try:
from BeautifulSoup import BeautifulSoup from BeautifulSoup import BeautifulSoup
except ImportError: except ImportError:
@ -297,7 +300,7 @@ def createPublicPost(username: str, domain: str, https: bool, content: str, foll
prefix='http' prefix='http'
return createPostBase(username, domain, 'https://www.w3.org/ns/activitystreams#Public', prefix+'://'+domain+'/users/'+username+'/followers', https, content, followersOnly, saveToFile, inReplyTo, inReplyToAtomUri, subject) return createPostBase(username, domain, 'https://www.w3.org/ns/activitystreams#Public', prefix+'://'+domain+'/users/'+username+'/followers', https, content, followersOnly, saveToFile, inReplyTo, inReplyToAtomUri, subject)
def sendPost(session,username: str, domain: str, toUsername: str, toDomain: str, cc: str, https: bool, content: str, followersOnly: bool, saveToFile: bool, inReplyTo=None, inReplyToAtomUri=None, subject=None) -> int: def sendPost(session,username: str, domain: str, toUsername: str, toDomain: str, cc: str, https: bool, content: str, followersOnly: bool, saveToFile: bool, federationList, inReplyTo=None, inReplyToAtomUri=None, subject=None) -> int:
"""Post to another inbox """Post to another inbox
""" """
prefix='https' prefix='https'
@ -324,9 +327,14 @@ def sendPost(session,username: str, domain: str, toUsername: str, toDomain: str,
if len(privateKeyPem)==0: if len(privateKeyPem)==0:
return 5 return 5
# construct the http header
bodyDigest = base64.b64encode(SHA256.new(postJsonObject.encode()).digest())
headers = {'Content-type': 'application/json', 'host': domain, 'digest': f'SHA-256={bodyDigest}'}
signatureHeader = signPostHeaders(privateKeyPem, username, domain, '/inbox', https, postJsonObject) signatureHeader = signPostHeaders(privateKeyPem, username, domain, '/inbox', https, postJsonObject)
headers['signature'] = signatureHeader
# TODO # TODO this should be replaced by a send buffer
postJson(session,postJsonObject,federationList,inboxUrl,headers)
return 0 return 0

View File

@ -28,7 +28,7 @@ def getJson(session,url: str,headers,params):
session.cookies.clear() session.cookies.clear()
return session.get(url, headers=sessionHeaders, params=sessionParams).json() return session.get(url, headers=sessionHeaders, params=sessionParams).json()
def postJson(session,postJsonObject,federationList,inboxUrl: str): def postJson(session,postJsonObject,federationList,inboxUrl: str,headers) -> str:
"""Post a json message to the inbox of another person """Post a json message to the inbox of another person
""" """
# check that we are posting to a permitted domain # check that we are posting to a permitted domain
@ -40,5 +40,5 @@ def postJson(session,postJsonObject,federationList,inboxUrl: str):
if not permittedDomain: if not permittedDomain:
return None return None
postResult = session.post(url = inboxUrl, data = postJsonObject) postResult = session.post(url = inboxUrl, data = json.dumps(postJsonObject), headers=headers)
return postResult.text return postResult.text