diff --git a/epicyon.py b/epicyon.py index 78bcc8b20..9a9381f32 100644 --- a/epicyon.py +++ b/epicyon.py @@ -837,6 +837,10 @@ def _command_options() -> None: help='Category of item being shared') parser.add_argument('--location', dest='location', type=str, default=None, help='Location/City of item being shared') + parser.add_argument('--software', dest='instance_software', + type=str, default=None, + help='Returns the type of instance software for the' + + 'given domain. eg mastodon, epicyon, pixelfed') parser.add_argument('--mapFormat', dest='mapFormat', type=str, default='kml', help='Format for hashtag maps GPX/KML') @@ -1320,6 +1324,68 @@ def _command_options() -> None: session.close() sys.exit() + if argb.instance_software: + debug = False + http_prefix = 'https' + if '127.0.0.1' in argb.instance_software or \ + 'localhost' in argb.instance_software: + http_prefix = 'http' + proxy_type = None + if '.onion' in argb.instance_software: + proxy_type = 'tor' + http_prefix = 'http' + elif '.i2p' in argb.instance_software: + proxy_type = 'i2p' + http_prefix = 'http' + if '://' not in argb.instance_software: + argb.instance_software = \ + http_prefix + '://' + argb.instance_software + instance_domain_name = argb.instance_software.split('://')[1] + if '/' in instance_domain_name: + instance_domain_name = instance_domain_name.split('/')[0] + session = create_session(proxy_type) + profile_str = 'https://www.w3.org/ns/activitystreams' + as_header = { + 'Accept': 'application/ld+json; profile="' + profile_str + '"' + } + if not argb.domain: + argb.domain = get_config_param(base_dir, 'domain') + domain = '' + if argb.domain: + domain = argb.domain + signing_priv_key_pem = get_instance_actor_key(base_dir, domain) + mitm_servers: list[str] = [] + + nodeinfo1_url = \ + http_prefix + '://' + instance_domain_name + \ + '/.well-known/nodeinfo' + nodeinfo1_json = get_json(signing_priv_key_pem, session, nodeinfo1_url, + as_header, None, debug, mitm_servers, + __version__, http_prefix, domain) + nodeinfo_url = None + if get_json_valid(nodeinfo1_json): + if nodeinfo1_json.get('links'): + if isinstance(nodeinfo1_json['links'], list): + if len(nodeinfo1_json['links']) > 0: + if nodeinfo1_json['links'][0].get('href'): + href = nodeinfo1_json['links'][0]['href'] + if isinstance(href, str): + nodeinfo_url = href + if nodeinfo_url: + nodeinfo_json = \ + get_json(signing_priv_key_pem, session, nodeinfo_url, + as_header, None, debug, mitm_servers, + __version__, http_prefix, domain) + if get_json_valid(nodeinfo_json): + if nodeinfo_json.get('software'): + if isinstance(nodeinfo_json['software'], dict): + if nodeinfo_json['software'].get('name'): + if isinstance(nodeinfo_json['software']['name'], + str): + print(nodeinfo_json['software']['name']) + session.close() + sys.exit() + if argb.conversation: post_id = argb.conversation if '://' not in post_id: diff --git a/session.py b/session.py index ffdccf2d9..e149f5c9e 100644 --- a/session.py +++ b/session.py @@ -146,8 +146,9 @@ def _get_json_request(session, url: str, session_headers: {}, if url_domain: if url_domain not in mitm_servers: mitm_servers.append(url_domain) - print('DEBUG: _get_json_request MITM ' + - str(result.headers)) + if debug: + print('DEBUG: _get_json_request MITM ' + + str(result.headers)) else: if url_domain in mitm_servers: mitm_servers.remove(url_domain)