Optionally supply a reason when using the block button

merge-requests/30/head
Bob Mottram 2023-07-08 11:44:54 +01:00
parent 8b144d3bb9
commit beb9f8a033
29 changed files with 137 additions and 32 deletions

View File

@ -327,8 +327,73 @@ def add_global_block(base_dir: str,
return True return True
def _add_block_reason(base_dir: str,
nickname: str, domain: str,
block_nickname: str, block_domain: str,
reason: str) -> bool:
"""Store a block reason
"""
if not reason:
return False
domain = remove_domain_port(domain)
blocking_reasons_filename = \
acct_dir(base_dir, nickname, domain) + '/blocking.txt'
if not block_nickname.startswith('#'):
# is the handle already blocked?
block_id = block_nickname + '@' + block_domain
else:
block_id = block_nickname
reason = reason.replace('\n', '').strip()
reason_line = block_id + ' ' + reason + '\n'
if os.path.isfile(blocking_reasons_filename):
if not text_in_file(block_id,
blocking_reasons_filename):
try:
with open(blocking_reasons_filename, 'a+',
encoding='utf-8') as reas_file:
reas_file.write(reason_line)
except OSError:
print('EX: unable to add blocking reason 2 ' +
block_id)
else:
reasons_str = ''
try:
with open(blocking_reasons_filename, 'r',
encoding='utf-8') as reas_file:
reasons_str = reas_file.read()
except OSError:
print('EX: unable to read blocking reasons 2')
reasons_lines = reasons_str.split('\n')
new_reasons_str = ''
for line in reasons_lines:
if not line.startswith(block_id + ' '):
new_reasons_str += line + '\n'
continue
new_reasons_str += reason_line
try:
with open(blocking_reasons_filename, 'w+',
encoding='utf-8') as reas_file:
reas_file.write(new_reasons_str)
except OSError:
print('EX: unable to save blocking reasons 2' +
blocking_reasons_filename)
else:
try:
with open(blocking_reasons_filename, 'w+',
encoding='utf-8') as reas_file:
reas_file.write(reason_line)
except OSError:
print('EX: unable to save blocking reason 2 ' +
block_id + ' ' + blocking_reasons_filename)
def add_block(base_dir: str, nickname: str, domain: str, def add_block(base_dir: str, nickname: str, domain: str,
block_nickname: str, block_domain: str) -> bool: block_nickname: str, block_domain: str,
reason: str) -> bool:
"""Block the given account """Block the given account
""" """
if block_domain.startswith(domain) and nickname == block_nickname: if block_domain.startswith(domain) and nickname == block_nickname:
@ -398,6 +463,11 @@ def add_block(base_dir: str, nickname: str, domain: str,
except OSError: except OSError:
print('EX: unable to append block handle ' + block_handle) print('EX: unable to append block handle ' + block_handle)
return False return False
if reason:
_add_block_reason(base_dir, nickname, domain,
block_nickname, block_domain, reason)
return True return True
@ -956,7 +1026,7 @@ def outbox_block(base_dir: str, nickname: str, domain: str,
domain_blocked_full = get_full_domain(domain_blocked, port_blocked) domain_blocked_full = get_full_domain(domain_blocked, port_blocked)
add_block(base_dir, nickname, domain, add_block(base_dir, nickname, domain,
nickname_blocked, domain_blocked_full) nickname_blocked, domain_blocked_full, '')
if debug: if debug:
print('DEBUG: post blocked via c2s - ' + post_filename) print('DEBUG: post blocked via c2s - ' + post_filename)

View File

@ -4291,9 +4291,12 @@ class PubServer(BaseHTTPRequestHandler):
return return
if '&submitYes=' in block_confirm_params: if '&submitYes=' in block_confirm_params:
blocking_actor = \ blocking_confirm_str = \
urllib.parse.unquote_plus(block_confirm_params) urllib.parse.unquote_plus(block_confirm_params)
blocking_actor = blocking_actor.split('actor=')[1] block_reason = blocking_confirm_str.split('blockReason=')[1]
if '&' in block_reason:
block_reason = block_reason.split('&')[0]
blocking_actor = blocking_confirm_str.split('actor=')[1]
if '&' in blocking_actor: if '&' in blocking_actor:
blocking_actor = blocking_actor.split('&')[0] blocking_actor = blocking_actor.split('&')[0]
blocking_nickname = get_nickname_from_actor(blocking_actor) blocking_nickname = get_nickname_from_actor(blocking_actor)
@ -4322,7 +4325,7 @@ class PubServer(BaseHTTPRequestHandler):
' of ' + blocking_actor) ' of ' + blocking_actor)
add_block(base_dir, blocker_nickname, add_block(base_dir, blocker_nickname,
domain, blocking_nickname, domain, blocking_nickname,
blocking_domain_full) blocking_domain_full, block_reason)
remove_follower(base_dir, blocker_nickname, remove_follower(base_dir, blocker_nickname,
domain, domain,
blocking_nickname, blocking_nickname,

View File

@ -625,5 +625,6 @@
"Featured hashtags": "علامات التجزئة المميزة", "Featured hashtags": "علامات التجزئة المميزة",
"Proxy": "الوكيل", "Proxy": "الوكيل",
"Only allow replies from followers": "السماح فقط بالردود من المتابعين", "Only allow replies from followers": "السماح فقط بالردود من المتابعين",
"Only allow replies from mutuals": "السماح فقط بالردود من المتبادلين" "Only allow replies from mutuals": "السماح فقط بالردود من المتبادلين",
"Reason": "سبب"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "বৈশিষ্ট্যযুক্ত হ্যাশট্যাগ", "Featured hashtags": "বৈশিষ্ট্যযুক্ত হ্যাশট্যাগ",
"Proxy": "প্রক্সি", "Proxy": "প্রক্সি",
"Only allow replies from followers": "শুধুমাত্র অনুসরণকারীদের কাছ থেকে উত্তরের অনুমতি দিন", "Only allow replies from followers": "শুধুমাত্র অনুসরণকারীদের কাছ থেকে উত্তরের অনুমতি দিন",
"Only allow replies from mutuals": "শুধুমাত্র মিউচুয়াল থেকে উত্তরের অনুমতি দিন" "Only allow replies from mutuals": "শুধুমাত্র মিউচুয়াল থেকে উত্তরের অনুমতি দিন",
"Reason": "কারণ"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Hashtags destacats", "Featured hashtags": "Hashtags destacats",
"Proxy": "Proxy", "Proxy": "Proxy",
"Only allow replies from followers": "Només permet respostes dels seguidors", "Only allow replies from followers": "Només permet respostes dels seguidors",
"Only allow replies from mutuals": "Només permet respostes de mútues" "Only allow replies from mutuals": "Només permet respostes de mútues",
"Reason": "Raó"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Hashtags dan sylw", "Featured hashtags": "Hashtags dan sylw",
"Proxy": "Dirprwy", "Proxy": "Dirprwy",
"Only allow replies from followers": "Caniatewch atebion gan ddilynwyr yn unig", "Only allow replies from followers": "Caniatewch atebion gan ddilynwyr yn unig",
"Only allow replies from mutuals": "Caniatewch atebion gan gwmnïau cydfuddiannol yn unig" "Only allow replies from mutuals": "Caniatewch atebion gan gwmnïau cydfuddiannol yn unig",
"Reason": "Rheswm"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Ausgewählte Hashtags", "Featured hashtags": "Ausgewählte Hashtags",
"Proxy": "Stellvertreterin", "Proxy": "Stellvertreterin",
"Only allow replies from followers": "Erlauben Sie nur Antworten von Followern", "Only allow replies from followers": "Erlauben Sie nur Antworten von Followern",
"Only allow replies from mutuals": "Erlauben Sie nur Antworten von Gegenseitigkeitsgesellschaften" "Only allow replies from mutuals": "Erlauben Sie nur Antworten von Gegenseitigkeitsgesellschaften",
"Reason": "Grund"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Επιλεγμένα hashtag", "Featured hashtags": "Επιλεγμένα hashtag",
"Proxy": "Πληρεξούσιο", "Proxy": "Πληρεξούσιο",
"Only allow replies from followers": "Επιτρέπονται μόνο οι απαντήσεις από τους ακόλουθους", "Only allow replies from followers": "Επιτρέπονται μόνο οι απαντήσεις από τους ακόλουθους",
"Only allow replies from mutuals": "Επιτρέπονται μόνο απαντήσεις από αμοιβαία μέλη" "Only allow replies from mutuals": "Επιτρέπονται μόνο απαντήσεις από αμοιβαία μέλη",
"Reason": "Λόγος"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Featured hashtags", "Featured hashtags": "Featured hashtags",
"Proxy": "Proxy", "Proxy": "Proxy",
"Only allow replies from followers": "Only allow replies from followers", "Only allow replies from followers": "Only allow replies from followers",
"Only allow replies from mutuals": "Only allow replies from mutuals" "Only allow replies from mutuals": "Only allow replies from mutuals",
"Reason": "Reason"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Hashtags destacados", "Featured hashtags": "Hashtags destacados",
"Proxy": "Apoderada", "Proxy": "Apoderada",
"Only allow replies from followers": "Permitir solo respuestas de seguidores", "Only allow replies from followers": "Permitir solo respuestas de seguidores",
"Only allow replies from mutuals": "Permitir solo respuestas de mutuas" "Only allow replies from mutuals": "Permitir solo respuestas de mutuas",
"Reason": "Razón"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "هشتگ های ویژه", "Featured hashtags": "هشتگ های ویژه",
"Proxy": "پروکسی", "Proxy": "پروکسی",
"Only allow replies from followers": "فقط اجازه پاسخ از طرفداران را بدهید", "Only allow replies from followers": "فقط اجازه پاسخ از طرفداران را بدهید",
"Only allow replies from mutuals": "فقط اجازه پاسخ از طرف متقابل را بدهید" "Only allow replies from mutuals": "فقط اجازه پاسخ از طرف متقابل را بدهید",
"Reason": "دلیل"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Mots-clics en vedette", "Featured hashtags": "Mots-clics en vedette",
"Proxy": "Procuration", "Proxy": "Procuration",
"Only allow replies from followers": "Autoriser uniquement les réponses des abonnés", "Only allow replies from followers": "Autoriser uniquement les réponses des abonnés",
"Only allow replies from mutuals": "Autoriser uniquement les réponses des mutuelles" "Only allow replies from mutuals": "Autoriser uniquement les réponses des mutuelles",
"Reason": "Raison"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Hashtags faoi thrácht", "Featured hashtags": "Hashtags faoi thrácht",
"Proxy": "Seachfhreastalaí", "Proxy": "Seachfhreastalaí",
"Only allow replies from followers": "Ná ceadaigh ach freagraí ó leantóirí", "Only allow replies from followers": "Ná ceadaigh ach freagraí ó leantóirí",
"Only allow replies from mutuals": "Ná ceadaigh ach freagraí ó chomhlachtaí frithpháirteacha" "Only allow replies from mutuals": "Ná ceadaigh ach freagraí ó chomhlachtaí frithpháirteacha",
"Reason": "Cúis"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "विशेष रुप से प्रदर्शित हैशटैग", "Featured hashtags": "विशेष रुप से प्रदर्शित हैशटैग",
"Proxy": "प्रतिनिधि", "Proxy": "प्रतिनिधि",
"Only allow replies from followers": "केवल अनुयायियों के उत्तरों की अनुमति दें", "Only allow replies from followers": "केवल अनुयायियों के उत्तरों की अनुमति दें",
"Only allow replies from mutuals": "केवल पारस्परिक उत्तरों की अनुमति दें" "Only allow replies from mutuals": "केवल पारस्परिक उत्तरों की अनुमति दें",
"Reason": "कारण"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Hashtag in primo piano", "Featured hashtags": "Hashtag in primo piano",
"Proxy": "Delega", "Proxy": "Delega",
"Only allow replies from followers": "Consenti solo risposte dai follower", "Only allow replies from followers": "Consenti solo risposte dai follower",
"Only allow replies from mutuals": "Consenti solo risposte da mutue" "Only allow replies from mutuals": "Consenti solo risposte da mutue",
"Reason": "Motivo"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "注目のハッシュタグ", "Featured hashtags": "注目のハッシュタグ",
"Proxy": "プロキシー", "Proxy": "プロキシー",
"Only allow replies from followers": "フォロワーからの返信のみを許可する", "Only allow replies from followers": "フォロワーからの返信のみを許可する",
"Only allow replies from mutuals": "相互からの返信のみを許可する" "Only allow replies from mutuals": "相互からの返信のみを許可する",
"Reason": "理由"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "추천 해시태그", "Featured hashtags": "추천 해시태그",
"Proxy": "대리", "Proxy": "대리",
"Only allow replies from followers": "팔로어의 답글만 허용", "Only allow replies from followers": "팔로어의 답글만 허용",
"Only allow replies from mutuals": "상호 간의 답장만 허용" "Only allow replies from mutuals": "상호 간의 답장만 허용",
"Reason": "이유"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Hashtagên taybetmendî", "Featured hashtags": "Hashtagên taybetmendî",
"Proxy": "Proxy", "Proxy": "Proxy",
"Only allow replies from followers": "Tenê destûr bidin bersivên ji şagirtan", "Only allow replies from followers": "Tenê destûr bidin bersivên ji şagirtan",
"Only allow replies from mutuals": "Tenê destûr bidin bersivên ji hevdu" "Only allow replies from mutuals": "Tenê destûr bidin bersivên ji hevdu",
"Reason": "Semed"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Aanbevolen hashtags", "Featured hashtags": "Aanbevolen hashtags",
"Proxy": "Volmacht", "Proxy": "Volmacht",
"Only allow replies from followers": "Sta alleen reacties van volgers toe", "Only allow replies from followers": "Sta alleen reacties van volgers toe",
"Only allow replies from mutuals": "Sta alleen reacties van onderlinge maatschappijen toe" "Only allow replies from mutuals": "Sta alleen reacties van onderlinge maatschappijen toe",
"Reason": "Reden"
} }

View File

@ -621,5 +621,6 @@
"Featured hashtags": "Featured hashtags", "Featured hashtags": "Featured hashtags",
"Proxy": "Proxy", "Proxy": "Proxy",
"Only allow replies from followers": "Only allow replies from followers", "Only allow replies from followers": "Only allow replies from followers",
"Only allow replies from mutuals": "Only allow replies from mutuals" "Only allow replies from mutuals": "Only allow replies from mutuals",
"Reason": "Reason"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Polecane hashtagi", "Featured hashtags": "Polecane hashtagi",
"Proxy": "Pełnomocnik", "Proxy": "Pełnomocnik",
"Only allow replies from followers": "Zezwalaj tylko na odpowiedzi od obserwujących", "Only allow replies from followers": "Zezwalaj tylko na odpowiedzi od obserwujących",
"Only allow replies from mutuals": "Zezwalaj tylko na odpowiedzi od towarzystw wzajemnych" "Only allow replies from mutuals": "Zezwalaj tylko na odpowiedzi od towarzystw wzajemnych",
"Reason": "Powód"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Hashtags em destaque", "Featured hashtags": "Hashtags em destaque",
"Proxy": "Proxy", "Proxy": "Proxy",
"Only allow replies from followers": "Permitir apenas respostas de seguidores", "Only allow replies from followers": "Permitir apenas respostas de seguidores",
"Only allow replies from mutuals": "Permitir apenas respostas de mútuos" "Only allow replies from mutuals": "Permitir apenas respostas de mútuos",
"Reason": "Razão"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Избранные хэштеги", "Featured hashtags": "Избранные хэштеги",
"Proxy": "Прокси", "Proxy": "Прокси",
"Only allow replies from followers": "Разрешить ответы только от подписчиков", "Only allow replies from followers": "Разрешить ответы только от подписчиков",
"Only allow replies from mutuals": "Разрешить ответы только от взаимных" "Only allow replies from mutuals": "Разрешить ответы только от взаимных",
"Reason": "Причина"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Reli zilizoangaziwa", "Featured hashtags": "Reli zilizoangaziwa",
"Proxy": "Wakala", "Proxy": "Wakala",
"Only allow replies from followers": "Ruhusu tu majibu kutoka kwa wafuasi", "Only allow replies from followers": "Ruhusu tu majibu kutoka kwa wafuasi",
"Only allow replies from mutuals": "Ruhusu tu majibu kutoka kwa pande zote mbili" "Only allow replies from mutuals": "Ruhusu tu majibu kutoka kwa pande zote mbili",
"Reason": "Sababu"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Öne çıkan etiketler", "Featured hashtags": "Öne çıkan etiketler",
"Proxy": "Vekil", "Proxy": "Vekil",
"Only allow replies from followers": "Yalnızca takipçilerden gelen yanıtlara izin ver", "Only allow replies from followers": "Yalnızca takipçilerden gelen yanıtlara izin ver",
"Only allow replies from mutuals": "Yalnızca ortaklardan gelen yanıtlara izin ver" "Only allow replies from mutuals": "Yalnızca ortaklardan gelen yanıtlara izin ver",
"Reason": "Sebep"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "Рекомендовані хештеги", "Featured hashtags": "Рекомендовані хештеги",
"Proxy": "Проксі", "Proxy": "Проксі",
"Only allow replies from followers": "Дозволити відповіді лише від підписників", "Only allow replies from followers": "Дозволити відповіді лише від підписників",
"Only allow replies from mutuals": "Дозволити відповіді лише від взаємних клієнтів" "Only allow replies from mutuals": "Дозволити відповіді лише від взаємних клієнтів",
"Reason": "Причина"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "פֿעיִקייטן פון hashtags", "Featured hashtags": "פֿעיִקייטן פון hashtags",
"Proxy": "פראקסי", "Proxy": "פראקסי",
"Only allow replies from followers": "נאָר לאָזן ענטפֿערס פון אנהענגערס", "Only allow replies from followers": "נאָר לאָזן ענטפֿערס פון אנהענגערס",
"Only allow replies from mutuals": "לאָזן בלויז ענטפֿערס פון מיוטשואַלז" "Only allow replies from mutuals": "לאָזן בלויז ענטפֿערס פון מיוטשואַלז",
"Reason": "סיבה"
} }

