def sendUndoShareViaServer(baseDir: str,session, \ fromNickname: str,password: str, \ fromDomain: str,fromPort: int, \ httpPrefix: str, \ displayName: str, \ cachedWebfingers: {},personCache: {}, \ debug: bool,projectVersion: str) -> {}: """Undoes a share via c2s """ if not session: print('WARN: No session for sendUndoShareViaServer') return 6 fromDomainFull = fromDomain if fromPort: if fromPort != 80 and fromPort != 443: if ':' not in fromDomain: fromDomainFull = fromDomain + ':' + str(fromPort) toUrl = 'https://www.w3.org/ns/activitystreams#Public' ccUrl = httpPrefix + '://' + fromDomainFull + '/users/' + fromNickname + '/followers' undoShareJson = { "@context": "https://www.w3.org/ns/activitystreams", 'type': 'Remove', 'actor': httpPrefix + '://' + fromDomainFull + '/users/' + fromNickname, 'target': httpPrefix + '://' + fromDomainFull + '/users/' + fromNickname + '/shares', 'object': { "type": "Offer", "displayName": displayName, 'to': [toUrl], 'cc': [ccUrl] }, 'to': [toUrl], 'cc': [ccUrl] } handle = httpPrefix + '://' + fromDomainFull + '/@' + fromNickname # lookup the inbox for the To handle wfRequest = webfingerHandle(session,handle,httpPrefix,cachedWebfingers, \ fromDomain,projectVersion) if not wfRequest: if debug: print('DEBUG: announce webfinger failed for ' + handle) return 1 postToBox = 'outbox' # get the actor inbox for the To handle inboxUrl,pubKeyId,pubKey,fromPersonId,sharedInbox,capabilityAcquisition,avatarUrl,displayName = \ getPersonBox(baseDir,session,wfRequest,personCache, \ projectVersion,httpPrefix,fromDomain,postToBox) if not inboxUrl: if debug: print('DEBUG: No ' + postToBox + ' was found for ' + handle) return 3 if not fromPersonId: if debug: print('DEBUG: No actor was found for ' + handle) return 4 authHeader = createBasicAuthHeader(fromNickname, password) headers = {'host': fromDomain, \ 'Content-type': 'application/json', \ 'Authorization': authHeader} postResult = \ postJson(session,undoShareJson,[],inboxUrl,headers,"inbox:write") #if not postResult: # if debug: # print('DEBUG: POST announce failed for c2s to '+inboxUrl) # return 5 if debug: print('DEBUG: c2s POST undo share success') return undoShareJson
def sendRoleViaServer(baseDir: str,session, \ delegatorNickname: str,password: str, \ delegatorDomain: str,delegatorPort: int, \ httpPrefix: str,nickname: str, \ project: str,role: str, \ cachedWebfingers: {},personCache: {}, \ debug: bool,projectVersion: str) -> {}: """A delegator creates a role for a person via c2s Setting role to an empty string or None removes the role """ if not session: print('WARN: No session for sendRoleViaServer') return 6 delegatorDomainFull = delegatorDomain if fromPort: if fromPort != 80 and fromPort != 443: if ':' not in delegatorDomain: delegatorDomainFull = delegatorDomain + ':' + str(fromPort) toUrl = httpPrefix + '://' + delegatorDomainFull + '/users/' + nickname ccUrl = httpPrefix + '://' + delegatorDomainFull + '/users/' + delegatorNickname + '/followers' if role: roleStr = project.lower() + ';' + role.lower() else: roleStr = project.lower() + ';' newRoleJson = { 'type': 'Delegate', 'actor': httpPrefix + '://' + delegatorDomainFull + '/users/' + delegatorNickname, 'object': { 'type': 'Role', 'actor': httpPrefix + '://' + delegatorDomainFull + '/users/' + nickname, 'object': roleStr, 'to': [toUrl], 'cc': [ccUrl] }, 'to': [toUrl], 'cc': [ccUrl] } handle = httpPrefix + '://' + delegatorDomainFull + '/@' + delegatorNickname # lookup the inbox for the To handle wfRequest = webfingerHandle(session,handle,httpPrefix,cachedWebfingers, \ delegatorDomain,projectVersion) if not wfRequest: if debug: print('DEBUG: announce webfinger failed for ' + handle) return 1 postToBox = 'outbox' # get the actor inbox for the To handle inboxUrl,pubKeyId,pubKey,fromPersonId,sharedInbox,capabilityAcquisition,avatarUrl,displayName = \ getPersonBox(baseDir,session,wfRequest,personCache, \ projectVersion,httpPrefix,delegatorDomain,postToBox) if not inboxUrl: if debug: print('DEBUG: No ' + postToBox + ' was found for ' + handle) return 3 if not fromPersonId: if debug: print('DEBUG: No actor was found for ' + handle) return 4 authHeader = createBasicAuthHeader(delegatorNickname, password) headers = {'host': delegatorDomain, \ 'Content-type': 'application/json', \ 'Authorization': authHeader} postResult = \ postJson(session,newRoleJson,[],inboxUrl,headers,"inbox:write") #if not postResult: # if debug: # print('DEBUG: POST announce failed for c2s to '+inboxUrl) # return 5 if debug: print('DEBUG: c2s POST role success') return newRoleJson
def sendSkillViaServer(baseDir: str,session,nickname: str,password: str, domain: str,port: int, \ httpPrefix: str, \ skill: str,skillLevelPercent: int, \ cachedWebfingers: {},personCache: {}, \ debug: bool,projectVersion: str) -> {}: """Sets a skill for a person via c2s """ if not session: print('WARN: No session for sendSkillViaServer') return 6 domainFull = domain if port: if port != 80 and port != 443: if ':' not in domain: domainFull = domain + ':' + str(port) toUrl = httpPrefix + '://' + domainFull + '/users/' + nickname ccUrl = httpPrefix + '://' + domainFull + '/users/' + nickname + '/followers' if skillLevelPercent: skillStr = skill + ';' + str(skillLevelPercent) else: skillStr = skill + ';0' newSkillJson = { 'type': 'Skill', 'actor': httpPrefix + '://' + domainFull + '/users/' + nickname, 'object': '"' + skillStr + '"', 'to': [toUrl], 'cc': [ccUrl] } handle = httpPrefix + '://' + domainFull + '/@' + nickname # lookup the inbox for the To handle wfRequest = webfingerHandle(session,handle,httpPrefix,cachedWebfingers, \ domain,projectVersion) if not wfRequest: if debug: print('DEBUG: announce webfinger failed for ' + handle) return 1 postToBox = 'outbox' # get the actor inbox for the To handle inboxUrl,pubKeyId,pubKey,fromPersonId,sharedInbox,capabilityAcquisition,avatarUrl,displayName = \ getPersonBox(baseDir,session,wfRequest,personCache, \ projectVersion,httpPrefix,domain,postToBox) if not inboxUrl: if debug: print('DEBUG: No ' + postToBox + ' was found for ' + handle) return 3 if not fromPersonId: if debug: print('DEBUG: No actor was found for ' + handle) return 4 authHeader = createBasicAuthHeader(Nickname, password) headers = {'host': domain, \ 'Content-type': 'application/json', \ 'Authorization': authHeader} postResult = \ postJson(session,newSkillJson,[],inboxUrl,headers,"inbox:write") #if not postResult: # if debug: # print('DEBUG: POST announce failed for c2s to '+inboxUrl) # return 5 if debug: print('DEBUG: c2s POST skill success') return newSkillJson
def sendUnfollowRequestViaServer(baseDir: str,session, \ fromNickname: str,password: str, \ fromDomain: str,fromPort: int, \ followNickname: str,followDomain: str,followPort: int, \ httpPrefix: str, \ cachedWebfingers: {},personCache: {}, \ debug: bool,projectVersion: str) -> {}: """Creates a unfollow request via c2s """ if not session: print('WARN: No session for sendUnfollowRequestViaServer') return 6 fromDomainFull=fromDomain if fromPort: if fromPort!=80 and fromPort!=443: if ':' not in fromDomain: fromDomainFull=fromDomain+':'+str(fromPort) followDomainFull=followDomain if followPort: if followPort!=80 and followPort!=443: if ':' not in followDomain: followDomainFull=followDomain+':'+str(followPort) followActor=httpPrefix+'://'+fromDomainFull+'/users/'+fromNickname followedId=httpPrefix+'://'+followDomainFull+'/users/'+followNickname statusNumber,published = getStatusNumber() unfollowJson = { '@context': 'https://www.w3.org/ns/activitystreams', 'id': followActor+'/statuses/'+str(statusNumber)+'/undo', 'type': 'Undo', 'actor': followActor, 'object': { 'id': followActor+'/statuses/'+str(statusNumber), 'type': 'Follow', 'actor': followActor, 'object': followedId } } handle=httpPrefix+'://'+fromDomainFull+'/@'+fromNickname # lookup the inbox for the To handle wfRequest = webfingerHandle(session,handle,httpPrefix,cachedWebfingers, \ fromDomain,projectVersion) if not wfRequest: if debug: print('DEBUG: announce webfinger failed for '+handle) return 1 postToBox='outbox' # get the actor inbox for the To handle inboxUrl,pubKeyId,pubKey,fromPersonId,sharedInbox,capabilityAcquisition,avatarUrl,displayName = \ getPersonBox(baseDir,session,wfRequest,personCache, \ projectVersion,httpPrefix,fromDomain,postToBox) if not inboxUrl: if debug: print('DEBUG: No '+postToBox+' was found for '+handle) return 3 if not fromPersonId: if debug: print('DEBUG: No actor was found for '+handle) return 4 authHeader=createBasicAuthHeader(fromNickname,password) headers = {'host': fromDomain, \ 'Content-type': 'application/json', \ 'Authorization': authHeader} postResult = \ postJson(session,unfollowJson,[],inboxUrl,headers,"inbox:write") #if not postResult: # if debug: # print('DEBUG: POST announce failed for c2s to '+inboxUrl) # return 5 if debug: print('DEBUG: c2s POST unfollow success') return unfollowJson