Command option to test url resolution

merge-requests/30/head
Bob Mottram 2024-10-16 10:47:04 +01:00
parent b8d294a5da
commit a09fca3ba0
4 changed files with 24 additions and 8 deletions

View File

@ -46,6 +46,7 @@ from posts import send_post_via_server
from posts import get_public_posts_of_person from posts import get_public_posts_of_person
from posts import get_user_url from posts import get_user_url
from posts import check_domains from posts import check_domains
from session import get_resolved_url
from session import get_json_valid from session import get_json_valid
from session import create_session from session import create_session
from session import get_json from session import get_json
@ -844,6 +845,9 @@ def _command_options() -> None:
parser.add_argument('--registration', dest='registration', type=str, parser.add_argument('--registration', dest='registration', type=str,
default='open', default='open',
help='Whether new registrations are open or closed') help='Whether new registrations are open or closed')
parser.add_argument('--resolve', dest='resolve', type=str,
default=None,
help='Resolve a shortened url to its full form')
parser.add_argument("--nosharedinbox", type=str2bool, nargs='?', parser.add_argument("--nosharedinbox", type=str2bool, nargs='?',
const=True, default=False, const=True, default=False,
help='Disable shared inbox') help='Disable shared inbox')
@ -892,6 +896,18 @@ def _command_options() -> None:
print('All tests succeeded') print('All tests succeeded')
sys.exit() sys.exit()
if argb.resolve:
proxy_type = None
if '.onion/' in argb.resolve:
proxy_type = 'tor'
elif '.i2p/' in argb.resolve:
proxy_type = 'i2p'
session = create_session(proxy_type)
resolved_url = get_resolved_url(session, argb.resolve)
if resolved_url:
print('Resolved as: ' + resolved_url)
sys.exit()
http_prefix = 'https' http_prefix = 'https'
if argb.http or argb.i2p: if argb.http or argb.i2p:
http_prefix = 'http' http_prefix = 'http'

View File

@ -182,7 +182,7 @@ def _geocoords_from_osmorg_go_link(url: str, session) -> (int, float, float):
if '/go/' not in url: if '/go/' not in url:
return None, None, None return None, None, None
# TODO resolve url equivalent to # resolve url equivalent to
# curl -Ls -o /dev/null -w %{url_effective} [url] # curl -Ls -o /dev/null -w %{url_effective} [url]
resolved_url = get_resolved_url(session, url) resolved_url = get_resolved_url(session, url)

View File

@ -295,7 +295,7 @@ def hashtag_rule_tree(operators: [],
def _hashtag_add(base_dir: str, http_prefix: str, domain_full: str, def _hashtag_add(base_dir: str, http_prefix: str, domain_full: str,
post_json_object: {}, post_json_object: {},
action_str: str, hashtags: [], system_language: str, action_str: str, hashtags: [], system_language: str,
translate: {}) -> None: translate: {}, session) -> None:
"""Adds a hashtag via a hashtag rule """Adds a hashtag via a hashtag rule
""" """
add_hashtag = action_str.split('add ', 1)[1].strip() add_hashtag = action_str.split('add ', 1)[1].strip()
@ -386,7 +386,7 @@ def _newswire_hashtag_processing(base_dir: str, post_json_object: {},
domain: str, port: int, domain: str, port: int,
moderated: bool, url: str, moderated: bool, url: str,
system_language: str, system_language: str,
translate: {}) -> bool: translate: {}, session) -> bool:
"""Applies hashtag rules to a news post. """Applies hashtag rules to a news post.
Returns true if the post should be saved to the news timeline Returns true if the post should be saved to the news timeline
of this instance of this instance
@ -436,7 +436,7 @@ def _newswire_hashtag_processing(base_dir: str, post_json_object: {},
# add a hashtag # add a hashtag
_hashtag_add(base_dir, http_prefix, domain_full, _hashtag_add(base_dir, http_prefix, domain_full,
post_json_object, action_str, hashtags, post_json_object, action_str, hashtags,
system_language, translate) system_language, translate, session)
elif action_str.startswith('remove '): elif action_str.startswith('remove '):
# remove a hashtag # remove a hashtag
_hashtag_remove(http_prefix, domain_full, post_json_object, _hashtag_remove(http_prefix, domain_full, post_json_object,
@ -720,7 +720,7 @@ def _convert_rss_to_activitypub(base_dir: str, http_prefix: str,
_newswire_hashtag_processing(base_dir, blog, hashtags, _newswire_hashtag_processing(base_dir, blog, hashtags,
http_prefix, domain, port, http_prefix, domain, port,
moderated, url, system_language, moderated, url, system_language,
translate) translate, session)
# save the post and update the index # save the post and update the index
if save_post: if save_post:

View File

@ -114,12 +114,12 @@ def get_resolved_url(session, url: str, timeout_sec: int = 20) -> {}:
if '://' in result.url: if '://' in result.url:
return result.url return result.url
except ValueError as exc: except ValueError as exc:
print('EX: _get_resolved_url failed, url: ' + print('EX: get_resolved_url failed, url: ' +
str(url) + ', ' + str(exc)) str(url) + ', ' + str(exc))
except SocketError as exc: except SocketError as exc:
if exc.errno == errno.ECONNRESET: if exc.errno == errno.ECONNRESET:
print('EX: _get_resolved_url failed, ' + print('EX: get_resolved_url failed, ' +
'connection was reset during _get_resolved_url ' + str(exc)) 'connection was reset ' + str(exc))
return None return None