View File

@ -625,5 +625,6 @@
"Featured hashtags": "特色标签", "Featured hashtags": "特色标签",
"Proxy": "代理人", "Proxy": "代理人",
"Only allow replies from followers": "只允许关注者回复", "Only allow replies from followers": "只允许关注者回复",
"Only allow replies from mutuals": "只允许来自相互的回复" "Only allow replies from mutuals": "只允许来自相互的回复",
"Reason": "原因"
} }

View File

@ -385,7 +385,13 @@ def html_confirm_block(translate: {}, base_dir: str,
translate['Yes'] + '</button>\n' translate['Yes'] + '</button>\n'
block_str += \ block_str += \
' <a href="' + origin_path_str + '"><button class="button">' + \ ' <a href="' + origin_path_str + '"><button class="button">' + \
translate['No'] + '</button></a>\n' translate['No'] + '</button></a><br>\n'
block_str += \
' <b><label class="labels">' + \
translate['Reason'] + '</label></b>\n' + \
' <textarea id="message" ' + \
'name="blockReason" style="height:200px" spellcheck="false">' + \
'</textarea>\n'
block_str += ' </form>\n' block_str += ' </form>\n'
block_str += '</center>\n' block_str += '</center>\n'
block_str += '</div>\n' block_str += '</div>\n'