Edit ActivityPub specification

main
Bob Mottram 2022-06-26 23:10:23 +01:00
parent 52bdf201fb
commit 91a083ea34
34 changed files with 192 additions and 26 deletions

View File

@ -174,6 +174,7 @@ from webapp_utils import get_pwa_theme_colors
from webapp_calendar import html_calendar_delete_confirm
from webapp_calendar import html_calendar
from webapp_about import html_about
from webapp_specification import html_specification
from webapp_accesskeys import html_access_keys
from webapp_accesskeys import load_access_keys_for_accounts
from webapp_confirm import html_confirm_delete
@ -4782,6 +4783,7 @@ class PubServer(BaseHTTPRequestHandler):
links_filename = base_dir + '/accounts/links.txt'
about_filename = base_dir + '/accounts/about.md'
tos_filename = base_dir + '/accounts/tos.md'
specification_filename = base_dir + '/accounts/activitypub.md'
# extract all of the text fields into a dict
fields = \
@ -4860,6 +4862,25 @@ class PubServer(BaseHTTPRequestHandler):
print('EX: _links_update unable to delete ' +
tos_filename)
if fields.get('editedSpecification'):
specification_str = fields['editedSpecification']
if not dangerous_markup(specification_str,
allow_local_network_access):
try:
with open(specification_filename, 'w+',
encoding='utf-8') as specificationfile:
specificationfile.write(specification_str)
except OSError:
print('EX: unable to write specification ' +
specification_filename)
else:
if os.path.isfile(specification_filename):
try:
os.remove(specification_filename)
except OSError:
print('EX: _links_update unable to delete ' +
specification_filename)
# redirect back to the default timeline
self._redirect_headers(actor_str + '/' + default_timeline,
cookie, calling_domain)
@ -16274,6 +16295,39 @@ class PubServer(BaseHTTPRequestHandler):
self.server.debug)
return
if self.path in ('/specification', '/protocol', '/activitypub'):
if calling_domain.endswith('.onion'):
msg = \
html_specification(self.server.css_cache,
self.server.base_dir, 'http',
self.server.onion_domain,
None, self.server.translate,
self.server.system_language)
elif calling_domain.endswith('.i2p'):
msg = \
html_specification(self.server.css_cache,
self.server.base_dir, 'http',
self.server.i2p_domain,
None, self.server.translate,
self.server.system_language)
else:
msg = \
html_specification(self.server.css_cache,
self.server.base_dir,
self.server.http_prefix,
self.server.domain_full,
self.server.onion_domain,
self.server.translate,
self.server.system_language)
msg = msg.encode('utf-8')
msglen = len(msg)
self._login_headers('text/html', msglen, calling_domain)
self._write(msg)
fitness_performance(getreq_start_time, self.server.fitness,
'_GET', 'show specification screen',
self.server.debug)
return
if html_getreq and users_in_path and authorized and \
self.path.endswith('/accesskeys'):
nickname = self.path.split('/users/')[1]

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -564,5 +564,6 @@
"Save": "يحفظ",
"Switch to moderation view": "قم بالتبديل إلى عرض الاعتدال",
"Minimize attached images": "تصغير الصور المرفقة",
"SHOW MEDIA": "عرض الوسائط"
"SHOW MEDIA": "عرض الوسائط",
"ActivityPub Specification": "مواصفات ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "সংরক্ষণ",
"Switch to moderation view": "সংযম দৃশ্যে স্যুইচ করুন",
"Minimize attached images": "সংযুক্ত ছবি ছোট করুন",
"SHOW MEDIA": "মিডিয়া দেখান"
"SHOW MEDIA": "মিডিয়া দেখান",
"ActivityPub Specification": "ActivityPub স্পেসিফিকেশন"
}

View File

