Getting server software type

merge-requests/30/head
Bob Mottram 2025-01-20 11:48:41 +00:00
parent c341f87816
commit 43d70e842d
2 changed files with 69 additions and 2 deletions

View File

@ -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:

View File

@ -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)