mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			Tidying
							parent
							
								
									2da3b42314
								
							
						
					
					
						commit
						c39bb9f396
					
				| 
						 | 
				
			
			@ -273,6 +273,7 @@ from languages import set_actor_languages
 | 
			
		|||
from languages import get_understood_languages
 | 
			
		||||
from like import update_likes_collection
 | 
			
		||||
from reaction import update_reaction_collection
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import load_reverse_timeline
 | 
			
		||||
from utils import save_reverse_timeline
 | 
			
		||||
from utils import load_min_images_for_accounts
 | 
			
		||||
| 
						 | 
				
			
			@ -21248,7 +21249,7 @@ class PubServer(BaseHTTPRequestHandler):
 | 
			
		|||
        if not handle:
 | 
			
		||||
            return False
 | 
			
		||||
        if isinstance(handle, str):
 | 
			
		||||
            person_dir = self.server.base_dir + '/accounts/' + handle
 | 
			
		||||
            person_dir = acct_handle_dir(self.server.base_dir, handle)
 | 
			
		||||
            if not os.path.isdir(person_dir + '/devices'):
 | 
			
		||||
                return False
 | 
			
		||||
            devices_list = []
 | 
			
		||||
| 
						 | 
				
			
			@ -22304,7 +22305,7 @@ def load_tokens(base_dir: str, tokens_dict: {}, tokens_lookup: {}) -> None:
 | 
			
		|||
    for _, dirs, _ in os.walk(base_dir + '/accounts'):
 | 
			
		||||
        for handle in dirs:
 | 
			
		||||
            if '@' in handle:
 | 
			
		||||
                token_filename = base_dir + '/accounts/' + handle + '/.token'
 | 
			
		||||
                token_filename = acct_handle_dir(base_dir, handle) + '/.token'
 | 
			
		||||
                if not os.path.isfile(token_filename):
 | 
			
		||||
                    continue
 | 
			
		||||
                nickname = handle.split('@')[0]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ __module_group__ = "ActivityPub"
 | 
			
		|||
 | 
			
		||||
from pprint import pprint
 | 
			
		||||
import os
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import has_object_string_object
 | 
			
		||||
from utils import has_object_string_type
 | 
			
		||||
from utils import remove_domain_port
 | 
			
		||||
