mirror of https://gitlab.com/bashrc2/epicyon
xor sha256 hashes
parent
9443212820
commit
5bde2379fc
|
@ -8,6 +8,7 @@ __status__ = "Production"
|
||||||
__module_group__ = "ActivityPub"
|
__module_group__ = "ActivityPub"
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import hashlib
|
||||||
from hashlib import sha256
|
from hashlib import sha256
|
||||||
from utils import acct_dir
|
from utils import acct_dir
|
||||||
from utils import get_user_paths
|
from utils import get_user_paths
|
||||||
|
@ -85,7 +86,7 @@ def _get_followers_sync_json(base_dir: str,
|
||||||
return sync_json
|
return sync_json
|
||||||
|
|
||||||
|
|
||||||
def _get_followers_sync_hash(sync_json: {}) -> str:
|
def get_followers_sync_hash(sync_json: {}) -> str:
|
||||||
"""Returns a hash used within the Collection-Synchronization http header
|
"""Returns a hash used within the Collection-Synchronization http header
|
||||||
See https://github.com/mastodon/mastodon/pull/14510
|
See https://github.com/mastodon/mastodon/pull/14510
|
||||||
https://codeberg.org/fediverse/fep/src/branch/main/feps/fep-8fcf.md
|
https://codeberg.org/fediverse/fep/src/branch/main/feps/fep-8fcf.md
|
||||||
|
@ -94,14 +95,19 @@ def _get_followers_sync_hash(sync_json: {}) -> str:
|
||||||
return None
|
return None
|
||||||
sync_hash = None
|
sync_hash = None
|
||||||
for actor in sync_json['orderedItems']:
|
for actor in sync_json['orderedItems']:
|
||||||
actor_hash = sha256(actor.encode('utf-8'))
|
curr_sync_hash = sha256(actor.encode('utf-8'))
|
||||||
|
sync_hash_hex = curr_sync_hash.hexdigest()
|
||||||
|
sync_hash_int = int(sync_hash_hex, 16)
|
||||||
if sync_hash:
|
if sync_hash:
|
||||||
sync_hash = sync_hash ^ actor_hash
|
sync_hash = sync_hash ^ sync_hash_int
|
||||||
else:
|
else:
|
||||||
sync_hash = actor_hash
|
sync_hash = sync_hash_int
|
||||||
if sync_hash:
|
if sync_hash is None:
|
||||||
sync_hash = sync_hash.hexdigest()
|
return None
|
||||||
return sync_hash
|
sync_hash_int = sync_hash
|
||||||
|
sync_hash = hashlib.sha256()
|
||||||
|
sync_hash_bytes = sync_hash_int.to_bytes(32, 'big')
|
||||||
|
return sync_hash_bytes.hex()
|
||||||
|
|
||||||
|
|
||||||
def update_followers_sync_cache(base_dir: str,
|
def update_followers_sync_cache(base_dir: str,
|
||||||
|
@ -124,7 +130,7 @@ def update_followers_sync_cache(base_dir: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
calling_domain)
|
calling_domain)
|
||||||
sync_hash = _get_followers_sync_hash(sync_json)
|
sync_hash = get_followers_sync_hash(sync_json)
|
||||||
if sync_hash:
|
if sync_hash:
|
||||||
sync_cache[foll_sync_key] = {
|
sync_cache[foll_sync_key] = {
|
||||||
"hash": sync_hash,
|
"hash": sync_hash,
|
||||||
|
|
19
tests.py
19
tests.py
|
@ -202,6 +202,7 @@ from happening import dav_day_via_server
|
||||||
from webapp_theme_designer import color_contrast
|
from webapp_theme_designer import color_contrast
|
||||||
from maps import get_map_links_from_post_content
|
from maps import get_map_links_from_post_content
|
||||||
from maps import geocoords_from_map_link
|
from maps import geocoords_from_map_link
|
||||||
|
from followerSync import get_followers_sync_hash
|
||||||
|
|
||||||
|
|
||||||
TEST_SERVER_GROUP_RUNNING = False
|
TEST_SERVER_GROUP_RUNNING = False
|
||||||
|
@ -7942,6 +7943,23 @@ def _test_convert_markdown() -> None:
|
||||||
assert message_json['mediaType'] == 'text/html'
|
assert message_json['mediaType'] == 'text/html'
|
||||||
|
|
||||||
|
|
||||||
|
def _test_xor_hashes():
|
||||||
|
print('xor_hashes')
|
||||||
|
sync_json = {
|
||||||
|
"orderedItems": [
|
||||||
|
'https://somedomain/users/somenick',
|
||||||
|
'https://anotherdomain/users/anothernick'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
result = get_followers_sync_hash(sync_json)
|
||||||
|
expected = \
|
||||||
|
'316f8dfdf471920a9cdc17da48feead398378e927dee3372d938c524aa7d8917'
|
||||||
|
if result != expected:
|
||||||
|
print('expected: ' + expected)
|
||||||
|
print('result: ' + result)
|
||||||
|
assert result == expected
|
||||||
|
|
||||||
|
|
||||||
def run_all_tests():
|
def run_all_tests():
|
||||||
base_dir = os.getcwd()
|
base_dir = os.getcwd()
|
||||||
print('Running tests...')
|
print('Running tests...')
|
||||||
|
@ -7959,6 +7977,7 @@ def run_all_tests():
|
||||||
_test_checkbox_names()
|
_test_checkbox_names()
|
||||||
_test_thread_functions()
|
_test_thread_functions()
|
||||||
_test_functions()
|
_test_functions()
|
||||||
|
_test_xor_hashes()
|
||||||
_test_convert_markdown()
|
_test_convert_markdown()
|
||||||
_test_remove_style()
|
_test_remove_style()
|
||||||
_test_html_closing_tag()
|
_test_html_closing_tag()
|
||||||
|
|
Loading…
Reference in New Issue