@ -564,5 +564,6 @@
"Save": "Desa",
"Switch to moderation view": "Canvia a la visualització de moderació",
"Minimize attached images": "Minimitzar les imatges adjuntes",
"SHOW MEDIA": "MOSTRA ELS MITJANS"
"SHOW MEDIA": "MOSTRA ELS MITJANS",
"ActivityPub Specification": "Especificació d'ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "Arbed",
"Switch to moderation view": "Newid i wedd safoni",
"Minimize attached images": "Lleihau delweddau sydd ynghlwm",
"SHOW MEDIA": "DANGOS CYFRYNGAU"
"SHOW MEDIA": "DANGOS CYFRYNGAU",
"ActivityPub Specification": "Manyleb GweithgareddPub"
}

View File

@ -564,5 +564,6 @@
"Save": "Speichern",
"Switch to moderation view": "Wechseln Sie zur Moderationsansicht",
"Minimize attached images": "Angehängte Bilder minimieren",
"SHOW MEDIA": "MEDIEN ZEIGEN"
"SHOW MEDIA": "MEDIEN ZEIGEN",
"ActivityPub Specification": "ActivityPub-Spezifikation"
}

View File

@ -564,5 +564,6 @@
"Save": "Αποθηκεύσετε",
"Switch to moderation view": "Μετάβαση σε προβολή εποπτείας",
"Minimize attached images": "Ελαχιστοποιήστε τις συνημμένες εικόνες",
"SHOW MEDIA": "ΔΕΙΤΕ ΜΕΣΑ"
"SHOW MEDIA": "ΔΕΙΤΕ ΜΕΣΑ",
"ActivityPub Specification": "Προδιαγραφές ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "Save",
"Switch to moderation view": "Switch to moderation view",
"Minimize attached images": "Minimize attached images",
"SHOW MEDIA": "SHOW MEDIA"
"SHOW MEDIA": "SHOW MEDIA",
"ActivityPub Specification": "ActivityPub Specification"
}

View File

@ -564,5 +564,6 @@
"Save": "Ahorrar",
"Switch to moderation view": "Cambiar a la vista de moderación",
"Minimize attached images": "Minimizar imágenes adjuntas",
"SHOW MEDIA": "MOSTRAR MEDIOS"
"SHOW MEDIA": "MOSTRAR MEDIOS",
"ActivityPub Specification": "Especificación de ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "Sauvegarder",
"Switch to moderation view": "Passer en mode modération",
"Minimize attached images": "Réduire les images jointes",
"SHOW MEDIA": "AFFICHER LES MÉDIAS"
"SHOW MEDIA": "AFFICHER LES MÉDIAS",
"ActivityPub Specification": "Spécification ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "Sábháil",
"Switch to moderation view": "Athraigh go dtí an t-amharc modhnóireachta",
"Minimize attached images": "Íoslaghdaigh íomhánna ceangailte",
"SHOW MEDIA": "Taispeáin MEÁIN"
"SHOW MEDIA": "Taispeáin MEÁIN",
"ActivityPub Specification": "Sonraíocht ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "बचाना",
"Switch to moderation view": "मॉडरेशन दृश्य पर स्विच करें",
"Minimize attached images": "संलग्न छवियों को छोटा करें",
"SHOW MEDIA": "मीडिया दिखाएं"
"SHOW MEDIA": "मीडिया दिखाएं",
"ActivityPub Specification": "गतिविधिपब विशिष्टता"
}

View File

@ -564,5 +564,6 @@
"Save": "Salva",
"Switch to moderation view": "Passa alla visualizzazione moderazione",
"Minimize attached images": "Riduci al minimo le immagini allegate",
"SHOW MEDIA": "MOSTRA MEDIA"
"SHOW MEDIA": "MOSTRA MEDIA",
"ActivityPub Specification": "Specifica ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "保存",
"Switch to moderation view": "モデレートビューに切り替えます",
"Minimize attached images": "添付画像を最小限に抑える",
"SHOW MEDIA": "メディアを表示"
"SHOW MEDIA": "メディアを表示",
"ActivityPub Specification": "ActivityPubの仕様"
}

View File

@ -564,5 +564,6 @@
"Save": "구하다",
"Switch to moderation view": "검토 보기로 전환",
"Minimize attached images": "첨부된 이미지 최소화",
"SHOW MEDIA": "미디어 표시"
"SHOW MEDIA": "미디어 표시",
"ActivityPub Specification": "ActivityPub 사양"
}

