Return capabilities endpoint

master
Bob Mottram 2019-07-05 21:32:21 +01:00
parent d257b59c3a
commit b11c8e4735
4 changed files with 31 additions and 8 deletions

View File

@ -6,6 +6,8 @@ Based on the specification: https://www.w3.org/TR/activitypub
Also: https://raw.githubusercontent.com/w3c/activitypub/gh-pages/activitypub-tutorial.txt Also: https://raw.githubusercontent.com/w3c/activitypub/gh-pages/activitypub-tutorial.txt
https://blog.dereferenced.org/what-is-ocap-and-why-should-i-care
This project is currently *pre alpha* and not recommended for any real world uses. This project is currently *pre alpha* and not recommended for any real world uses.
## Goals ## Goals
@ -21,6 +23,7 @@ This project is currently *pre alpha* and not recommended for any real world use
* http signatures and basic auth. * http signatures and basic auth.
* Compatible with http (onion addresses), https and dat. * Compatible with http (onion addresses), https and dat.
* Minimal dependencies. * Minimal dependencies.
* Capabilities based security
* Data minimization principle. Configurable post expiry time. * Data minimization principle. Configurable post expiry time.
* Commandline interface. If there's a GUI it should be a separate project. * Commandline interface. If there's a GUI it should be a separate project.
* Designed for intermittent connectivity. Assume network disruptions. * Designed for intermittent connectivity. Assume network disruptions.

View File

@ -280,7 +280,7 @@ def sendFollowRequest(baseDir: str,nickname: str,domain: str,port: int,httpPrefi
if followPort!=80 and followPort!=443: if followPort!=80 and followPort!=443:
followDomain=followDomain+':'+str(followPort) followDomain=followDomain+':'+str(followPort)
newFollow = { newFollowJson = {
'type': 'Follow', 'type': 'Follow',
'actor': httpPrefix+'://'+domain+'/users/'+nickname, 'actor': httpPrefix+'://'+domain+'/users/'+nickname,
'object': followHttpPrefix+'://'+followDomain+'/users/'+followNickname, 'object': followHttpPrefix+'://'+followDomain+'/users/'+followNickname,
@ -290,5 +290,11 @@ def sendFollowRequest(baseDir: str,nickname: str,domain: str,port: int,httpPrefi
if ccUrl: if ccUrl:
if len(ccUrl)>0: if len(ccUrl)>0:
newFollow['cc']=ccUrl newFollowJson['cc']=ccUrl
return newFollow
sendSignedJson(newFollowJson,session,baseDir,nickname,domain,port, \
nicknameToFollow,domainToFollow,toPort, '', \
httpPrefix,saveToFile,clientToServer,federationList, \
sendThreads,postLog,cachedWebfingers,personCache)
return newFollowJson

View File

@ -54,7 +54,8 @@ def createPersonBase(baseDir: str,nickname: str,domain: str,port: int, \
'endpoints': { 'endpoints': {
'id': httpPrefix+'://'+domain+'/users/'+nickname+'/endpoints', 'id': httpPrefix+'://'+domain+'/users/'+nickname+'/endpoints',
'sharedInbox': httpPrefix+'://'+domain+'/inbox', 'sharedInbox': httpPrefix+'://'+domain+'/inbox',
'uploadMedia': httpPrefix+'://'+domain+'/users/'+nickname+'/endpoints/uploadMedia' 'uploadMedia': httpPrefix+'://'+domain+'/users/'+nickname+'/endpoints/uploadMedia',
"capabilityAcquisition": httpPrefix+'://'+domain+'/caps/new'
}, },
'featured': httpPrefix+'://'+domain+'/users/'+nickname+'/collections/featured', 'featured': httpPrefix+'://'+domain+'/users/'+nickname+'/collections/featured',
'followers': httpPrefix+'://'+domain+'/users/'+nickname+'/followers', 'followers': httpPrefix+'://'+domain+'/users/'+nickname+'/followers',

View File

@ -134,10 +134,23 @@ def getPersonBox(session,wfRequest: {},personCache: {},boxName='inbox') -> (str,
if personJson.get('endpoints'): if personJson.get('endpoints'):
if personJson['endpoints'].get('sharedInbox'): if personJson['endpoints'].get('sharedInbox'):
sharedInbox=personJson['endpoints']['sharedInbox'] sharedInbox=personJson['endpoints']['sharedInbox']
capabilityAcquisition=None
if personJson.get('capabilityAcquisition'):
capabilityAcquisition=personJson['capabilityAcquisition']
else:
if personJson.get('capabilityAcquisitionEndpoint'):
capabilityAcquisition=personJson['capabilityAcquisitionEndpoint']
else:
if personJson.get('endpoints'):
if personJson['endpoints'].get('capabilityAcquisition'):
capabilityAcquisition=personJson['endpoints']['capabilityAcquisition']
else:
if personJson['endpoints'].get('capabilityAcquisitionEndpoint'):
capabilityAcquisition=personJson['endpoints']['capabilityAcquisitionEndpoint']
storePersonInCache(personUrl,personJson,personCache) storePersonInCache(personUrl,personJson,personCache)
return boxJson,pubKeyId,pubKey,personId,sharedInbox return boxJson,pubKeyId,pubKey,personId,sharedInbox,capabilityAcquisition
def getPosts(session,outboxUrl: str,maxPosts: int,maxMentions: int, \ def getPosts(session,outboxUrl: str,maxPosts: int,maxMentions: int, \
maxEmoji: int,maxAttachments: int,federationList: [], \ maxEmoji: int,maxAttachments: int,federationList: [], \
@ -470,7 +483,7 @@ def sendPost(session,baseDir: str,nickname: str, domain: str, port: int, \
return 1 return 1
# get the actor inbox for the To handle # get the actor inbox for the To handle
inboxUrl,pubKeyId,pubKey,toPersonId,sharedInbox = \ inboxUrl,pubKeyId,pubKey,toPersonId,sharedInbox,capabilityAcquisition = \
getPersonBox(session,wfRequest,personCache,'inbox') getPersonBox(session,wfRequest,personCache,'inbox')
# If there are more than one followers on the target domain # If there are more than one followers on the target domain
@ -540,7 +553,7 @@ def sendSignedJson(postJsonObject: {},session,baseDir: str,nickname: str, domain
return 1 return 1
# get the actor inbox for the To handle # get the actor inbox for the To handle
inboxUrl,pubKeyId,pubKey,toPersonId,sharedInbox = \ inboxUrl,pubKeyId,pubKey,toPersonId,sharedInbox,capabilityAcquisition = \
getPersonBox(session,wfRequest,personCache,'inbox') getPersonBox(session,wfRequest,personCache,'inbox')
# If there are more than one followers on the target domain # If there are more than one followers on the target domain
@ -730,7 +743,7 @@ def getPublicPostsOfPerson(nickname: str,domain: str,raw: bool,simple: bool) ->
if not wfRequest: if not wfRequest:
sys.exit() sys.exit()
personUrl,pubKeyId,pubKey,personId,shaedInbox= \ personUrl,pubKeyId,pubKey,personId,shaedInbox,capabilityAcquisition= \
getPersonBox(session,wfRequest,personCache,'outbox') getPersonBox(session,wfRequest,personCache,'outbox')
wfResult = json.dumps(wfRequest, indent=4, sort_keys=True) wfResult = json.dumps(wfRequest, indent=4, sort_keys=True)