forked from indymedia/epicyon
				
			
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
| __filename__ = "socnet.py"
 | |
| __author__ = "Bob Mottram"
 | |
| __license__ = "AGPL3+"
 | |
| __version__ = "1.1.0"
 | |
| __maintainer__ = "Bob Mottram"
 | |
| __email__ = "bob@freedombone.net"
 | |
| __status__ = "Production"
 | |
| 
 | |
| from session import createSession
 | |
| from webfinger import webfingerHandle
 | |
| from posts import getPersonBox
 | |
| from posts import getPostDomains
 | |
| from utils import getFullDomain
 | |
| 
 | |
| 
 | |
| def instancesGraph(baseDir: str, handles: str,
 | |
|                    proxyType: str,
 | |
|                    port: int, httpPrefix: str,
 | |
|                    debug: bool, projectVersion: str) -> str:
 | |
|     """ Returns a dot graph of federating instances
 | |
|     based upon a few sample handles.
 | |
|     The handles argument should contain a comma separated list
 | |
|     of handles on different instances
 | |
|     """
 | |
|     dotGraphStr = 'digraph instances {\n'
 | |
|     if ',' not in handles:
 | |
|         return dotGraphStr + '}\n'
 | |
|     session = createSession(proxyType)
 | |
|     if not session:
 | |
|         return dotGraphStr + '}\n'
 | |
| 
 | |
|     personCache = {}
 | |
|     cachedWebfingers = {}
 | |
|     federationList = []
 | |
|     maxMentions = 99
 | |
|     maxEmoji = 99
 | |
|     maxAttachments = 5
 | |
| 
 | |
|     personHandles = handles.split(',')
 | |
|     for handle in personHandles:
 | |
|         handle = handle.strip()
 | |
|         if handle.startswith('@'):
 | |
|             handle = handle[1:]
 | |
|         if '@' not in handle:
 | |
|             continue
 | |
| 
 | |
|         nickname = handle.split('@')[0]
 | |
|         domain = handle.split('@')[1]
 | |
| 
 | |
|         domainFull = getFullDomain(domain, port)
 | |
|         handle = httpPrefix + "://" + domainFull + "/@" + nickname
 | |
|         wfRequest = \
 | |
|             webfingerHandle(session, handle, httpPrefix,
 | |
|                             cachedWebfingers,
 | |
|                             domain, projectVersion)
 | |
|         if not wfRequest:
 | |
|             return dotGraphStr + '}\n'
 | |
|         if not isinstance(wfRequest, dict):
 | |
|             print('Webfinger for ' + handle + ' did not return a dict. ' +
 | |
|                   str(wfRequest))
 | |
|             return dotGraphStr + '}\n'
 | |
| 
 | |
|         (personUrl, pubKeyId, pubKey,
 | |
|          personId, shaedInbox,
 | |
|          avatarUrl, displayName) = getPersonBox(baseDir, session, wfRequest,
 | |
|                                                 personCache,
 | |
|                                                 projectVersion, httpPrefix,
 | |
|                                                 nickname, domain, 'outbox',
 | |
|                                                 27261)
 | |
|         postDomains = \
 | |
|             getPostDomains(session, personUrl, 64, maxMentions, maxEmoji,
 | |
|                            maxAttachments, federationList,
 | |
|                            personCache, debug,
 | |
|                            projectVersion, httpPrefix, domain, [])
 | |
|         postDomains.sort()
 | |
|         for fedDomain in postDomains:
 | |
|             dotLineStr = '    "' + domain + '" -> "' + fedDomain + '";\n'
 | |
|             if dotLineStr not in dotGraphStr:
 | |
|                 dotGraphStr += dotLineStr
 | |
|     return dotGraphStr + '}\n'
 |