From beb9f8a0332bab795296d4e1d5f9c6cd8405aae9 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 8 Jul 2023 11:44:54 +0100 Subject: [PATCH] Optionally supply a reason when using the block button --- blocking.py | 74 ++++++++++++++++++++++++++++++++++++++++++-- daemon.py | 9 ++++-- translations/ar.json | 3 +- translations/bn.json | 3 +- translations/ca.json | 3 +- translations/cy.json | 3 +- translations/de.json | 3 +- translations/el.json | 3 +- translations/en.json | 3 +- translations/es.json | 3 +- translations/fa.json | 3 +- translations/fr.json | 3 +- translations/ga.json | 3 +- translations/hi.json | 3 +- translations/it.json | 3 +- translations/ja.json | 3 +- translations/ko.json | 3 +- translations/ku.json | 3 +- translations/nl.json | 3 +- translations/oc.json | 3 +- translations/pl.json | 3 +- translations/pt.json | 3 +- translations/ru.json | 3 +- translations/sw.json | 3 +- translations/tr.json | 3 +- translations/uk.json | 3 +- translations/yi.json | 3 +- translations/zh.json | 3 +- webapp_confirm.py | 8 ++++- 29 files changed, 137 insertions(+), 32 deletions(-) diff --git a/blocking.py b/blocking.py index 36a4a77f3..6c6939b4e 100644 --- a/blocking.py +++ b/blocking.py @@ -327,8 +327,73 @@ def add_global_block(base_dir: str, 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, - block_nickname: str, block_domain: str) -> bool: + block_nickname: str, block_domain: str, + reason: str) -> bool: """Block the given account """ 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: print('EX: unable to append block handle ' + block_handle) return False + + if reason: + _add_block_reason(base_dir, nickname, domain, + block_nickname, block_domain, reason) + 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) add_block(base_dir, nickname, domain, - nickname_blocked, domain_blocked_full) + nickname_blocked, domain_blocked_full, '') if debug: print('DEBUG: post blocked via c2s - ' + post_filename) diff --git a/daemon.py b/daemon.py index 86cc1026f..e24141991 100644 --- a/daemon.py +++ b/daemon.py @@ -4291,9 +4291,12 @@ class PubServer(BaseHTTPRequestHandler): return if '&submitYes=' in block_confirm_params: - blocking_actor = \ + blocking_confirm_str = \ 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: blocking_actor = blocking_actor.split('&')[0] blocking_nickname = get_nickname_from_actor(blocking_actor) @@ -4322,7 +4325,7 @@ class PubServer(BaseHTTPRequestHandler): ' of ' + blocking_actor) add_block(base_dir, blocker_nickname, domain, blocking_nickname, - blocking_domain_full) + blocking_domain_full, block_reason) remove_follower(base_dir, blocker_nickname, domain, blocking_nickname, diff --git a/translations/ar.json b/translations/ar.json index 1b984acf6..0ea26806b 100644 --- a/translations/ar.json +++ b/translations/ar.json @@ -625,5 +625,6 @@ "Featured hashtags": "علامات التجزئة المميزة", "Proxy": "الوكيل", "Only allow replies from followers": "السماح فقط بالردود من المتابعين", - "Only allow replies from mutuals": "السماح فقط بالردود من المتبادلين" + "Only allow replies from mutuals": "السماح فقط بالردود من المتبادلين", + "Reason": "سبب" } diff --git a/translations/bn.json b/translations/bn.json index 267f3ee91..d68dcd403 100644 --- a/translations/bn.json +++ b/translations/bn.json @@ -625,5 +625,6 @@ "Featured hashtags": "বৈশিষ্ট্যযুক্ত হ্যাশট্যাগ", "Proxy": "প্রক্সি", "Only allow replies from followers": "শুধুমাত্র অনুসরণকারীদের কাছ থেকে উত্তরের অনুমতি দিন", - "Only allow replies from mutuals": "শুধুমাত্র মিউচুয়াল থেকে উত্তরের অনুমতি দিন" + "Only allow replies from mutuals": "শুধুমাত্র মিউচুয়াল থেকে উত্তরের অনুমতি দিন", + "Reason": "কারণ" } diff --git a/translations/ca.json b/translations/ca.json index 2763b21a7..66ed5577e 100644 --- a/translations/ca.json +++ b/translations/ca.json @@ -625,5 +625,6 @@ "Featured hashtags": "Hashtags destacats", "Proxy": "Proxy", "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ó" } diff --git a/translations/cy.json b/translations/cy.json index 91b2439b8..fb5ab2eaa 100644 --- a/translations/cy.json +++ b/translations/cy.json @@ -625,5 +625,6 @@ "Featured hashtags": "Hashtags dan sylw", "Proxy": "Dirprwy", "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" } diff --git a/translations/de.json b/translations/de.json index a52269317..a07a0e58f 100644 --- a/translations/de.json +++ b/translations/de.json @@ -625,5 +625,6 @@ "Featured hashtags": "Ausgewählte Hashtags", "Proxy": "Stellvertreterin", "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" } diff --git a/translations/el.json b/translations/el.json index 5891aaf9d..c0eb09f55 100644 --- a/translations/el.json +++ b/translations/el.json @@ -625,5 +625,6 @@ "Featured hashtags": "Επιλεγμένα hashtag", "Proxy": "Πληρεξούσιο", "Only allow replies from followers": "Επιτρέπονται μόνο οι απαντήσεις από τους ακόλουθους", - "Only allow replies from mutuals": "Επιτρέπονται μόνο απαντήσεις από αμοιβαία μέλη" + "Only allow replies from mutuals": "Επιτρέπονται μόνο απαντήσεις από αμοιβαία μέλη", + "Reason": "Λόγος" } diff --git a/translations/en.json b/translations/en.json index 3424ec4c2..e062d9225 100644 --- a/translations/en.json +++ b/translations/en.json @@ -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" + "Only allow replies from mutuals": "Only allow replies from mutuals", + "Reason": "Reason" } diff --git a/translations/es.json b/translations/es.json index 7aa9f4823..e526db827 100644 --- a/translations/es.json +++ b/translations/es.json @@ -625,5 +625,6 @@ "Featured hashtags": "Hashtags destacados", "Proxy": "Apoderada", "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" } diff --git a/translations/fa.json b/translations/fa.json index 9bc1fcf25..939d0da4a 100644 --- a/translations/fa.json +++ b/translations/fa.json @@ -625,5 +625,6 @@ "Featured hashtags": "هشتگ های ویژه", "Proxy": "پروکسی", "Only allow replies from followers": "فقط اجازه پاسخ از طرفداران را بدهید", - "Only allow replies from mutuals": "فقط اجازه پاسخ از طرف متقابل را بدهید" + "Only allow replies from mutuals": "فقط اجازه پاسخ از طرف متقابل را بدهید", + "Reason": "دلیل" } diff --git a/translations/fr.json b/translations/fr.json index d2dad5917..c42746514 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -625,5 +625,6 @@ "Featured hashtags": "Mots-clics en vedette", "Proxy": "Procuration", "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" } diff --git a/translations/ga.json b/translations/ga.json index 384e6453e..51b88d538 100644 --- a/translations/ga.json +++ b/translations/ga.json @@ -625,5 +625,6 @@ "Featured hashtags": "Hashtags faoi thrácht", "Proxy": "Seachfhreastalaí", "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" } diff --git a/translations/hi.json b/translations/hi.json index 87f58b683..6cccb8989 100644 --- a/translations/hi.json +++ b/translations/hi.json @@ -625,5 +625,6 @@ "Featured hashtags": "विशेष रुप से प्रदर्शित हैशटैग", "Proxy": "प्रतिनिधि", "Only allow replies from followers": "केवल अनुयायियों के उत्तरों की अनुमति दें", - "Only allow replies from mutuals": "केवल पारस्परिक उत्तरों की अनुमति दें" + "Only allow replies from mutuals": "केवल पारस्परिक उत्तरों की अनुमति दें", + "Reason": "कारण" } diff --git a/translations/it.json b/translations/it.json index 639eecc01..ac222ca34 100644 --- a/translations/it.json +++ b/translations/it.json @@ -625,5 +625,6 @@ "Featured hashtags": "Hashtag in primo piano", "Proxy": "Delega", "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" } diff --git a/translations/ja.json b/translations/ja.json index 0a2596c37..5048478f8 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -625,5 +625,6 @@ "Featured hashtags": "注目のハッシュタグ", "Proxy": "プロキシー", "Only allow replies from followers": "フォロワーからの返信のみを許可する", - "Only allow replies from mutuals": "相互からの返信のみを許可する" + "Only allow replies from mutuals": "相互からの返信のみを許可する", + "Reason": "理由" } diff --git a/translations/ko.json b/translations/ko.json index 8e1369073..0aad0c405 100644 --- a/translations/ko.json +++ b/translations/ko.json @@ -625,5 +625,6 @@ "Featured hashtags": "추천 해시태그", "Proxy": "대리", "Only allow replies from followers": "팔로어의 답글만 허용", - "Only allow replies from mutuals": "상호 간의 답장만 허용" + "Only allow replies from mutuals": "상호 간의 답장만 허용", + "Reason": "이유" } diff --git a/translations/ku.json b/translations/ku.json index 7c87f8f4a..afce2be2c 100644 --- a/translations/ku.json +++ b/translations/ku.json @@ -625,5 +625,6 @@ "Featured hashtags": "Hashtagên taybetmendî", "Proxy": "Proxy", "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" } diff --git a/translations/nl.json b/translations/nl.json index 486fc37c6..4d8826821 100644 --- a/translations/nl.json +++ b/translations/nl.json @@ -625,5 +625,6 @@ "Featured hashtags": "Aanbevolen hashtags", "Proxy": "Volmacht", "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" } diff --git a/translations/oc.json b/translations/oc.json index 5af2afddf..f3e681177 100644 --- a/translations/oc.json +++ b/translations/oc.json @@ -621,5 +621,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" + "Only allow replies from mutuals": "Only allow replies from mutuals", + "Reason": "Reason" } diff --git a/translations/pl.json b/translations/pl.json index b03269e56..cd74678f3 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -625,5 +625,6 @@ "Featured hashtags": "Polecane hashtagi", "Proxy": "Pełnomocnik", "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" } diff --git a/translations/pt.json b/translations/pt.json index e6187be9e..1b5f4d50f 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -625,5 +625,6 @@ "Featured hashtags": "Hashtags em destaque", "Proxy": "Proxy", "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" } diff --git a/translations/ru.json b/translations/ru.json index 260eec686..5ed2e0100 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -625,5 +625,6 @@ "Featured hashtags": "Избранные хэштеги", "Proxy": "Прокси", "Only allow replies from followers": "Разрешить ответы только от подписчиков", - "Only allow replies from mutuals": "Разрешить ответы только от взаимных" + "Only allow replies from mutuals": "Разрешить ответы только от взаимных", + "Reason": "Причина" } diff --git a/translations/sw.json b/translations/sw.json index eef5b16dd..c4b2d14f5 100644 --- a/translations/sw.json +++ b/translations/sw.json @@ -625,5 +625,6 @@ "Featured hashtags": "Reli zilizoangaziwa", "Proxy": "Wakala", "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" } diff --git a/translations/tr.json b/translations/tr.json index 41a456f56..78b55eb5b 100644 --- a/translations/tr.json +++ b/translations/tr.json @@ -625,5 +625,6 @@ "Featured hashtags": "Öne çıkan etiketler", "Proxy": "Vekil", "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" } diff --git a/translations/uk.json b/translations/uk.json index 46e3e96e7..917974337 100644 --- a/translations/uk.json +++ b/translations/uk.json @@ -625,5 +625,6 @@ "Featured hashtags": "Рекомендовані хештеги", "Proxy": "Проксі", "Only allow replies from followers": "Дозволити відповіді лише від підписників", - "Only allow replies from mutuals": "Дозволити відповіді лише від взаємних клієнтів" + "Only allow replies from mutuals": "Дозволити відповіді лише від взаємних клієнтів", + "Reason": "Причина" } diff --git a/translations/yi.json b/translations/yi.json index db3a7dfb4..8d3426a64 100644 --- a/translations/yi.json +++ b/translations/yi.json @@ -625,5 +625,6 @@ "Featured hashtags": "פֿעיִקייטן פון hashtags", "Proxy": "פראקסי", "Only allow replies from followers": "נאָר לאָזן ענטפֿערס פון אנהענגערס", - "Only allow replies from mutuals": "לאָזן בלויז ענטפֿערס פון מיוטשואַלז" + "Only allow replies from mutuals": "לאָזן בלויז ענטפֿערס פון מיוטשואַלז", + "Reason": "סיבה" } diff --git a/translations/zh.json b/translations/zh.json index a86e7f777..b96391eee 100644 --- a/translations/zh.json +++ b/translations/zh.json @@ -625,5 +625,6 @@ "Featured hashtags": "特色标签", "Proxy": "代理人", "Only allow replies from followers": "只允许关注者回复", - "Only allow replies from mutuals": "只允许来自相互的回复" + "Only allow replies from mutuals": "只允许来自相互的回复", + "Reason": "原因" } diff --git a/webapp_confirm.py b/webapp_confirm.py index 95bccb943..6d87c640c 100644 --- a/webapp_confirm.py +++ b/webapp_confirm.py @@ -385,7 +385,13 @@ def html_confirm_block(translate: {}, base_dir: str, translate['Yes'] + '\n' block_str += \ ' \n' + translate['No'] + '
\n' + block_str += \ + ' \n' + \ + ' \n' block_str += ' \n' block_str += '\n' block_str += '\n'