mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			
		
			
				
	
	
		
			83 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
| __filename__ = "socnet.py"
 | |
| __author__ = "Bob Mottram"
 | |
| __license__ = "AGPL3+"
 | |
| __version__ = "1.5.0"
 | |
| __maintainer__ = "Bob Mottram"
 | |
| __email__ = "bob@libreserver.org"
 | |
| __status__ = "Production"
 | |
| __module_group__ = "Moderation"
 | |
| 
 | |
| from session import create_session
 | |
| from webfinger import webfinger_handle
 | |
| from posts import get_person_box
 | |
| from posts import get_post_domains
 | |
| from utils import get_full_domain
 | |
| 
 | |
| 
 | |
| def instances_graph(base_dir: str, handles: str,
 | |
|                     proxy_type: str,
 | |
|                     port: int, http_prefix: str,
 | |
|                     debug: bool, project_version: str,
 | |
|                     system_language: str, signing_priv_key_pem: 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
 | |
|     """
 | |
|     dot_graph_str = 'digraph instances {\n'
 | |
|     if ',' not in handles:
 | |
|         return dot_graph_str + '}\n'
 | |
|     session = create_session(proxy_type)
 | |
|     if not session:
 | |
|         return dot_graph_str + '}\n'
 | |
| 
 | |
|     person_cache = {}
 | |
|     cached_webfingers = {}
 | |
| 
 | |
|     person_handles = handles.split(',')
 | |
|     for handle in person_handles:
 | |
|         handle = handle.strip()
 | |
|         if handle.startswith('@'):
 | |
|             handle = handle[1:]
 | |
|         if '@' not in handle:
 | |
|             continue
 | |
| 
 | |
|         nickname = handle.split('@')[0]
 | |
|         domain = handle.split('@')[1]
 | |
| 
 | |
|         domain_full = get_full_domain(domain, port)
 | |
|         handle = http_prefix + "://" + domain_full + "/@" + nickname
 | |
|         wf_request = \
 | |
|             webfinger_handle(session, handle, http_prefix,
 | |
|                              cached_webfingers,
 | |
|                              domain, project_version, debug, False,
 | |
|                              signing_priv_key_pem)
 | |
|         if not wf_request:
 | |
|             return dot_graph_str + '}\n'
 | |
|         if not isinstance(wf_request, dict):
 | |
|             print('Webfinger for ' + handle + ' did not return a dict. ' +
 | |
|                   str(wf_request))
 | |
|             return dot_graph_str + '}\n'
 | |
| 
 | |
|         origin_domain = None
 | |
|         (person_url, _, _, _, _, _,
 | |
|          _, _) = get_person_box(signing_priv_key_pem,
 | |
|                                 origin_domain,
 | |
|                                 base_dir, session, wf_request,
 | |
|                                 person_cache,
 | |
|                                 project_version, http_prefix,
 | |
|                                 nickname, domain, 'outbox',
 | |
|                                 27261, system_language)
 | |
|         word_frequency = {}
 | |
|         post_domains = \
 | |
|             get_post_domains(session, person_url, 64, debug,
 | |
|                              project_version, http_prefix, domain,
 | |
|                              word_frequency, [], system_language,
 | |
|                              signing_priv_key_pem)
 | |
|         post_domains.sort()
 | |
|         for fed_domain in post_domains:
 | |
|             dot_line_str = '    "' + domain + '" -> "' + fed_domain + '";\n'
 | |
|             if dot_line_str not in dot_graph_str:
 | |
|                 dot_graph_str += dot_line_str
 | |
|     return dot_graph_str + '}\n'
 |