Like functions

master
Bob Mottram 2019-07-10 10:47:07 +01:00
parent a671ceb952
commit 9856f414b4
2 changed files with 44 additions and 19 deletions

57
like.py
View File

@ -9,12 +9,14 @@ __status__ = "Production"
import json import json
import commentjson import commentjson
from utils import urlPermitted from utils import urlPermitted
from utils import getNicknameFromActor
from utils import getDomainFromActor
def like(baseDir: str,federationList: [],nickname: str,domain: str,port: int, \ def like(session,baseDir: str,federationList: [],nickname: str,domain: str,port: int, \
toUrl: str,ccUrl: str,httpPrefix: str,objectUrl: str,saveToFile: bool) -> {}: ccUrl: str,httpPrefix: str,objectUrl: str,clientToServer: bool, \
sendThreads: [],postLog: [],personCache: {},cachedWebfingers: {}) -> {}:
"""Creates a like """Creates a like
Typically toUrl will be a followers collection ccUrl might be a specific person whose post was liked
and ccUrl might be a specific person whose post was liked
objectUrl is typically the url of the message, corresponding to url or atomUri in createPostBase objectUrl is typically the url of the message, corresponding to url or atomUri in createPostBase
""" """
if not urlPermitted(objectUrl,federationList,"inbox:write"): if not urlPermitted(objectUrl,federationList,"inbox:write"):
@ -23,32 +25,51 @@ def like(baseDir: str,federationList: [],nickname: str,domain: str,port: int, \
if port!=80 and port!=443: if port!=80 and port!=443:
domain=domain+':'+str(port) domain=domain+':'+str(port)
newLike = { newLikeJson = {
'type': 'Like', 'type': 'Like',
'actor': httpPrefix+'://'+domain+'/users/'+nickname, 'actor': httpPrefix+'://'+domain+'/users/'+nickname,
'object': objectUrl, 'object': objectUrl,
'to': [toUrl], 'to': [httpPrefix+'://'+domain+'/users/'+nickname+'/followers'],
'cc': [] 'cc': []
} }
if ccUrl: if ccUrl:
if len(ccUrl)>0: if len(ccUrl)>0:
newLike['cc']=ccUrl newLikeJson['cc']=ccUrl
if saveToFile:
if ':' in domain:
domain=domain.split(':')[0]
# TODO update likes collection
return newLike
def likePost(baseDir: str,federationList: [], \ # Extract the domain and nickname from a statuses link
nickname: str, domain: str, port: int, httpPrefix: str, \n likedPostNickname=None
likeNickname: str, likeDomain: str, likePort: int, likeHttps: bool, \n likedPostDomain=None
likeStatusNumber: int,saveToFile: bool) -> {}: likedPostPort=None
if '/users/' in objectUrl:
likedPostNickname=getNicknameFromActor(objectUrl)
likedPostDomain,likedPostPort=getDomainFromActor(objectUrl)
if likedPostNickname:
sendSignedJson(newlikeJson,session,baseDir, \
nickname,domain,port, \
likedPostNickname,likedPostDomain,likedPostPort, \
'https://www.w3.org/ns/activitystreams#Public', \
httpPrefix,True,clientToServer,federationList, \
sendThreads,postLog,cachedWebfingers,personCache,debug)
return newLikeJson
def likePost(session,baseDir: str,federationList: [], \
nickname: str, domain: str, port: int, httpPrefix: str, \
likeNickname: str, likeDomain: str, likePort: int, \
likeHttps: bool, likeStatusNumber: int, \
clientToServer: bool,sendThreads: [],postLog: [], \
personCache: {},cachedWebfingers: {}) -> {}:
"""Likes a given status post """Likes a given status post
""" """
likeDomain=likeDomain likeDomain=likeDomain
if likePort!=80 and likePort!=443: if likePort!=80 and likePort!=443:
likeDomain=likeDomain+':'+str(likePort) likeDomain=likeDomain+':'+str(likePort)
objectUrl = httpPrefix + '://'+likeDomain+'/users/'+likeNickname+'/statuses/'+str(likeStatusNumber) objectUrl = \
httpPrefix + '://'+likeDomain+'/users/'+likeNickname+ \
'/statuses/'+str(likeStatusNumber)
return like(baseDir,federationList,nickname,domain,port,toUrl,ccUrl,httpPrefix,objectUrl,saveToFile) return like(session,baseDir,federationList,nickname,domain,port, \
ccUrl,httpPrefix,objectUrl,clientToServer, \
sendThreads,postLog,personCache,cachedWebfingers)

View File

@ -61,7 +61,11 @@ def getNicknameFromActor(actor: str) -> str:
""" """
if '/users/' not in actor: if '/users/' not in actor:
return None return None
return actor.split('/users/')[1].replace('@','') nickStr=actor.split('/users/')[1].replace('@','')
if '/' not in nickStr:
return nickStr
else:
return nickStr.split('/')[0]
def getDomainFromActor(actor: str) -> (str,int): def getDomainFromActor(actor: str) -> (str,int):
"""Returns the domain name from an actor url """Returns the domain name from an actor url