View File

@ -564,5 +564,6 @@
"Save": "Rizgarkirin",
"Switch to moderation view": "Biguherîne bo dîtina moderatoriyê",
"Minimize attached images": "Wêneyên pêvekirî kêm bikin",
"SHOW MEDIA": "MEDYA NÎŞAN DE"
"SHOW MEDIA": "MEDYA NÎŞAN DE",
"ActivityPub Specification": "Specification ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "Opslaan",
"Switch to moderation view": "Overschakelen naar moderatieweergave",
"Minimize attached images": "Bijgevoegde afbeeldingen minimaliseren",
"SHOW MEDIA": "TOON MEDIA"
"SHOW MEDIA": "TOON MEDIA",
"ActivityPub Specification": "ActivityPub-specificatie"
}

View File

@ -560,5 +560,6 @@
"Save": "Save",
"Switch to moderation view": "Switch to moderation view",
"Minimize attached images": "Minimize attached images",
"SHOW MEDIA": "SHOW MEDIA"
"SHOW MEDIA": "SHOW MEDIA",
"ActivityPub Specification": "ActivityPub Specification"
}

View File

@ -564,5 +564,6 @@
"Save": "Ratować",
"Switch to moderation view": "Przełącz na widok moderacji",
"Minimize attached images": "Zminimalizuj załączone obrazy",
"SHOW MEDIA": "POKAŻ MEDIA"
"SHOW MEDIA": "POKAŻ MEDIA",
"ActivityPub Specification": "Specyfikacja ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "Salvar",
"Switch to moderation view": "Mudar para a visualização de moderação",
"Minimize attached images": "Minimizar imagens anexadas",
"SHOW MEDIA": "MOSTRAR MÍDIA"
"SHOW MEDIA": "MOSTRAR MÍDIA",
"ActivityPub Specification": "Especificação do ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "Сохранять",
"Switch to moderation view": "Перейти в режим модерации",
"Minimize attached images": "Свернуть прикрепленные изображения",
"SHOW MEDIA": "ПОКАЗАТЬ МЕДИА"
"SHOW MEDIA": "ПОКАЗАТЬ МЕДИА",
"ActivityPub Specification": "Спецификация ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "Hifadhi",
"Switch to moderation view": "Badili hadi mwonekano wa udhibiti",
"Minimize attached images": "Punguza picha zilizoambatishwa",
"SHOW MEDIA": "ONESHA VYOMBO VYA HABARI"
"SHOW MEDIA": "ONESHA VYOMBO VYA HABARI",
"ActivityPub Specification": "Vipimo vya ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "Kaydetmek",
"Switch to moderation view": "Denetleme görünümüne geç",
"Minimize attached images": "Ekli resimleri simge durumuna küçült",
"SHOW MEDIA": "MEDYA GÖSTER"
"SHOW MEDIA": "MEDYA GÖSTER",
"ActivityPub Specification": "ActivityPub Spesifikasyonu"
}

View File

@ -564,5 +564,6 @@
"Save": "Зберегти",
"Switch to moderation view": "Перейти до режиму модерації",
"Minimize attached images": "Мінімізуйте вкладені зображення",
"SHOW MEDIA": "ПОКАЗАТИ ЗМІ"
"SHOW MEDIA": "ПОКАЗАТИ ЗМІ",
"ActivityPub Specification": "Специфікація ActivityPub"
}

View File

@ -564,5 +564,6 @@
"Save": "היט",
"Switch to moderation view": "באַשטימען צו מאַדעריישאַן מיינונג",
"Minimize attached images": "מינאַמייז אַטאַטשט בילדער",
"SHOW MEDIA": "ווייַז מעדיע"
"SHOW MEDIA": "ווייַז מעדיע",
"ActivityPub Specification": "ActivityPub באַשרייַבונג"
}

View File

@ -564,5 +564,6 @@
"Save": "节省",
"Switch to moderation view": "切换到审核视图",
"Minimize attached images": "最小化附加图像",
"SHOW MEDIA": "展示媒体"
"SHOW MEDIA": "展示媒体",
"ActivityPub Specification": "ActivityPub 规范"
}

View File

@ -505,7 +505,7 @@ def html_edit_links(css_cache: {}, translate: {}, base_dir: str, path: str,
edit_links_form += \
'</div>'
# the admin can edit terms of service and about text
# the admin can edit terms of service, about and specification text
admin_nickname = get_config_param(base_dir, 'admin')
if admin_nickname:
if nickname == admin_nickname:
@ -547,5 +547,25 @@ def html_edit_links(css_cache: {}, translate: {}, base_dir: str, path: str,
edit_links_form += \
'</div>'
specification_filename = base_dir + '/accounts/activitypub.md'
specification_str = ''
if os.path.isfile(specification_filename):
with open(specification_filename, 'r',
encoding='utf-8') as fp_specification:
specification_str = fp_specification.read()
edit_links_form += \
'<div class="container">'
edit_links_form += \
' ' + \
translate['ActivityPub Specification'] + \
'<br>'
edit_links_form += \
' <textarea id="message" name="editedSpecification" ' + \
'style="height:1000vh" spellcheck="true" ' + \
'autocomplete="on">' + specification_str + '</textarea>'
edit_links_form += \
'</div>'
edit_links_form += html_footer()
return edit_links_form

View File

@ -0,0 +1,67 @@
__filename__ = "webapp_about.py"
__author__ = "Bob Mottram"
__license__ = "AGPL3+"
__version__ = "1.3.0"
__maintainer__ = "Bob Mottram"
__email__ = "bob@libreserver.org"
__status__ = "Production"
__module_group__ = "Web Interface"
import os
from shutil import copyfile
from utils import get_config_param
from webapp_utils import html_header_with_website_markup
from webapp_utils import html_footer
from markdown import markdown_to_html
def html_specification(css_cache: {}, base_dir: str, http_prefix: str,
domain_full: str, onion_domain: str, translate: {},
system_language: str) -> str:
"""Show the specification screen
"""
admin_nickname = get_config_param(base_dir, 'admin')
if not os.path.isfile(base_dir + '/accounts/activitypub.md'):
copyfile(base_dir + '/specification/activitypub.md',
base_dir + '/accounts/activitypub.md')
if os.path.isfile(base_dir + '/accounts/login-background-custom.jpg'):
if not os.path.isfile(base_dir + '/accounts/login-background.jpg'):
copyfile(base_dir + '/accounts/login-background-custom.jpg',
base_dir + '/accounts/login-background.jpg')
specification_text = 'ActivityPub Protocol Specification.'
if os.path.isfile(base_dir + '/accounts/activitypub.md'):
with open(base_dir + '/accounts/activitypub.md', 'r',
encoding='utf-8') as fp_specification:
specification_text = markdown_to_html(fp_specification.read())
specification_form = ''
css_filename = base_dir + '/epicyon-profile.css'
if os.path.isfile(base_dir + '/epicyon.css'):
css_filename = base_dir + '/epicyon.css'
instance_title = \
get_config_param(base_dir, 'instanceTitle')
specification_form = \
html_header_with_website_markup(css_filename, instance_title,
http_prefix, domain_full,
system_language)
specification_form += \
'<div class="container">' + specification_text + '</div>'
if onion_domain:
specification_form += \
'<div class="container"><center>\n' + \
'<p class="administeredby">' + \
'http://' + onion_domain + '</p>\n</center></div>\n'
if admin_nickname:
admin_actor = '/users/' + admin_nickname
specification_form += \
'<div class="container"><center>\n' + \
'<p class="administeredby">' + \
translate['Administered by'] + ' <a href="' + \
admin_actor + '">' + admin_nickname + '</a>. ' + \
translate['Version'] + ' ' + __version__ + \
'</p>\n</center></div>\n'
specification_form += html_footer()
return specification_form