| 
						 | 
				
			
			@ -304,8 +305,9 @@ def unfollow_account(base_dir: str, nickname: str, domain: str,
 | 
			
		|||
        handle_to_unfollow = '!' + handle_to_unfollow
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts'):
 | 
			
		||||
        os.mkdir(base_dir + '/accounts')
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
        os.mkdir(base_dir + '/accounts/' + handle)
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        os.mkdir(handle_dir)
 | 
			
		||||
 | 
			
		||||
    accounts_dir = acct_dir(base_dir, nickname, domain)
 | 
			
		||||
    filename = accounts_dir + '/' + follow_file
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,6 @@ __status__ = "Production"
 | 
			
		|||
__module_group__ = "Calendar"
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
from utils import acct_dir
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _text_in_file2(text: str, filename: str,
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +32,7 @@ def _text_in_file2(text: str, filename: str,
 | 
			
		|||
def _dir_acct(base_dir: str, nickname: str, domain: str) -> str:
 | 
			
		||||
    """Returns the directory of an account
 | 
			
		||||
    """
 | 
			
		||||
    return acct_dir(base_dir,  nickname, domain)
 | 
			
		||||
    return base_dir + '/accounts/' + nickname + '@' + domain
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _port_domain_remove(domain: str) -> str:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										20
									
								
								happening.py
								
								
								
								
							
							
						
						
									
										20
									
								
								happening.py
								
								
								
								
							| 
						 | 
				
			
			@ -13,6 +13,7 @@ from hashlib import md5
 | 
			
		|||
from datetime import datetime
 | 
			
		||||
from datetime import timedelta
 | 
			
		||||
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import is_public_post
 | 
			
		||||
from utils import load_json
 | 
			
		||||
from utils import save_json
 | 
			
		||||
| 
						 | 
				
			
			@ -94,10 +95,10 @@ def save_event_post(base_dir: str, handle: str, post_id: str,
 | 
			
		|||
    See https://framagit.org/framasoft/mobilizon/-/blob/
 | 
			
		||||
    master/lib/federation/activity_stream/converter/event.ex
 | 
			
		||||
    """
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
        print('WARN: Account does not exist at ' +
 | 
			
		||||
              base_dir + '/accounts/' + handle)
 | 
			
		||||
    calendar_path = base_dir + '/accounts/' + handle + '/calendar'
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        print('WARN: Account does not exist at ' + handle_dir)
 | 
			
		||||
    calendar_path = handle_dir + '/calendar'
 | 
			
		||||
    if not os.path.isdir(calendar_path):
 | 
			
		||||
        os.mkdir(calendar_path)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -121,11 +122,11 @@ def save_event_post(base_dir: str, handle: str, post_id: str,
 | 
			
		|||
        print('Mobilizon type event')
 | 
			
		||||
        # if this is a full description of an event then save it
 | 
			
		||||
        # as a separate json file
 | 
			
		||||
        events_path = base_dir + '/accounts/' + handle + '/events'
 | 
			
		||||
        events_path = handle_dir + '/events'
 | 
			
		||||
        if not os.path.isdir(events_path):
 | 
			
		||||
            os.mkdir(events_path)
 | 
			
		||||
        events_year_path = \
 | 
			
		||||
            base_dir + '/accounts/' + handle + '/events/' + str(event_year)
 | 
			
		||||
            handle_dir + '/events/' + str(event_year)
 | 
			
		||||
        if not os.path.isdir(events_year_path):
 | 
			
		||||
            os.mkdir(events_year_path)
 | 
			
		||||
        event_id = str(event_year) + '-' + event_time.strftime("%m") + '-' + \
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +135,7 @@ def save_event_post(base_dir: str, handle: str, post_id: str,
 | 
			
		|||
 | 
			
		||||
        save_json(event_json, event_filename)
 | 
			
		||||
        # save to the events timeline
 | 
			
		||||
        tl_events_filename = base_dir + '/accounts/' + handle + '/events.txt'
 | 
			
		||||
        tl_events_filename = handle_dir + '/events.txt'
 | 
			
		||||
 | 
			
		||||
        if os.path.isfile(tl_events_filename):
 | 
			
		||||
            _remove_event_from_timeline(event_id, tl_events_filename)
 | 
			
		||||
| 
						 | 
				
			
			@ -180,7 +181,7 @@ def save_event_post(base_dir: str, handle: str, post_id: str,
 | 
			
		|||
 | 
			
		||||
    # create a file which will trigger a notification that
 | 
			
		||||
    # a new event has been added
 | 
			
		||||
    cal_notify_filename = base_dir + '/accounts/' + handle + '/.newCalendar'
 | 
			
		||||
    cal_notify_filename = handle_dir + '/.newCalendar'
 | 
			
		||||
    notify_str = \
 | 
			
		||||
        '/calendar?year=' + str(event_year) + '?month=' + \
 | 
			
		||||
        str(event_month_number) + '?day=' + str(event_day_of_month)
 | 
			
		||||
| 
						 | 
				
			
			@ -962,7 +963,8 @@ def _dav_store_event(base_dir: str, nickname: str, domain: str,
 | 
			
		|||
            "name": location
 | 
			
		||||
        })
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    outbox_dir = base_dir + '/accounts/' + handle + '/outbox'
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    outbox_dir = handle_dir + '/outbox'
 | 
			
		||||
    if not os.path.isdir(outbox_dir):
 | 
			
		||||
        return False
 | 
			
		||||
    filename = outbox_dir + '/' + post_id.replace('/', '#') + '.json'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										59
									
								
								inbox.py
								
								
								
								
							
							
						
						
									
										59
									
								
								inbox.py
								
								
								
								
							| 
						 | 
				
			
			@ -18,6 +18,7 @@ from languages import understood_post_language
 | 
			
		|||
from like import update_likes_collection
 | 
			
		||||
from reaction import update_reaction_collection
 | 
			
		||||
from reaction import valid_emoji_content
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import is_account_dir
 | 
			
		||||
from utils import remove_eol
 | 
			
		||||
from utils import text_in_file
 | 
			
		||||
| 
						 | 
				
			
			@ -800,7 +801,8 @@ def _inbox_post_recipients_add(base_dir: str, http_prefix: str, to_list: [],
 | 
			
		|||
            # get the handle for the account on this instance
 | 
			
		||||
            nickname = recipient.split(domain_match)[1]
 | 
			
		||||
            handle = nickname + '@' + domain
 | 
			
		||||
            if os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
            handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
            if os.path.isdir(handle_dir):
 | 
			
		||||
                recipients_dict[handle] = None
 | 
			
		||||
            else:
 | 
			
		||||
                if debug:
 | 
			
		||||
| 
						 | 
				
			
			@ -1518,7 +1520,8 @@ def _receive_like(recent_posts_cache: {},
 | 
			
		|||
            print('DEBUG: "statuses" missing from object in ' +
 | 
			
		||||
                  message_json['type'])
 | 
			
		||||
        return False
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        print('DEBUG: unknown recipient of like - ' + handle)
 | 
			
		||||
    # if this post in the outbox of the person?
 | 
			
		||||
    handle_name = handle.split('@')[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -1652,7 +1655,8 @@ def _receive_undo_like(recent_posts_cache: {},
 | 
			
		|||
            print('DEBUG: "statuses" missing from like object in ' +
 | 
			
		||||
                  message_json['type'])
 | 
			
		||||
        return False
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        print('DEBUG: unknown recipient of undo like - ' + handle)
 | 
			
		||||
    # if this post in the outbox of the person?
 | 
			
		||||
    handle_name = handle.split('@')[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -1785,10 +1789,10 @@ def _receive_reaction(recent_posts_cache: {},
 | 
			
		|||
            print('DEBUG: "statuses" missing from object in ' +
 | 
			
		||||
                  message_json['type'])
 | 
			
		||||
        return False
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        print('DEBUG: unknown recipient of emoji reaction - ' + handle)
 | 
			
		||||
    if os.path.isfile(base_dir + '/accounts/' + handle +
 | 
			
		||||
                      '/.hideReactionButton'):
 | 
			
		||||
    if os.path.isfile(handle_dir + '/.hideReactionButton'):
 | 
			
		||||
        print('Emoji reaction rejected by ' + handle +
 | 
			
		||||
              ' due to their settings')
 | 
			
		||||
        return True
 | 
			
		||||
| 
						 | 
				
			
			@ -1965,10 +1969,10 @@ def _receive_zot_reaction(recent_posts_cache: {},
 | 
			
		|||
            print('DEBUG: "statuses" missing from inReplyTo in ' +
 | 
			
		||||
                  message_json['object']['type'])
 | 
			
		||||
        return False
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        print('DEBUG: unknown recipient of zot emoji reaction - ' + handle)
 | 
			
		||||
    if os.path.isfile(base_dir + '/accounts/' + handle +
 | 
			
		||||
                      '/.hideReactionButton'):
 | 
			
		||||
    if os.path.isfile(handle_dir + '/.hideReactionButton'):
 | 
			
		||||
        print('Zot emoji reaction rejected by ' + handle +
 | 
			
		||||
              ' due to their settings')
 | 
			
		||||
        return True
 | 
			
		||||
| 
						 | 
				
			
			@ -2124,7 +2128,8 @@ def _receive_undo_reaction(recent_posts_cache: {},
 | 
			
		|||
            print('DEBUG: "statuses" missing from reaction object in ' +
 | 
			
		||||
                  message_json['type'])
 | 
			
		||||
        return False
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        print('DEBUG: unknown recipient of undo reaction - ' + handle)
 | 
			
		||||
    # if this post in the outbox of the person?
 | 
			
		||||
    handle_name = handle.split('@')[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -2504,7 +2509,8 @@ def _receive_delete(session, handle: str, is_group: bool, base_dir: str,
 | 
			
		|||
    if message_json['actor'] not in message_json['object']:
 | 
			
		||||
        if debug:
 | 
			
		||||
            print('DEBUG: actor is not the owner of the post to be deleted')
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        print('DEBUG: unknown recipient of like - ' + handle)
 | 
			
		||||
    # if this post in the outbox of the person?
 | 
			
		||||
    message_id = remove_id_ending(message_json['object'])
 | 
			
		||||
| 
						 | 
				
			
			@ -2604,7 +2610,8 @@ def _receive_announce(recent_posts_cache: {},
 | 
			
		|||
        if debug:
 | 
			
		||||
            print('DEBUG: announced domain is blocked')
 | 
			
		||||
        return False
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        print('DEBUG: unknown recipient of announce - ' + handle)
 | 
			
		||||
 | 
			
		||||
    # is the announce actor blocked?
 | 
			
		||||
| 
						 | 
				
			
			@ -2825,7 +2832,8 @@ def _receive_undo_announce(recent_posts_cache: {},
 | 
			
		|||
            print('DEBUG: "users" or "profile" missing from actor in ' +
 | 
			
		||||
                  message_json['type'] + ' announce')
 | 
			
		||||
        return False
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        print('DEBUG: unknown recipient of undo announce - ' + handle)
 | 
			
		||||
    # if this post in the outbox of the person?
 | 
			
		||||
    handle_name = handle.split('@')[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -3176,7 +3184,7 @@ def _obtain_avatar_for_reply_post(session, base_dir: str, http_prefix: str,
 | 
			
		|||
def _dm_notify(base_dir: str, handle: str, url: str) -> None:
 | 
			
		||||
    """Creates a notification that a new DM has arrived
 | 
			
		||||
    """
 | 
			
		||||
    account_dir = base_dir + '/accounts/' + handle
 | 
			
		||||
    account_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(account_dir):
 | 
			
		||||
        return
 | 
			
		||||
    dm_file = account_dir + '/.newDM'
 | 
			
		||||
| 
						 | 
				
			
			@ -3272,7 +3280,7 @@ def _like_notify(base_dir: str, domain: str,
 | 
			
		|||
        if not i2p_domain and not onion_domain:
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
    account_dir = base_dir + '/accounts/' + handle
 | 
			
		||||
    account_dir = acct_handle_dir(base_dir,  handle)
 | 
			
		||||
 | 
			
		||||
    # are like notifications enabled?
 | 
			
		||||
    notify_likes_enabled_filename = account_dir + '/.notifyLikes'
 | 
			
		||||
| 
						 | 
				
			
			@ -3335,7 +3343,7 @@ def _reaction_notify(base_dir: str, domain: str, onion_domain: str,
 | 
			
		|||
        if '/' + onion_domain + '/users/' + nickname not in url:
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
    account_dir = base_dir + '/accounts/' + handle
 | 
			
		||||
    account_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
 | 
			
		||||
    # are reaction notifications enabled?
 | 
			
		||||
    notify_reaction_enabled_filename = account_dir + '/.notifyReactions'
 | 
			
		||||
| 
						 | 
				
			
			@ -3388,7 +3396,7 @@ def _notify_post_arrival(base_dir: str, handle: str, url: str) -> None:
 | 
			
		|||
    This is for followed accounts with the notify checkbox enabled
 | 
			
		||||
    on the person options screen
 | 
			
		||||
    """
 | 
			
		||||
    account_dir = base_dir + '/accounts/' + handle
 | 
			
		||||
    account_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(account_dir):
 | 
			
		||||
        return
 | 
			
		||||
    notify_file = account_dir + '/.newNotifiedPost'
 | 
			
		||||
| 
						 | 
				
			
			@ -3408,7 +3416,7 @@ def _notify_post_arrival(base_dir: str, handle: str, url: str) -> None:
 | 
			
		|||
def _reply_notify(base_dir: str, handle: str, url: str) -> None:
 | 
			
		||||
    """Creates a notification that a new reply has arrived
 | 
			
		||||
    """
 | 
			
		||||
    account_dir = base_dir + '/accounts/' + handle
 | 
			
		||||
    account_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(account_dir):
 | 
			
		||||
        return
 | 
			
		||||
    reply_file = account_dir + '/.newReply'
 | 
			
		||||
| 
						 | 
				
			
			@ -3424,7 +3432,7 @@ def _git_patch_notify(base_dir: str, handle: str, subject: str,
 | 
			
		|||
                      from_nickname: str, from_domain: str) -> None:
 | 
			
		||||
    """Creates a notification that a new git patch has arrived
 | 
			
		||||
    """
 | 
			
		||||
    account_dir = base_dir + '/accounts/' + handle
 | 
			
		||||
    account_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(account_dir):
 | 
			
		||||
        return
 | 
			
		||||
    patch_file = account_dir + '/.newPatch'
 | 
			
		||||
| 
						 | 
				
			
			@ -3440,7 +3448,7 @@ def _git_patch_notify(base_dir: str, handle: str, subject: str,
 | 
			
		|||
def _group_handle(base_dir: str, handle: str) -> bool:
 | 
			
		||||
    """Is the given account handle a group?
 | 
			
		||||
    """
 | 
			
		||||
    actor_file = base_dir + '/accounts/' + handle + '.json'
 | 
			
		||||
    actor_file = acct_handle_dir(base_dir, handle) + '.json'
 | 
			
		||||
    if not os.path.isfile(actor_file):
 | 
			
		||||
        return False
 | 
			
		||||
    actor_json = load_json(actor_file)
 | 
			
		||||
| 
						 | 
				
			
			@ -3478,7 +3486,7 @@ def _send_to_group_members(server, session, session_onion, session_i2p,
 | 
			
		|||
            domain_str = shared_federated_domain.strip()
 | 
			
		||||
            shared_items_federated_domains.append(domain_str)
 | 
			
		||||
 | 
			
		||||
    followers_file = base_dir + '/accounts/' + handle + '/followers.txt'
 | 
			
		||||
    followers_file = acct_handle_dir(base_dir, handle) + '/followers.txt'
 | 
			
		||||
    if not os.path.isfile(followers_file):
 | 
			
		||||
        return
 | 
			
		||||
    if not post_json_object.get('to'):
 | 
			
		||||
| 
						 | 
				
			
			@ -3572,7 +3580,7 @@ def inbox_update_index(boxname: str, base_dir: str, handle: str,
 | 
			
		|||
    The new entry is added to the top of the file
 | 
			
		||||
    """
 | 
			
		||||
    index_filename = \
 | 
			
		||||
        base_dir + '/accounts/' + handle + '/' + boxname + '.index'
 | 
			
		||||
        acct_handle_dir(base_dir, handle) + '/' + boxname + '.index'
 | 
			
		||||
    if debug:
 | 
			
		||||
        print('DEBUG: Updating index ' + index_filename)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -5124,10 +5132,11 @@ def _receive_follow_request(session, session_onion, session_i2p,
 | 
			
		|||
            return True
 | 
			
		||||
    handle_to_follow = nickname_to_follow + '@' + domain_to_follow
 | 
			
		||||
    if domain_to_follow == domain:
 | 
			
		||||
        if not os.path.isdir(base_dir + '/accounts/' + handle_to_follow):
 | 
			
		||||
        handle_dir = acct_handle_dir(base_dir, handle_to_follow)
 | 
			
		||||
        if not os.path.isdir(handle_dir):
 | 
			
		||||
            if debug:
 | 
			
		||||
                print('DEBUG: followed account not found - ' +
 | 
			
		||||
                      base_dir + '/accounts/' + handle_to_follow)
 | 
			
		||||
                      handle_dir)
 | 
			
		||||
            return True
 | 
			
		||||
 | 
			
		||||
    is_already_follower = False
 | 
			
		||||
| 
						 | 
				
			
			@ -5891,7 +5900,7 @@ def run_inbox_queue(server,
 | 
			
		|||
                mitm = True
 | 
			
		||||
            bold_reading = False
 | 
			
		||||
            bold_reading_filename = \
 | 
			
		||||
                base_dir + '/accounts/' + handle + '/.boldReading'
 | 
			
		||||
                acct_handle_dir(base_dir, handle) + '/.boldReading'
 | 
			
		||||
            if os.path.isfile(bold_reading_filename):
 | 
			
		||||
                bold_reading = True
 | 
			
		||||
            _inbox_after_initial(server, inbox_start_time,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ import os
 | 
			
		|||
from follow import followed_account_accepts
 | 
			
		||||
from follow import followed_account_rejects
 | 
			
		||||
from follow import remove_from_follow_requests
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import load_json
 | 
			
		||||
from utils import remove_domain_port
 | 
			
		||||
from utils import get_port_from_domain
 | 
			
		||||
| 
						 | 
				
			
			@ -149,7 +150,7 @@ def manual_approve_follow_request(session, session_onion, session_i2p,
 | 
			
		|||
    handle = nickname + '@' + domain
 | 
			
		||||
    print('Manual follow accept: ' + handle +
 | 
			
		||||
          ' approving follow request from ' + approve_handle)
 | 
			
		||||
    account_dir = base_dir + '/accounts/' + handle
 | 
			
		||||
    account_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    approve_follows_filename = account_dir + '/followrequests.txt'
 | 
			
		||||
    if not os.path.isfile(approve_follows_filename):
 | 
			
		||||
        print('Manual follow accept: follow requests file ' +
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,7 @@ from datetime import timezone
 | 
			
		|||
from collections import OrderedDict
 | 
			
		||||
from utils import valid_post_date
 | 
			
		||||
from categories import set_hashtag_category
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import remove_eol
 | 
			
		||||
from utils import get_domain_from_actor
 | 
			
		||||
from utils import valid_hash_tag
 | 
			
		||||
| 
						 | 
				
			
			@ -1538,8 +1539,8 @@ def _add_blogs_to_newswire(base_dir: str, domain: str, newswire: {},
 | 
			
		|||
            if is_suspended(base_dir, nickname):
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            if os.path.isfile(base_dir + '/accounts/' + handle +
 | 
			
		||||
                              '/.nonewswire'):
 | 
			
		||||
            handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
            if os.path.isfile(handle_dir + '/.nonewswire'):
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            # is there a blogs timeline for this account?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										31
									
								
								person.py
								
								
								
								
							
							
						
						
									
										31
									
								
								person.py
								
								
								
								
							| 
						 | 
				
			
			@ -38,6 +38,7 @@ from roles import set_role
 | 
			
		|||
from roles import actor_roles_from_list
 | 
			
		||||
from roles import get_actor_roles_list
 | 
			
		||||
from media import process_meta_data
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import safe_system_string
 | 
			
		||||
from utils import get_attachment_property_value
 | 
			
		||||
from utils import get_nickname_from_actor
 | 
			
		||||
| 
						 | 
				
			
			@ -117,12 +118,13 @@ def set_profile_image(base_dir: str, http_prefix: str,
 | 
			
		|||
    full_domain = get_full_domain(domain, port)
 | 
			
		||||
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    person_filename = base_dir + '/accounts/' + handle + '.json'
 | 
			
		||||
    person_filename = acct_handle_dir(base_dir, handle) + '.json'
 | 
			
		||||
    if not os.path.isfile(person_filename):
 | 
			
		||||
        print('person definition not found: ' + person_filename)
 | 
			
		||||
        return False
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
        print('Account not found: ' + base_dir + '/accounts/' + handle)
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        print('Account not found: ' + handle_dir)
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    icon_filename_base = 'icon'
 | 
			
		||||
| 
						 | 
				
			
			@ -155,7 +157,7 @@ def set_profile_image(base_dir: str, http_prefix: str,
 | 
			
		|||
    elif image_filename.endswith('.svg'):
 | 
			
		||||
        media_type = 'image/svg+xml'
 | 
			
		||||
        icon_filename = icon_filename_base + '.svg'
 | 
			
		||||
    profile_filename = base_dir + '/accounts/' + handle + '/' + icon_filename
 | 
			
		||||
    profile_filename = acct_handle_dir(base_dir, handle) + '/' + icon_filename
 | 
			
		||||
 | 
			
		||||
    person_json = load_json(person_filename)
 | 
			
		||||
    if person_json:
 | 
			
		||||
| 
						 | 
				
			
			@ -957,7 +959,7 @@ def person_lookup(domain: str, path: str, base_dir: str) -> {}:
 | 
			
		|||
        return None
 | 
			
		||||
    domain = remove_domain_port(domain)
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    filename = base_dir + '/accounts/' + handle + '.json'
 | 
			
		||||
    filename = acct_handle_dir(base_dir, handle) + '.json'
 | 
			
		||||
    if not os.path.isfile(filename):
 | 
			
		||||
        return None
 | 
			
		||||
    person_json = load_json(filename)
 | 
			
		||||
| 
						 | 
				
			
			@ -1087,7 +1089,7 @@ def set_display_nickname(base_dir: str, nickname: str, domain: str,
 | 
			
		|||
    if len(display_name) > 32:
 | 
			
		||||
        return False
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    filename = base_dir + '/accounts/' + handle + '.json'
 | 
			
		||||
    filename = acct_handle_dir(base_dir, handle) + '.json'
 | 
			
		||||
    if not os.path.isfile(filename):
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1105,7 +1107,7 @@ def set_bio(base_dir: str, nickname: str, domain: str, bio: str) -> bool:
 | 
			
		|||
    if len(bio) > 32:
 | 
			
		||||
        return False
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    filename = base_dir + '/accounts/' + handle + '.json'
 | 
			
		||||
    filename = acct_handle_dir(base_dir, handle) + '.json'
 | 
			
		||||
    if not os.path.isfile(filename):
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1280,15 +1282,16 @@ def remove_account(base_dir: str, nickname: str,
 | 
			
		|||
    if os.path.isdir(base_dir + '/deactivated/' + handle):
 | 
			
		||||
        shutil.rmtree(base_dir + '/deactivated/' + handle,
 | 
			
		||||
                      ignore_errors=False, onerror=None)
 | 
			
		||||
    if os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
        shutil.rmtree(base_dir + '/accounts/' + handle,
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if os.path.isdir(handle_dir):
 | 
			
		||||
        shutil.rmtree(handle_dir,
 | 
			
		||||
                      ignore_errors=False, onerror=None)
 | 
			
		||||
    if os.path.isfile(base_dir + '/accounts/' + handle + '.json'):
 | 
			
		||||
    if os.path.isfile(handle_dir + '.json'):
 | 
			
		||||
        try:
 | 
			
		||||
            os.remove(base_dir + '/accounts/' + handle + '.json')
 | 
			
		||||
            os.remove(handle_dir + '.json')
 | 
			
		||||
        except OSError:
 | 
			
		||||
            print('EX: remove_account unable to delete ' +
 | 
			
		||||
                  base_dir + '/accounts/' + handle + '.json')
 | 
			
		||||
                  handle_dir + '.json')
 | 
			
		||||
    if os.path.isfile(base_dir + '/wfendpoints/' + handle + '.json'):
 | 
			
		||||
        try:
 | 
			
		||||
            os.remove(base_dir + '/wfendpoints/' + handle + '.json')
 | 
			
		||||
| 
						 | 
				
			
			@ -1330,7 +1333,7 @@ def deactivate_account(base_dir: str, nickname: str, domain: str) -> bool:
 | 
			
		|||
    """
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
 | 
			
		||||
    account_dir = base_dir + '/accounts/' + handle
 | 
			
		||||
    account_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(account_dir):
 | 
			
		||||
        return False
 | 
			
		||||
    deactivated_dir = base_dir + '/deactivated'
 | 
			
		||||
| 
						 | 
				
			
			@ -1365,7 +1368,7 @@ def activate_account(base_dir: str, nickname: str, domain: str) -> None:
 | 
			
		|||
    deactivated_dir = base_dir + '/deactivated'
 | 
			
		||||
    deactivated_account_dir = deactivated_dir + '/' + handle
 | 
			
		||||
    if os.path.isdir(deactivated_account_dir):
 | 
			
		||||
        account_dir = base_dir + '/accounts/' + handle
 | 
			
		||||
        account_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
        if not os.path.isdir(account_dir):
 | 
			
		||||
            shutil.move(deactivated_account_dir, account_dir)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										44
									
								
								posts.py
								
								
								
								
							
							
						
						
									
										44
									
								
								posts.py
								
								
								
								
							| 
						 | 
				
			
			@ -32,6 +32,7 @@ from webfinger import webfinger_handle
 | 
			
		|||
from httpsig import create_signed_header
 | 
			
		||||
from siteactive import site_is_active
 | 
			
		||||
from languages import understood_post_language
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import is_dm
 | 
			
		||||
from utils import remove_eol
 | 
			
		||||
from utils import text_in_file
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +135,7 @@ def no_of_followers_on_domain(base_dir: str, handle: str,
 | 
			
		|||
    """Returns the number of followers of the given handle from the
 | 
			
		||||
    given domain
 | 
			
		||||
    """
 | 
			
		||||
    filename = base_dir + '/accounts/' + handle + '/' + follow_file
 | 
			
		||||
    filename = acct_handle_dir(base_dir, handle) + '/' + follow_file
 | 
			
		||||
    if not os.path.isfile(filename):
 | 
			
		||||
        return 0
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1022,7 +1023,7 @@ def _add_schedule_post(base_dir: str, nickname: str, domain: str,
 | 
			
		|||
    """
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    schedule_index_filename = \
 | 
			
		||||
        base_dir + '/accounts/' + handle + '/schedule.index'
 | 
			
		||||
        acct_handle_dir(base_dir, handle) + '/schedule.index'
 | 
			
		||||
 | 
			
		||||
    index_str = event_date_str + ' ' + post_id.replace('/', '#')
 | 
			
		||||
    if os.path.isfile(schedule_index_filename):
 | 
			
		||||
| 
						 | 
				
			
			@ -2150,7 +2151,8 @@ def get_mentioned_people(base_dir: str, http_prefix: str,
 | 
			
		|||
            print('DEBUG: mentioned handle ' + handle)
 | 
			
		||||
        if '@' not in handle:
 | 
			
		||||
            handle = handle + '@' + domain
 | 
			
		||||
            if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
            handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
            if not os.path.isdir(handle_dir):
 | 
			
		||||
                continue
 | 
			
		||||
        else:
 | 
			
		||||
            external_domain = handle.split('@')[1]
 | 
			
		||||
| 
						 | 
				
			
			@ -2322,7 +2324,7 @@ def create_report_post(base_dir: str,
 | 
			
		|||
 | 
			
		||||
        # save a notification file so that the moderator
 | 
			
		||||
        # knows something new has appeared
 | 
			
		||||
        new_report_file = base_dir + '/accounts/' + handle + '/.newReport'
 | 
			
		||||
        new_report_file = acct_handle_dir(base_dir, handle) + '/.newReport'
 | 
			
		||||
        if os.path.isfile(new_report_file):
 | 
			
		||||
            continue
 | 
			
		||||
        try:
 | 
			
		||||
| 
						 | 
				
			
			@ -2745,7 +2747,7 @@ def group_followers_by_domain(base_dir: str, nickname: str, domain: str) -> {}:
 | 
			
		|||
    """Returns a dictionary with followers grouped by domain
 | 
			
		||||
    """
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    followers_filename = base_dir + '/accounts/' + handle + '/followers.txt'
 | 
			
		||||
    followers_filename = acct_handle_dir(base_dir, handle) + '/followers.txt'
 | 
			
		||||
    if not os.path.isfile(followers_filename):
 | 
			
		||||
        return None
 | 
			
		||||
    grouped = {}
 | 
			
		||||
| 
						 | 
				
			
			@ -4353,18 +4355,14 @@ def archive_posts(base_dir: str, http_prefix: str, archive_dir: str,
 | 
			
		|||
                domain = handle.split('@')[1]
 | 
			
		||||
                archive_subdir = None
 | 
			
		||||
                if archive_dir:
 | 
			
		||||
                    if not os.path.isdir(archive_dir + '/accounts/' + handle):
 | 
			
		||||
                        os.mkdir(archive_dir + '/accounts/' + handle)
 | 
			
		||||
                    if not os.path.isdir(archive_dir + '/accounts/' +
 | 
			
		||||
                                         handle + '/inbox'):
 | 
			
		||||
                        os.mkdir(archive_dir + '/accounts/' +
 | 
			
		||||
                                 handle + '/inbox')
 | 
			
		||||
                    if not os.path.isdir(archive_dir + '/accounts/' +
 | 
			
		||||
                                         handle + '/outbox'):
 | 
			
		||||
                        os.mkdir(archive_dir + '/accounts/' +
 | 
			
		||||
                                 handle + '/outbox')
 | 
			
		||||
                    archive_subdir = archive_dir + '/accounts/' + \
 | 
			
		||||
                        handle + '/inbox'
 | 
			
		||||
                    archive_handle_dir = acct_handle_dir(archive_dir, handle)
 | 
			
		||||
                    if not os.path.isdir(archive_handle_dir):
 | 
			
		||||
                        os.mkdir(archive_handle_dir)
 | 
			
		||||
                    if not os.path.isdir(archive_handle_dir + '/inbox'):
 | 
			
		||||
                        os.mkdir(archive_handle_dir + '/inbox')
 | 
			
		||||
                    if not os.path.isdir(archive_handle_dir + '/outbox'):
 | 
			
		||||
                        os.mkdir(archive_handle_dir + '/outbox')
 | 
			
		||||
                    archive_subdir = archive_handle_dir + '/inbox'
 | 
			
		||||
                archive_posts_for_person(http_prefix,
 | 
			
		||||
                                         nickname, domain, base_dir,
 | 
			
		||||
                                         'inbox', archive_subdir,
 | 
			
		||||
| 
						 | 
				
			
			@ -4443,7 +4441,7 @@ def get_post_expiry_keep_dms(base_dir: str, nickname: str, domain: str) -> int:
 | 
			
		|||
    keep_dms = True
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    expire_dms_filename = \
 | 
			
		||||
        base_dir + '/accounts/' + handle + '/.expire_posts_dms'
 | 
			
		||||
        acct_handle_dir(base_dir, handle) + '/.expire_posts_dms'
 | 
			
		||||
    if os.path.isfile(expire_dms_filename):
 | 
			
		||||
        keep_dms = False
 | 
			
		||||
    return keep_dms
 | 
			
		||||
| 
						 | 
				
			
			@ -4455,7 +4453,7 @@ def set_post_expiry_keep_dms(base_dir: str, nickname: str, domain: str,
 | 
			
		|||
    """
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    expire_dms_filename = \
 | 
			
		||||
        base_dir + '/accounts/' + handle + '/.expire_posts_dms'
 | 
			
		||||
        acct_handle_dir(base_dir, handle) + '/.expire_posts_dms'
 | 
			
		||||
    if keep_dms:
 | 
			
		||||
        if os.path.isfile(expire_dms_filename):
 | 
			
		||||
            try:
 | 
			
		||||
| 
						 | 
				
			
			@ -4484,7 +4482,7 @@ def expire_posts(base_dir: str, http_prefix: str,
 | 
			
		|||
            nickname = handle.split('@')[0]
 | 
			
		||||
            domain = handle.split('@')[1]
 | 
			
		||||
            expire_posts_filename = \
 | 
			
		||||
                base_dir + '/accounts/' + handle + '/.expire_posts_days'
 | 
			
		||||
                acct_handle_dir(base_dir, handle) + '/.expire_posts_days'
 | 
			
		||||
            if not os.path.isfile(expire_posts_filename):
 | 
			
		||||
                continue
 | 
			
		||||
            keep_dms = get_post_expiry_keep_dms(base_dir, nickname, domain)
 | 
			
		||||
| 
						 | 
				
			
			@ -4519,7 +4517,7 @@ def get_post_expiry_days(base_dir: str, nickname: str, domain: str) -> int:
 | 
			
		|||
    """
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    expire_posts_filename = \
 | 
			
		||||
        base_dir + '/accounts/' + handle + '/.expire_posts_days'
 | 
			
		||||
        acct_handle_dir(base_dir, handle) + '/.expire_posts_days'
 | 
			
		||||
    if not os.path.isfile(expire_posts_filename):
 | 
			
		||||
        return 0
 | 
			
		||||
    days_str = None
 | 
			
		||||
| 
						 | 
				
			
			@ -4542,7 +4540,7 @@ def set_post_expiry_days(base_dir: str, nickname: str, domain: str,
 | 
			
		|||
    """
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    expire_posts_filename = \
 | 
			
		||||
        base_dir + '/accounts/' + handle + '/.expire_posts_days'
 | 
			
		||||
        acct_handle_dir(base_dir, handle) + '/.expire_posts_days'
 | 
			
		||||
    try:
 | 
			
		||||
        with open(expire_posts_filename, 'w+', encoding='utf-8') as fp_expire:
 | 
			
		||||
            fp_expire.write(str(max_age_days))
 | 
			
		||||
| 
						 | 
				
			
			@ -4577,7 +4575,7 @@ def archive_posts_for_person(http_prefix: str, nickname: str, domain: str,
 | 
			
		|||
    # remove entries from the index
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    index_filename = \
 | 
			
		||||
        base_dir + '/accounts/' + handle + '/' + boxname + '.index'
 | 
			
		||||
        acct_handle_dir(base_dir, handle) + '/' + boxname + '.index'
 | 
			
		||||
    if os.path.isfile(index_filename):
 | 
			
		||||
        index_ctr = 0
 | 
			
		||||
        # get the existing index entries as a string
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@ __module_group__ = "Calendar"
 | 
			
		|||
import os
 | 
			
		||||
import time
 | 
			
		||||
import datetime
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import has_object_dict
 | 
			
		||||
from utils import get_status_number
 | 
			
		||||
from utils import load_json
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +28,7 @@ def _update_post_schedule(base_dir: str, handle: str, httpd,
 | 
			
		|||
    the outbox
 | 
			
		||||
    """
 | 
			
		||||
    schedule_index_filename = \
 | 
			
		||||
        base_dir + '/accounts/' + handle + '/schedule.index'
 | 
			
		||||
        acct_handle_dir(base_dir, handle) + '/schedule.index'
 | 
			
		||||
    if not os.path.isfile(schedule_index_filename):
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -35,7 +36,7 @@ def _update_post_schedule(base_dir: str, handle: str, httpd,
 | 
			
		|||
    curr_time = datetime.datetime.utcnow()
 | 
			
		||||
    days_since_epoch = (curr_time - datetime.datetime(1970, 1, 1)).days
 | 
			
		||||
 | 
			
		||||
    schedule_dir = base_dir + '/accounts/' + handle + '/scheduled/'
 | 
			
		||||
    schedule_dir = acct_handle_dir(base_dir, handle) + '/scheduled/'
 | 
			
		||||
    index_lines = []
 | 
			
		||||
    delete_schedule_post = False
 | 
			
		||||
    nickname = handle.split('@')[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -168,7 +169,7 @@ def _update_post_schedule(base_dir: str, handle: str, httpd,
 | 
			
		|||
 | 
			
		||||
    # write the new schedule index file
 | 
			
		||||
    schedule_index_file = \
 | 
			
		||||
        base_dir + '/accounts/' + handle + '/schedule.index'
 | 
			
		||||
        acct_handle_dir(base_dir, handle) + '/schedule.index'
 | 
			
		||||
    with open(schedule_index_file, 'w+', encoding='utf-8') as schedule_file:
 | 
			
		||||
        for line in index_lines:
 | 
			
		||||
            schedule_file.write(line)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,6 +22,7 @@ from posts import get_person_box
 | 
			
		|||
from session import post_json
 | 
			
		||||
from session import post_image
 | 
			
		||||
from session import create_session
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import remove_eol
 | 
			
		||||
from utils import has_object_string_type
 | 
			
		||||
from utils import date_string_to_seconds
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +276,7 @@ def _indicate_new_share_available(base_dir: str, http_prefix: str,
 | 
			
		|||
        for handle in dirs:
 | 
			
		||||
            if not is_account_dir(handle):
 | 
			
		||||
                continue
 | 
			
		||||
            account_dir = base_dir + '/accounts/' + handle
 | 
			
		||||
            account_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
            if shares_file_type == 'shares':
 | 
			
		||||
                new_share_file = account_dir + '/.newShare'
 | 
			
		||||
            else:
 | 
			
		||||
| 
						 | 
				
			
			@ -421,7 +422,7 @@ def _expire_shares_for_account(base_dir: str, nickname: str, domain: str,
 | 
			
		|||
    handle_domain = remove_domain_port(domain)
 | 
			
		||||
    handle = nickname + '@' + handle_domain
 | 
			
		||||
    shares_filename = \
 | 
			
		||||
        base_dir + '/accounts/' + handle + '/' + shares_file_type + '.json'
 | 
			
		||||
        acct_handle_dir(base_dir, handle) + '/' + shares_file_type + '.json'
 | 
			
		||||
    if not os.path.isfile(shares_filename):
 | 
			
		||||
        return
 | 
			
		||||
    shares_json = load_json(shares_filename, 1, 2)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										21
									
								
								utils.py
								
								
								
								
							
							
						
						
									
										21
									
								
								utils.py
								
								
								
								
							| 
						 | 
				
			
			@ -290,6 +290,10 @@ def acct_dir(base_dir: str, nickname: str, domain: str) -> str:
 | 
			
		|||
    return base_dir + '/accounts/' + nickname + '@' + domain
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def acct_handle_dir(base_dir: str, handle: str) -> str:
 | 
			
		||||
    return base_dir + '/accounts/' + handle
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def is_featured_writer(base_dir: str, nickname: str, domain: str) -> bool:
 | 
			
		||||
    """Is the given account a featured writer, appearing in the features
 | 
			
		||||
    timeline on news instances?
 | 
			
		||||
| 
						 | 
				
			
			@ -749,7 +753,8 @@ def get_followers_of_person(base_dir: str,
 | 
			
		|||
    followers = []
 | 
			
		||||
    domain = remove_domain_port(domain)
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        return followers
 | 
			
		||||
    for subdir, dirs, _ in os.walk(base_dir + '/accounts'):
 | 
			
		||||
        for account in dirs:
 | 
			
		||||
| 
						 | 
				
			
			@ -981,9 +986,10 @@ def create_person_dir(nickname: str, domain: str, base_dir: str,
 | 
			
		|||
    """Create a directory for a person
 | 
			
		||||
    """
 | 
			
		||||
    handle = nickname + '@' + domain
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
        os.mkdir(base_dir + '/accounts/' + handle)
 | 
			
		||||
    box_dir = base_dir + '/accounts/' + handle + '/' + dir_name
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        os.mkdir(handle_dir)
 | 
			
		||||
    box_dir = acct_handle_dir(base_dir, handle) + '/' + dir_name
 | 
			
		||||
    if not os.path.isdir(box_dir):
 | 
			
		||||
        os.mkdir(box_dir)
 | 
			
		||||
    return box_dir
 | 
			
		||||
| 
						 | 
				
			
			@ -1450,7 +1456,8 @@ def follow_person(base_dir: str, nickname: str, domain: str,
 | 
			
		|||
    else:
 | 
			
		||||
        handle = nickname + '@' + domain
 | 
			
		||||
 | 
			
		||||
    if not os.path.isdir(base_dir + '/accounts/' + handle):
 | 
			
		||||
    handle_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
    if not os.path.isdir(handle_dir):
 | 
			
		||||
        print('WARN: account for ' + handle + ' does not exist')
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1464,7 +1471,7 @@ def follow_person(base_dir: str, nickname: str, domain: str,
 | 
			
		|||
        handle_to_follow = '!' + handle_to_follow
 | 
			
		||||
 | 
			
		||||
    # was this person previously unfollowed?
 | 
			
		||||
    unfollowed_filename = base_dir + '/accounts/' + handle + '/unfollowed.txt'
 | 
			
		||||
    unfollowed_filename = acct_handle_dir(base_dir, handle) + '/unfollowed.txt'
 | 
			
		||||
    if os.path.isfile(unfollowed_filename):
 | 
			
		||||
        if text_in_file(handle_to_follow, unfollowed_filename):
 | 
			
		||||
            # remove them from the unfollowed file
 | 
			
		||||
| 
						 | 
				
			
			@ -1484,7 +1491,7 @@ def follow_person(base_dir: str, nickname: str, domain: str,
 | 
			
		|||
    handle_to_follow = follow_nickname + '@' + follow_domain
 | 
			
		||||
    if group_account:
 | 
			
		||||
        handle_to_follow = '!' + handle_to_follow
 | 
			
		||||
    filename = base_dir + '/accounts/' + handle + '/' + follow_file
 | 
			
		||||
    filename = acct_handle_dir(base_dir, handle) + '/' + follow_file
 | 
			
		||||
    if os.path.isfile(filename):
 | 
			
		||||
        if text_in_file(handle_to_follow, filename):
 | 
			
		||||
            if debug:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ import os
 | 
			
		|||
from shutil import copyfile
 | 
			
		||||
import urllib.parse
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import get_base_content_from_post
 | 
			
		||||
from utils import is_account_dir
 | 
			
		||||
from utils import get_config_param
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +300,7 @@ def html_search_shared_items(translate: {},
 | 
			
		|||
            if not is_account_dir(handle):
 | 
			
		||||
                continue
 | 
			
		||||
            contact_nickname = handle.split('@')[0]
 | 
			
		||||
            shares_filename = base_dir + '/accounts/' + handle + \
 | 
			
		||||
            shares_filename = acct_handle_dir(base_dir, handle) + \
 | 
			
		||||
                '/' + shares_file_type + '.json'
 | 
			
		||||
            if not os.path.isfile(shares_filename):
 | 
			
		||||
                continue
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ import os
 | 
			
		|||
from shutil import copyfile
 | 
			
		||||
from collections import OrderedDict
 | 
			
		||||
from session import get_json
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import remove_id_ending
 | 
			
		||||
from utils import get_attachment_property_value
 | 
			
		||||
from utils import is_account_dir
 | 
			
		||||
| 
						 | 
				
			
			@ -464,7 +465,7 @@ def shares_timeline_json(actor: str, pageNumber: int, items_per_page: int,
 | 
			
		|||
        for handle in dirs:
 | 
			
		||||
            if not is_account_dir(handle):
 | 
			
		||||
                continue
 | 
			
		||||
            account_dir = base_dir + '/accounts/' + handle
 | 
			
		||||
            account_dir = acct_handle_dir(base_dir, handle)
 | 
			
		||||
            shares_filename = account_dir + '/' + shares_file_type + '.json'
 | 
			
		||||
            if not os.path.isfile(shares_filename):
 | 
			
		||||
                continue
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@ import urllib.parse
 | 
			
		|||
from session import get_json
 | 
			
		||||
from cache import store_webfinger_in_cache
 | 
			
		||||
from cache import get_webfinger_from_cache
 | 
			
		||||
from utils import acct_handle_dir
 | 
			
		||||
from utils import get_attachment_property_value
 | 
			
		||||
from utils import get_full_domain
 | 
			
		||||
from utils import load_json
 | 
			
		||||
| 
						 | 
				
			
			@ -520,7 +521,7 @@ def webfinger_update(base_dir: str, nickname: str, domain: str,
 | 
			
		|||
    if not wf_json:
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    actor_filename = base_dir + '/accounts/' + handle + '.json'
 | 
			
		||||
    actor_filename = acct_handle_dir(base_dir, handle) + '.json'
 | 
			
		||||
    actor_json = load_json(actor_filename)
 | 
			
		||||
    if not actor_json:
 | 
			
		||||
        return
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue