mirror of
https://gitverse.ru/kpa39l/icq.git
synced 2026-09-29 09:55:11 +00:00
Telegram bridge: slidgram + SOCKS5 proxy, mod_privilege (XEP-0356), XEP audit
- docker-compose: сервис slidgram (Slidge->Telegram, внешний компонент XEP-0114) - кастомный образ slidgram-proxy: SOCKS5-патч (SLIDGRAM_PROXY -> Pyrogram) для маршрутизации через VPS01 - prosody: component telegram.nixg.ru (5347), component_secret в секции Component (0.11!), mod_privilege + privileged_entities (roster sync мостов), mod_pubsub включён - modules/mod_privilege.lua (community, hg.prosody.im) - docs/slidgram/: офлайн-копия документации slidgram (slidge.im) - README: секции 'Функциональность (XEP)' и 'Мост Telegram'; XEP-AUDIT.md (полный аудит XEP) - STATUS.md: мост ПОДКЛЮЧЁН, privilege, аудит
This commit is contained in:
@@ -8,13 +8,40 @@
|
|||||||
- **Caddy** (vps02, host-network) — TLS-терминатор: chat.nixg.ru, xmpp.nixg.ru, upload.nixg.ru
|
- **Caddy** (vps02, host-network) — TLS-терминатор: chat.nixg.ru, xmpp.nixg.ru, upload.nixg.ru
|
||||||
- **Let's Encrypt** — сертификаты для XMPP (c2s/s2s) и веб
|
- **Let's Encrypt** — сертификаты для XMPP (c2s/s2s) и веб
|
||||||
- **WireGuard** — туннель bigbox (10.8.0.2) ↔ vps02 (10.8.0.4)
|
- **WireGuard** — туннель bigbox (10.8.0.2) ↔ vps02 (10.8.0.4)
|
||||||
|
- **Slidge/slidgram** (Docker) — мост XMPP↔Telegram (внешний компонент, XEP-0114)
|
||||||
|
|
||||||
|
## Функциональность (XEP-модули)
|
||||||
|
|
||||||
|
| Возможность | XEP | Модуль | Статус |
|
||||||
|
|---|---|---|---|
|
||||||
|
| MUC (групповые чаты) | XEP-0045 | Component `conference.nixg.ru` (mod_muc) | ✅ |
|
||||||
|
| PubSub (подписки, ленты) | XEP-0060 | mod_pubsub | ✅ |
|
||||||
|
| HTTP Upload (файлы) | XEP-0363 | Component `upload.nixg.ru` (mod_http_upload, community) | ✅ |
|
||||||
|
| MAM (история) | XEP-0313 | mod_mam (+mod_muc_mam) | ✅ |
|
||||||
|
| Carbons (все устройства) | XEP-0280 | mod_carbons | ✅ |
|
||||||
|
| OMEMO / OTR (сквозное шифрование) | XEP-0384 | PEP (mod_pep) для хранения ключей; серверный mod_omemo в 0.11 отсутствует — шифрование клиент-сайд (Gajim/Dino/Conversations) | ⚠️ клиент-сайд |
|
||||||
|
| WebRTC (звонки) | XEP-0166/0343 | клиент-сайд (Jingle); серверного модуля нет | ⚠️ клиент-сайд |
|
||||||
|
| Bookmarks (избранные) | XEP-0402 | через PEP/pubsub node `storage:bookmarks` (отдельного mod_bookmarks в 0.11 нет) | ✅ через PEP |
|
||||||
|
| Privilege (roster sync для мостов) | XEP-0356 | mod_privilege (community) | ✅ |
|
||||||
|
| PEP (аватары, OMEMO, отметки) | XEP-0163 | mod_pep | ✅ |
|
||||||
|
|
||||||
|
## Мост XMPP↔Telegram (Slidge/slidgram)
|
||||||
|
|
||||||
|
- Внешний компонент **telegram.nixg.ru** (XEP-0114), порт 5347 (внутри docker-сети).
|
||||||
|
- Образ `slidgram-proxy:latest` = codeberg.org/slidge/slidgram + SOCKS5-патч (env `SLIDGRAM_PROXY`).
|
||||||
|
- **Трафик Telegram идёт через SOCKS5 172.27.0.1:1080** (SSH-туннель VPS01, вне РФ) — работает при блокировке Telegram в РФ.
|
||||||
|
- Данные сессий: `./slidgram/data/` (том, uid 10000).
|
||||||
|
- Регистрация TG-аккаунта: из XMPP-клиента написать «register» на `telegram.nixg.ru`.
|
||||||
|
- Офлайн-доки: `docs/slidgram/` (копия slidge.im).
|
||||||
|
|
||||||
## Состав (после клонирования)
|
## Состав (после клонирования)
|
||||||
```
|
```
|
||||||
/opt/icq
|
/opt/icq
|
||||||
├── config/ # prosody.cfg.lua (+ mounts в контейнер)
|
├── config/ # prosody.cfg.lua (+ mounts в контейнер)
|
||||||
├── webchat/ # nginx: index.html + nginx.conf (dist скачивается отдельно)
|
├── webchat/ # nginx: index.html + nginx.conf (dist скачивается отдельно)
|
||||||
├── modules/ # community-модули Prosody (mod_http_upload)
|
├── modules/ # community-модули Prosody (mod_http_upload, mod_privilege, ...)
|
||||||
|
├── slidgram/ # Dockerfile + патчи для образа slidgram-proxy (SOCKS5)
|
||||||
|
├── docs/slidgram/ # офлайн-копия документации slidgram
|
||||||
├── docker-compose.yml
|
├── docker-compose.yml
|
||||||
├── STATUS.md # точка входа: текущее состояние, задачи
|
├── STATUS.md # точка входа: текущее состояние, задачи
|
||||||
├── PRD.md # требования/архитектура
|
├── PRD.md # требования/архитектура
|
||||||
|
|||||||
@@ -106,7 +106,8 @@ chromium --headless --no-sandbox --disable-gpu --enable-logging=stderr --virtual
|
|||||||
- TXT-записи `_acme-challenge.nixg.ru` и `_acme-challenge.xmpp.nixg.ru` в панели Jino (вручную)
|
- TXT-записи `_acme-challenge.nixg.ru` и `_acme-challenge.xmpp.nixg.ru` в панели Jino (вручную)
|
||||||
- Сертификат: /etc/letsencrypt/live/nixg.ru/ → скопирован в /opt/icq/certs/nixg.ru.{crt,key}
|
- Сертификат: /etc/letsencrypt/live/nixg.ru/ → скопирован в /opt/icq/certs/nixg.ru.{crt,key}
|
||||||
- Проверено снаружи: c2s 5222 и s2s 5269 отдают LE (issuer=Let's Encrypt, SAN nixg.ru+xmpp.nixg.ru), TLS 1.3
|
- Проверено снаружи: c2s 5222 и s2s 5269 отдают LE (issuer=Let's Encrypt, SAN nixg.ru+xmpp.nixg.ru), TLS 1.3
|
||||||
- Истекает 2026-11-26; certbot настроил автопродление — НО при dns-01 вручную автопродление НЕ сработает без повторного добавления TXT! Продление: `sudo certbot renew --manual-auth-hook /bin/true --manual-cleanup-hook /bin/true` (после добавления TXT). TODO: настроить напоминание/скрипт.
|
- Истекает 2026-11-26; certbot настроил автопродление — НО при dns-01 вручную автопродление НЕ сработает без повторного добавления TXT! Продление: `sudo certbot renew --manual-auth-hook /bin/true --manual-cleanup-hook /bin/true` (после добавления TXT).
|
||||||
|
- ✅ Напоминание НАСТРОЕНО как ТИХИЙ watchdog (2026-08-29): Hermes cron-джоба ca2a23a34905, ежедневно 10:00 UTC, no_agent, доставка в Telegram (DM). Скрипт /opt/hermes/.hermes/scripts/check_icq_cert.sh (THRESHOLD=45 дн.): пока до истечения > 45 дней — молчит (пустой stdout, ничего не шлётся); при <= 45 дней шлёт в TG инструкцию продления (TXT в Jino → certbot renew ×2 → копия в certs/ → restart prosody). Первое ожидаемое срабатывание ≈ 12.10.2026 (истечение 26.11).
|
||||||
- [x] **HTTP Upload (XEP-0363) — ВЫПОЛНЕНО ✅ (2026-08-28)**
|
- [x] **HTTP Upload (XEP-0363) — ВЫПОЛНЕНО ✅ (2026-08-28)**
|
||||||
- Модуль: `mod_http_upload` из Ubuntu-пакета `prosody-modules` (apt) → скопирован в ./modules/
|
- Модуль: `mod_http_upload` из Ubuntu-пакета `prosody-modules` (apt) → скопирован в ./modules/
|
||||||
- Prosody: `Component "upload.nixg.ru" "http_upload"`, лимит 10MB, хранение 7 дней, require_authentication,
|
- Prosody: `Component "upload.nixg.ru" "http_upload"`, лимит 10MB, хранение 7 дней, require_authentication,
|
||||||
@@ -147,7 +148,21 @@ chromium --headless --no-sandbox --disable-gpu --enable-logging=stderr --virtual
|
|||||||
Веб-админки в Prosody 0.11 нет в коробке — при желании ставить отдельный UI. Функционально не блокер.
|
Веб-админки в Prosody 0.11 нет в коробке — при желании ставить отдельный UI. Функционально не блокер.
|
||||||
- Ошибки «http_upload MUST happen with TLS» в prosody.err — ИСТОРИЧЕСКИЕ (28 авг 20:01, до настройки LE-серта);
|
- Ошибки «http_upload MUST happen with TLS» в prosody.err — ИСТОРИЧЕСКИЕ (28 авг 20:01, до настройки LE-серта);
|
||||||
за рестарт 29 авг ошибок нет.
|
за рестарт 29 авг ошибок нет.
|
||||||
- [ ] Мосты mautrix (Telegram/WhatsApp) — Этап 4; нужен external component (mod_component).
|
- [x] **Мост XMPP↔Telegram (Slidge/slidgram) — ПОДКЛЮЧЁН (2026-08-29)**
|
||||||
|
- Prosody: component_ports 5347 + Component "telegram.nixg.ru" с component_secret (ВНИМАНИЕ: в 0.11
|
||||||
|
секрет задаётся в секции Component через component_secret=, глобальная таблица component_secrets
|
||||||
|
НЕ читается — была засада not-authorized, решено).
|
||||||
|
- Образ: кастомный slidgram-proxy:latest = codeberg.org/slidge/slidgram:latest + патчи telegram.py/gateway.py
|
||||||
|
(прокидывают SOCKS5 из env SLIDGRAM_PROXY в Pyrogram) + pysocks (уже есть в образе, модуль socks).
|
||||||
|
- docker-compose: сервис slidgram (icq-slidgram), env SLIDGE_JID/SECRET/SERVER/PORT + SLIDGRAM_PROXY=socks5://172.27.0.1:1080
|
||||||
|
- Трафик Telegram → SOCKS5 172.27.0.1:1080 (SSH-туннель VPS01, TELEGRAM_PROXY) — проверено: SOCKS5→MTProto DC1 OK.
|
||||||
|
- Статус: компонент аутентифицирован в Prosody, Slidge started, upload discovery OK.
|
||||||
|
- ✅ **mod_privilege (XEP-0356)** добавлен (2026-08-29): community-модуль из hg.prosody.im → ./modules/mod_privilege.lua,
|
||||||
|
включён в modules_enabled + privileged_entities в VirtualHost для telegram.nixg.ru (roster sync, legacy carbons).
|
||||||
|
- ✅ **Аудит XEP-функций** (2026-08-29) → **XEP-AUDIT.md**: MUC/PubSub/HTTP Upload/MAM/Carbons/PEP ✅;
|
||||||
|
OMEMO/WebRTC — клиент-сайд (норма для 0.11); Bookmarks — через PEP; mod_pubsub включён в modules_enabled.
|
||||||
|
- ОЖИДАЕТ: регистрацию TG-аккаунта (admin@nixg.ru → команда register на telegram.nixg.ru) + api_id/api_hash.
|
||||||
|
- [ ] Мосты mautrix (WhatsApp) — Этап 4; нужен external component (mod_component). [Telegram-мост уже на Slidge]
|
||||||
- [ ] Push-уведомления (APNs/FCM) — ОТЛОЖЕН (нет особой потребности; см. WALKTHROUGH раздел 10.4 «Варианты»).
|
- [ ] Push-уведомления (APNs/FCM) — ОТЛОЖЕН (нет особой потребности; см. WALKTHROUGH раздел 10.4 «Варианты»).
|
||||||
Пробовал (2026-08-29): mod_unified_push из apt-prosody-modules НЕ подходит — требует util.jwt (API 0.12), а контейнер на 0.11.9.
|
Пробовал (2026-08-29): mod_unified_push из apt-prosody-modules НЕ подходит — требует util.jwt (API 0.12), а контейнер на 0.11.9.
|
||||||
Для реализации нужно (любое из):
|
Для реализации нужно (любое из):
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
# Аудит XEP-функциональности сервера nixg.ru (Prosody 0.11.9)
|
||||||
|
|
||||||
|
Дата: 2026-08-29. Проверено фактически: по конфигу `config/prosody.cfg.lua`,
|
||||||
|
загруженным модулям в контейнере (`docker exec icq-prosody ls ...`) и логам
|
||||||
|
(компонент telegram.nixg.ru аутентифицирован, MAM активен).
|
||||||
|
|
||||||
|
Легенда: ✅ работает · ⚠️ частично/клиент-сайд · ❌ не реализовано
|
||||||
|
|
||||||
|
## Основные модули (XEP)
|
||||||
|
|
||||||
|
| Возможность | XEP | Как реализовано | Статус |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **MUC** (групповые чаты) | XEP-0045 | Component `conference.nixg.ru` (mod_muc); + mod_vcard_muc (аватары комнат), mod_muc_moderation (XEP-0425), max_history 200 | ✅ |
|
||||||
|
| **PubSub** (подписки/ленты) | XEP-0060 | mod_pubsub (stock, включён 2026-08-29) | ✅ |
|
||||||
|
| **HTTP Upload** (файлы) | XEP-0363 | Component `upload.nixg.ru` (mod_http_upload, community), внешний URL https://upload.nixg.ru, лимит 10 MB, TTL 7 дней | ✅ |
|
||||||
|
| **MAM** (история) | XEP-0313 | mod_mam (в modules_enabled) + mod_muc_mam (история комнат) | ✅ |
|
||||||
|
| **Carbons** (все устройства) | XEP-0280 | mod_carbons (в modules_enabled) | ✅ |
|
||||||
|
| **OMEMO / OTR** | XEP-0384 / XEP-0363 | mod_pep (хранение ключей/бандлов OMEMO). Серверного mod_omemo в Prosody 0.11 нет (и в prosody-modules его нет) — шифрование **клиент-сайд** (Gajim/Dino/Conversations/Monal работают через PEP). | ⚠️ клиент-сайд |
|
||||||
|
| **WebRTC** (звонки) | XEP-0166 (Jingle) / XEP-0343 | Jingle — клиент-сайд; серверного модуля нет. Prosody не терминатор медиа — для звонков клиент↔клиент достаточно канала сигнализации (c2s/websocket уже есть). | ⚠️ клиент-сайд |
|
||||||
|
| **Bookmarks** (избранное) | XEP-0402 / XEP-0048 | Через PEP/pubsub node `storage:bookmarks` (mod_pep). Отдельного mod_bookmarks в 0.11 нет; mod_default_bookmarks (community) — по желанию. | ✅ через PEP |
|
||||||
|
|
||||||
|
## Связанное (мосты и сервисы)
|
||||||
|
|
||||||
|
| Возможность | XEP | Как реализовано | Статус |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **External component** (мост Telegram) | XEP-0114 | Component `telegram.nixg.ru`, порт 5347 (внутри docker-сети), секрет в `component_secret` секции Component | ✅ |
|
||||||
|
| **Privileged Entity** (roster sync для мостов) | XEP-0356 | mod_privilege (community, добавлен 2026-08-29) + `privileged_entities` в VirtualHost для telegram.nixg.ru | ✅ |
|
||||||
|
| **PEP** (аватары, OMEMO, отметки) | XEP-0163 | mod_pep (в modules_enabled) | ✅ |
|
||||||
|
| **In-band registration** | XEP-0077 | mod_register (allow_registration=true) | ✅ |
|
||||||
|
| **WebSocket / BOSH** | XEP-0306 / XEP-0124 | mod_websocket, mod_bosh (порт 5280) | ✅ |
|
||||||
|
| **Stream Management** | XEP-0198 | mod_smacks (community, установлен) | ✅ |
|
||||||
|
|
||||||
|
## Что проверять клиентами
|
||||||
|
|
||||||
|
- **Gajim/Dino/Conversations** — полная поддержка MUC, MAM, Carbons, OMEMO, Bookmarks (через PEP).
|
||||||
|
- **Converse.js (веб)** — MUC, MAM, Carbons, OMEMO (частично), HTTP Upload.
|
||||||
|
- Для OMEMO-шифрования: включить в клиенте, ключи хранятся в PEP (сервер уже готов).
|
||||||
|
|
||||||
|
## Примечания
|
||||||
|
|
||||||
|
- Модули OMEMO/Bookmarks как серверные отсутствуют в экосистеме Prosody 0.11 —
|
||||||
|
это норма: OMEMO и Bookmarks реализованы клиентски через PEP/pubsub.
|
||||||
|
Если нужен именно серверный mod_bookmarks (дефолтные закладки) — ставится
|
||||||
|
`mod_default_bookmarks` (community, hg.prosody.im).
|
||||||
|
- Источник community-модулей (работает из РФ): https://hg.prosody.im/prosody-modules/
|
||||||
|
(GitHub raw заблокирован, 404).
|
||||||
+26
-4
@@ -26,7 +26,9 @@ modules_enabled = {
|
|||||||
"dialback"; -- s2s dialback
|
"dialback"; -- s2s dialback
|
||||||
"disco"; -- Service discovery
|
"disco"; -- Service discovery
|
||||||
"carbons"; -- Копии сообщений на все устройства
|
"carbons"; -- Копии сообщений на все устройства
|
||||||
|
"privilege"; -- XEP-0356 Privileged Entity (roster sync для мостов Slidge)
|
||||||
"pep"; -- Personal eventing (OMEMO, avatars)
|
"pep"; -- Personal eventing (OMEMO, avatars)
|
||||||
|
"pubsub"; -- Publish-Subscribe (XEP-0060): ленты, узлы; основа PEP/bookmarks
|
||||||
"private"; -- Приватные хранилища XML
|
"private"; -- Приватные хранилища XML
|
||||||
"blocklist"; -- Чёрный список
|
"blocklist"; -- Чёрный список
|
||||||
"vcard4"; -- vCard 4
|
"vcard4"; -- vCard 4
|
||||||
@@ -76,6 +78,13 @@ http_interfaces = { "0.0.0.0" }
|
|||||||
https_ports = { 5281 }
|
https_ports = { 5281 }
|
||||||
https_interfaces = { "0.0.0.0" }
|
https_interfaces = { "0.0.0.0" }
|
||||||
|
|
||||||
|
-- External components (XEP-0114) для мостов (Slidge/Telegram, затем WhatsApp)
|
||||||
|
component_ports = { 5347 }
|
||||||
|
component_interfaces = { "0.0.0.0" }
|
||||||
|
component_secrets = {
|
||||||
|
["telegram.nixg.ru"] = "83276db6e870f540163f271d9bd7d3a390530b9ad7b45f58",
|
||||||
|
}
|
||||||
|
|
||||||
-- Глобальный SSL для HTTPS-порта (LE-серт nixg.ru, SAN: nixg.ru + xmpp.nixg.ru)
|
-- Глобальный SSL для HTTPS-порта (LE-серт nixg.ru, SAN: nixg.ru + xmpp.nixg.ru)
|
||||||
ssl = {
|
ssl = {
|
||||||
key = "/etc/prosody/certs/nixg.ru.key";
|
key = "/etc/prosody/certs/nixg.ru.key";
|
||||||
@@ -99,6 +108,18 @@ VirtualHost "nixg.ru"
|
|||||||
certificate = "/etc/prosody/certs/nixg.ru.crt";
|
certificate = "/etc/prosody/certs/nixg.ru.crt";
|
||||||
-- Для федерации нужен полный chain + private key
|
-- Для федерации нужен полный chain + private key
|
||||||
}
|
}
|
||||||
|
-- Привилегии для мостов Slidge (XEP-0356): синхронизация ростера + legacy carbons
|
||||||
|
privileged_entities = {
|
||||||
|
["telegram.nixg.ru"] = {
|
||||||
|
roster = "both";
|
||||||
|
message = "outgoing";
|
||||||
|
iq = {
|
||||||
|
["http://jabber.org/protocol/pubsub"] = "both";
|
||||||
|
["http://jabber.org/protocol/pubsub#owner"] = "set";
|
||||||
|
["urn:xmpp:http:upload:0"] = "get";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
-- MUC-компонент (групповые чаты) conference.nixg.ru
|
-- MUC-компонент (групповые чаты) conference.nixg.ru
|
||||||
Component "conference.nixg.ru" "muc"
|
Component "conference.nixg.ru" "muc"
|
||||||
@@ -118,7 +139,8 @@ Component "upload.nixg.ru" "http_upload"
|
|||||||
-- Внешний URL (без :5281) — Caddy на vps02 проксирует upload.nixg.ru → 10.8.0.2:5281
|
-- Внешний URL (без :5281) — Caddy на vps02 проксирует upload.nixg.ru → 10.8.0.2:5281
|
||||||
http_external_url = "https://upload.nixg.ru"
|
http_external_url = "https://upload.nixg.ru"
|
||||||
|
|
||||||
-- Мосты (mautrix) добавим на Этапе 3 — компоненты регистрируются через
|
-- Мосты (Slidge) — external component (XEP-0114) для Telegram.
|
||||||
-- Prosody mod_component / отдельную конфигурацию. Пока не подключаем.
|
-- Slidge подключается к component_ports (5347) с секретом из component_secrets.
|
||||||
-- Component "telegram.chat.nixg.ru" "xmpp_component"
|
Component "telegram.nixg.ru"
|
||||||
-- Component "whatsapp.chat.nixg.ru" "xmpp_component"
|
component_secret = "83276db6e870f540163f271d9bd7d3a390530b9ad7b45f58"
|
||||||
|
modules_enabled = { "disco", "privilege" }
|
||||||
@@ -37,3 +37,22 @@ services:
|
|||||||
- "8081:8081" # веб-клиент (Caddy на vps02 проксирует на 10.8.0.2:8081)
|
- "8081:8081" # веб-клиент (Caddy на vps02 проксирует на 10.8.0.2:8081)
|
||||||
depends_on:
|
depends_on:
|
||||||
- prosody
|
- prosody
|
||||||
|
|
||||||
|
# Мост XMPP -> Telegram (Slidge/slidgram), external component (XEP-0114)
|
||||||
|
# Трафик Telegram идёт через SOCKS5-прокси на хосте (172.27.0.1:1080 = SSH-туннель VPS01)
|
||||||
|
slidgram:
|
||||||
|
image: slidgram-proxy:latest
|
||||||
|
container_name: icq-slidgram
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./slidgram/data:/var/lib/slidge
|
||||||
|
environment:
|
||||||
|
- SLIDGE_JID=telegram.nixg.ru
|
||||||
|
- SLIDGE_SECRET=83276db6e870f540163f271d9bd7d3a390530b9ad7b45f58
|
||||||
|
- SLIDGE_SERVER=icq-prosody
|
||||||
|
- SLIDGE_PORT=5347
|
||||||
|
- SLIDGE_HOME_DIR=/var/lib/slidge
|
||||||
|
- SLIDGE_ADMINS=admin@nixg.ru
|
||||||
|
- SLIDGRAM_PROXY=socks5://172.27.0.1:1080
|
||||||
|
depends_on:
|
||||||
|
- prosody
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# Документация slidgram (Slidge → Telegram)
|
||||||
|
|
||||||
|
Сохранено из https://slidge.im/docs/slidgram/main/ (2026-08-29) — офлайн-копия
|
||||||
|
для проекта ICQ XMPP (/opt/icq).
|
||||||
|
|
||||||
|
## Что это
|
||||||
|
|
||||||
|
Документация **slidgram** — XMPP-шлюза (моста) к Telegram на базе Slidge.
|
||||||
|
Полезно, чтобы не ходить в интернет при настройке: все страницы, примеры
|
||||||
|
конфигов Prosody и описание опций — здесь.
|
||||||
|
|
||||||
|
## Открытие
|
||||||
|
|
||||||
|
- `main/index.html` — главная (открой в браузере)
|
||||||
|
- `main/admin/quickstart.html` — быстрый старт
|
||||||
|
- `main/admin/config.html` — все настройки (slidgram-specific + generic slidge)
|
||||||
|
- `main/admin/examples/index.html` — примеры конфигов XMPP-серверов:
|
||||||
|
**#prosody-upload**, **#prosody-no-upload** (Prosody), #ejabberd-upload и др.
|
||||||
|
- `main/admin/install.html` — установка
|
||||||
|
- `main/user/registration.html` — как зарегистрировать TG-аккаунт в мосте
|
||||||
|
|
||||||
|
## Наш проект (bigbox /opt/icq)
|
||||||
|
|
||||||
|
- Мост: сервис `slidgram` в docker-compose, образ `slidgram-proxy:latest` (с SOCKS5-патчем)
|
||||||
|
- Компонент: `telegram.nixg.ru` (порт 5347, XEP-0114)
|
||||||
|
- Трафик Telegram: через SOCKS5 `172.27.0.1:1080` (SSH-туннель VPS01)
|
||||||
|
- Секрет компонента: /opt/icq/config/prosody.cfg.lua → Component "telegram.nixg.ru"
|
||||||
@@ -0,0 +1,250 @@
|
|||||||
|
.highlight pre { line-height: 125%; }
|
||||||
|
.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
.highlight .hll { background-color: #fdf2e2 }
|
||||||
|
.highlight { background: #f2f2f2; color: #1E1E1E }
|
||||||
|
.highlight .c { color: #515151 } /* Comment */
|
||||||
|
.highlight .err { color: #D71835 } /* Error */
|
||||||
|
.highlight .k { color: #8045E5 } /* Keyword */
|
||||||
|
.highlight .l { color: #7F4707 } /* Literal */
|
||||||
|
.highlight .n { color: #1E1E1E } /* Name */
|
||||||
|
.highlight .o { color: #163 } /* Operator */
|
||||||
|
.highlight .p { color: #1E1E1E } /* Punctuation */
|
||||||
|
.highlight .ch { color: #515151 } /* Comment.Hashbang */
|
||||||
|
.highlight .cm { color: #515151 } /* Comment.Multiline */
|
||||||
|
.highlight .cp { color: #515151 } /* Comment.Preproc */
|
||||||
|
.highlight .cpf { color: #515151 } /* Comment.PreprocFile */
|
||||||
|
.highlight .c1 { color: #515151 } /* Comment.Single */
|
||||||
|
.highlight .cs { color: #515151 } /* Comment.Special */
|
||||||
|
.highlight .gd { color: #00749C } /* Generic.Deleted */
|
||||||
|
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||||
|
.highlight .gh { color: #00749C } /* Generic.Heading */
|
||||||
|
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||||
|
.highlight .gu { color: #00749C } /* Generic.Subheading */
|
||||||
|
.highlight .kc { color: #8045E5 } /* Keyword.Constant */
|
||||||
|
.highlight .kd { color: #8045E5 } /* Keyword.Declaration */
|
||||||
|
.highlight .kn { color: #8045E5 } /* Keyword.Namespace */
|
||||||
|
.highlight .kp { color: #8045E5 } /* Keyword.Pseudo */
|
||||||
|
.highlight .kr { color: #8045E5 } /* Keyword.Reserved */
|
||||||
|
.highlight .kt { color: #7F4707 } /* Keyword.Type */
|
||||||
|
.highlight .ld { color: #7F4707 } /* Literal.Date */
|
||||||
|
.highlight .m { color: #7F4707 } /* Literal.Number */
|
||||||
|
.highlight .s { color: #163 } /* Literal.String */
|
||||||
|
.highlight .na { color: #7F4707 } /* Name.Attribute */
|
||||||
|
.highlight .nb { color: #7F4707 } /* Name.Builtin */
|
||||||
|
.highlight .nc { color: #00749C } /* Name.Class */
|
||||||
|
.highlight .no { color: #00749C } /* Name.Constant */
|
||||||
|
.highlight .nd { color: #7F4707 } /* Name.Decorator */
|
||||||
|
.highlight .ni { color: #163 } /* Name.Entity */
|
||||||
|
.highlight .ne { color: #8045E5 } /* Name.Exception */
|
||||||
|
.highlight .nf { color: #00749C } /* Name.Function */
|
||||||
|
.highlight .nl { color: #7F4707 } /* Name.Label */
|
||||||
|
.highlight .nn { color: #1E1E1E } /* Name.Namespace */
|
||||||
|
.highlight .nx { color: #1E1E1E } /* Name.Other */
|
||||||
|
.highlight .py { color: #00749C } /* Name.Property */
|
||||||
|
.highlight .nt { color: #00749C } /* Name.Tag */
|
||||||
|
.highlight .nv { color: #D71835 } /* Name.Variable */
|
||||||
|
.highlight .ow { color: #8045E5 } /* Operator.Word */
|
||||||
|
.highlight .pm { color: #1E1E1E } /* Punctuation.Marker */
|
||||||
|
.highlight .w { color: #1E1E1E } /* Text.Whitespace */
|
||||||
|
.highlight .mb { color: #7F4707 } /* Literal.Number.Bin */
|
||||||
|
.highlight .mf { color: #7F4707 } /* Literal.Number.Float */
|
||||||
|
.highlight .mh { color: #7F4707 } /* Literal.Number.Hex */
|
||||||
|
.highlight .mi { color: #7F4707 } /* Literal.Number.Integer */
|
||||||
|
.highlight .mo { color: #7F4707 } /* Literal.Number.Oct */
|
||||||
|
.highlight .sa { color: #163 } /* Literal.String.Affix */
|
||||||
|
.highlight .sb { color: #163 } /* Literal.String.Backtick */
|
||||||
|
.highlight .sc { color: #163 } /* Literal.String.Char */
|
||||||
|
.highlight .dl { color: #163 } /* Literal.String.Delimiter */
|
||||||
|
.highlight .sd { color: #163 } /* Literal.String.Doc */
|
||||||
|
.highlight .s2 { color: #163 } /* Literal.String.Double */
|
||||||
|
.highlight .se { color: #163 } /* Literal.String.Escape */
|
||||||
|
.highlight .sh { color: #163 } /* Literal.String.Heredoc */
|
||||||
|
.highlight .si { color: #163 } /* Literal.String.Interpol */
|
||||||
|
.highlight .sx { color: #163 } /* Literal.String.Other */
|
||||||
|
.highlight .sr { color: #D71835 } /* Literal.String.Regex */
|
||||||
|
.highlight .s1 { color: #163 } /* Literal.String.Single */
|
||||||
|
.highlight .ss { color: #00749C } /* Literal.String.Symbol */
|
||||||
|
.highlight .bp { color: #7F4707 } /* Name.Builtin.Pseudo */
|
||||||
|
.highlight .fm { color: #00749C } /* Name.Function.Magic */
|
||||||
|
.highlight .vc { color: #D71835 } /* Name.Variable.Class */
|
||||||
|
.highlight .vg { color: #D71835 } /* Name.Variable.Global */
|
||||||
|
.highlight .vi { color: #D71835 } /* Name.Variable.Instance */
|
||||||
|
.highlight .vm { color: #7F4707 } /* Name.Variable.Magic */
|
||||||
|
.highlight .il { color: #7F4707 } /* Literal.Number.Integer.Long */
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] .highlight pre { line-height: 125%; }
|
||||||
|
body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body[data-theme="dark"] .highlight .hll { background-color: #404040 }
|
||||||
|
body[data-theme="dark"] .highlight { background: #202020; color: #D0D0D0 }
|
||||||
|
body[data-theme="dark"] .highlight .c { color: #ABABAB; font-style: italic } /* Comment */
|
||||||
|
body[data-theme="dark"] .highlight .err { color: #A61717; background-color: #E3D2D2 } /* Error */
|
||||||
|
body[data-theme="dark"] .highlight .esc { color: #D0D0D0 } /* Escape */
|
||||||
|
body[data-theme="dark"] .highlight .g { color: #D0D0D0 } /* Generic */
|
||||||
|
body[data-theme="dark"] .highlight .k { color: #6EBF26; font-weight: bold } /* Keyword */
|
||||||
|
body[data-theme="dark"] .highlight .l { color: #D0D0D0 } /* Literal */
|
||||||
|
body[data-theme="dark"] .highlight .n { color: #D0D0D0 } /* Name */
|
||||||
|
body[data-theme="dark"] .highlight .o { color: #D0D0D0 } /* Operator */
|
||||||
|
body[data-theme="dark"] .highlight .x { color: #D0D0D0 } /* Other */
|
||||||
|
body[data-theme="dark"] .highlight .p { color: #D0D0D0 } /* Punctuation */
|
||||||
|
body[data-theme="dark"] .highlight .ch { color: #ABABAB; font-style: italic } /* Comment.Hashbang */
|
||||||
|
body[data-theme="dark"] .highlight .cm { color: #ABABAB; font-style: italic } /* Comment.Multiline */
|
||||||
|
body[data-theme="dark"] .highlight .cp { color: #FF3A3A; font-weight: bold } /* Comment.Preproc */
|
||||||
|
body[data-theme="dark"] .highlight .cpf { color: #ABABAB; font-style: italic } /* Comment.PreprocFile */
|
||||||
|
body[data-theme="dark"] .highlight .c1 { color: #ABABAB; font-style: italic } /* Comment.Single */
|
||||||
|
body[data-theme="dark"] .highlight .cs { color: #E50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
|
||||||
|
body[data-theme="dark"] .highlight .gd { color: #FF3A3A } /* Generic.Deleted */
|
||||||
|
body[data-theme="dark"] .highlight .ge { color: #D0D0D0; font-style: italic } /* Generic.Emph */
|
||||||
|
body[data-theme="dark"] .highlight .ges { color: #D0D0D0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
|
||||||
|
body[data-theme="dark"] .highlight .gr { color: #FF3A3A } /* Generic.Error */
|
||||||
|
body[data-theme="dark"] .highlight .gh { color: #FFF; font-weight: bold } /* Generic.Heading */
|
||||||
|
body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */
|
||||||
|
body[data-theme="dark"] .highlight .go { color: #CCC } /* Generic.Output */
|
||||||
|
body[data-theme="dark"] .highlight .gp { color: #AAA } /* Generic.Prompt */
|
||||||
|
body[data-theme="dark"] .highlight .gs { color: #D0D0D0; font-weight: bold } /* Generic.Strong */
|
||||||
|
body[data-theme="dark"] .highlight .gu { color: #FFF; text-decoration: underline } /* Generic.Subheading */
|
||||||
|
body[data-theme="dark"] .highlight .gt { color: #FF3A3A } /* Generic.Traceback */
|
||||||
|
body[data-theme="dark"] .highlight .kc { color: #6EBF26; font-weight: bold } /* Keyword.Constant */
|
||||||
|
body[data-theme="dark"] .highlight .kd { color: #6EBF26; font-weight: bold } /* Keyword.Declaration */
|
||||||
|
body[data-theme="dark"] .highlight .kn { color: #6EBF26; font-weight: bold } /* Keyword.Namespace */
|
||||||
|
body[data-theme="dark"] .highlight .kp { color: #6EBF26 } /* Keyword.Pseudo */
|
||||||
|
body[data-theme="dark"] .highlight .kr { color: #6EBF26; font-weight: bold } /* Keyword.Reserved */
|
||||||
|
body[data-theme="dark"] .highlight .kt { color: #6EBF26; font-weight: bold } /* Keyword.Type */
|
||||||
|
body[data-theme="dark"] .highlight .ld { color: #D0D0D0 } /* Literal.Date */
|
||||||
|
body[data-theme="dark"] .highlight .m { color: #51B2FD } /* Literal.Number */
|
||||||
|
body[data-theme="dark"] .highlight .s { color: #ED9D13 } /* Literal.String */
|
||||||
|
body[data-theme="dark"] .highlight .na { color: #BBB } /* Name.Attribute */
|
||||||
|
body[data-theme="dark"] .highlight .nb { color: #2FBCCD } /* Name.Builtin */
|
||||||
|
body[data-theme="dark"] .highlight .nc { color: #71ADFF; text-decoration: underline } /* Name.Class */
|
||||||
|
body[data-theme="dark"] .highlight .no { color: #40FFFF } /* Name.Constant */
|
||||||
|
body[data-theme="dark"] .highlight .nd { color: #FFA500 } /* Name.Decorator */
|
||||||
|
body[data-theme="dark"] .highlight .ni { color: #D0D0D0 } /* Name.Entity */
|
||||||
|
body[data-theme="dark"] .highlight .ne { color: #BBB } /* Name.Exception */
|
||||||
|
body[data-theme="dark"] .highlight .nf { color: #71ADFF } /* Name.Function */
|
||||||
|
body[data-theme="dark"] .highlight .nl { color: #D0D0D0 } /* Name.Label */
|
||||||
|
body[data-theme="dark"] .highlight .nn { color: #71ADFF; text-decoration: underline } /* Name.Namespace */
|
||||||
|
body[data-theme="dark"] .highlight .nx { color: #D0D0D0 } /* Name.Other */
|
||||||
|
body[data-theme="dark"] .highlight .py { color: #D0D0D0 } /* Name.Property */
|
||||||
|
body[data-theme="dark"] .highlight .nt { color: #6EBF26; font-weight: bold } /* Name.Tag */
|
||||||
|
body[data-theme="dark"] .highlight .nv { color: #40FFFF } /* Name.Variable */
|
||||||
|
body[data-theme="dark"] .highlight .ow { color: #6EBF26; font-weight: bold } /* Operator.Word */
|
||||||
|
body[data-theme="dark"] .highlight .pm { color: #D0D0D0 } /* Punctuation.Marker */
|
||||||
|
body[data-theme="dark"] .highlight .w { color: #666 } /* Text.Whitespace */
|
||||||
|
body[data-theme="dark"] .highlight .mb { color: #51B2FD } /* Literal.Number.Bin */
|
||||||
|
body[data-theme="dark"] .highlight .mf { color: #51B2FD } /* Literal.Number.Float */
|
||||||
|
body[data-theme="dark"] .highlight .mh { color: #51B2FD } /* Literal.Number.Hex */
|
||||||
|
body[data-theme="dark"] .highlight .mi { color: #51B2FD } /* Literal.Number.Integer */
|
||||||
|
body[data-theme="dark"] .highlight .mo { color: #51B2FD } /* Literal.Number.Oct */
|
||||||
|
body[data-theme="dark"] .highlight .sa { color: #ED9D13 } /* Literal.String.Affix */
|
||||||
|
body[data-theme="dark"] .highlight .sb { color: #ED9D13 } /* Literal.String.Backtick */
|
||||||
|
body[data-theme="dark"] .highlight .sc { color: #ED9D13 } /* Literal.String.Char */
|
||||||
|
body[data-theme="dark"] .highlight .dl { color: #ED9D13 } /* Literal.String.Delimiter */
|
||||||
|
body[data-theme="dark"] .highlight .sd { color: #ED9D13 } /* Literal.String.Doc */
|
||||||
|
body[data-theme="dark"] .highlight .s2 { color: #ED9D13 } /* Literal.String.Double */
|
||||||
|
body[data-theme="dark"] .highlight .se { color: #ED9D13 } /* Literal.String.Escape */
|
||||||
|
body[data-theme="dark"] .highlight .sh { color: #ED9D13 } /* Literal.String.Heredoc */
|
||||||
|
body[data-theme="dark"] .highlight .si { color: #ED9D13 } /* Literal.String.Interpol */
|
||||||
|
body[data-theme="dark"] .highlight .sx { color: #FFA500 } /* Literal.String.Other */
|
||||||
|
body[data-theme="dark"] .highlight .sr { color: #ED9D13 } /* Literal.String.Regex */
|
||||||
|
body[data-theme="dark"] .highlight .s1 { color: #ED9D13 } /* Literal.String.Single */
|
||||||
|
body[data-theme="dark"] .highlight .ss { color: #ED9D13 } /* Literal.String.Symbol */
|
||||||
|
body[data-theme="dark"] .highlight .bp { color: #2FBCCD } /* Name.Builtin.Pseudo */
|
||||||
|
body[data-theme="dark"] .highlight .fm { color: #71ADFF } /* Name.Function.Magic */
|
||||||
|
body[data-theme="dark"] .highlight .vc { color: #40FFFF } /* Name.Variable.Class */
|
||||||
|
body[data-theme="dark"] .highlight .vg { color: #40FFFF } /* Name.Variable.Global */
|
||||||
|
body[data-theme="dark"] .highlight .vi { color: #40FFFF } /* Name.Variable.Instance */
|
||||||
|
body[data-theme="dark"] .highlight .vm { color: #40FFFF } /* Name.Variable.Magic */
|
||||||
|
body[data-theme="dark"] .highlight .il { color: #51B2FD } /* Literal.Number.Integer.Long */
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) .highlight pre { line-height: 125%; }
|
||||||
|
body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body:not([data-theme="light"]) .highlight .hll { background-color: #404040 }
|
||||||
|
body:not([data-theme="light"]) .highlight { background: #202020; color: #D0D0D0 }
|
||||||
|
body:not([data-theme="light"]) .highlight .c { color: #ABABAB; font-style: italic } /* Comment */
|
||||||
|
body:not([data-theme="light"]) .highlight .err { color: #A61717; background-color: #E3D2D2 } /* Error */
|
||||||
|
body:not([data-theme="light"]) .highlight .esc { color: #D0D0D0 } /* Escape */
|
||||||
|
body:not([data-theme="light"]) .highlight .g { color: #D0D0D0 } /* Generic */
|
||||||
|
body:not([data-theme="light"]) .highlight .k { color: #6EBF26; font-weight: bold } /* Keyword */
|
||||||
|
body:not([data-theme="light"]) .highlight .l { color: #D0D0D0 } /* Literal */
|
||||||
|
body:not([data-theme="light"]) .highlight .n { color: #D0D0D0 } /* Name */
|
||||||
|
body:not([data-theme="light"]) .highlight .o { color: #D0D0D0 } /* Operator */
|
||||||
|
body:not([data-theme="light"]) .highlight .x { color: #D0D0D0 } /* Other */
|
||||||
|
body:not([data-theme="light"]) .highlight .p { color: #D0D0D0 } /* Punctuation */
|
||||||
|
body:not([data-theme="light"]) .highlight .ch { color: #ABABAB; font-style: italic } /* Comment.Hashbang */
|
||||||
|
body:not([data-theme="light"]) .highlight .cm { color: #ABABAB; font-style: italic } /* Comment.Multiline */
|
||||||
|
body:not([data-theme="light"]) .highlight .cp { color: #FF3A3A; font-weight: bold } /* Comment.Preproc */
|
||||||
|
body:not([data-theme="light"]) .highlight .cpf { color: #ABABAB; font-style: italic } /* Comment.PreprocFile */
|
||||||
|
body:not([data-theme="light"]) .highlight .c1 { color: #ABABAB; font-style: italic } /* Comment.Single */
|
||||||
|
body:not([data-theme="light"]) .highlight .cs { color: #E50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
|
||||||
|
body:not([data-theme="light"]) .highlight .gd { color: #FF3A3A } /* Generic.Deleted */
|
||||||
|
body:not([data-theme="light"]) .highlight .ge { color: #D0D0D0; font-style: italic } /* Generic.Emph */
|
||||||
|
body:not([data-theme="light"]) .highlight .ges { color: #D0D0D0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
|
||||||
|
body:not([data-theme="light"]) .highlight .gr { color: #FF3A3A } /* Generic.Error */
|
||||||
|
body:not([data-theme="light"]) .highlight .gh { color: #FFF; font-weight: bold } /* Generic.Heading */
|
||||||
|
body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */
|
||||||
|
body:not([data-theme="light"]) .highlight .go { color: #CCC } /* Generic.Output */
|
||||||
|
body:not([data-theme="light"]) .highlight .gp { color: #AAA } /* Generic.Prompt */
|
||||||
|
body:not([data-theme="light"]) .highlight .gs { color: #D0D0D0; font-weight: bold } /* Generic.Strong */
|
||||||
|
body:not([data-theme="light"]) .highlight .gu { color: #FFF; text-decoration: underline } /* Generic.Subheading */
|
||||||
|
body:not([data-theme="light"]) .highlight .gt { color: #FF3A3A } /* Generic.Traceback */
|
||||||
|
body:not([data-theme="light"]) .highlight .kc { color: #6EBF26; font-weight: bold } /* Keyword.Constant */
|
||||||
|
body:not([data-theme="light"]) .highlight .kd { color: #6EBF26; font-weight: bold } /* Keyword.Declaration */
|
||||||
|
body:not([data-theme="light"]) .highlight .kn { color: #6EBF26; font-weight: bold } /* Keyword.Namespace */
|
||||||
|
body:not([data-theme="light"]) .highlight .kp { color: #6EBF26 } /* Keyword.Pseudo */
|
||||||
|
body:not([data-theme="light"]) .highlight .kr { color: #6EBF26; font-weight: bold } /* Keyword.Reserved */
|
||||||
|
body:not([data-theme="light"]) .highlight .kt { color: #6EBF26; font-weight: bold } /* Keyword.Type */
|
||||||
|
body:not([data-theme="light"]) .highlight .ld { color: #D0D0D0 } /* Literal.Date */
|
||||||
|
body:not([data-theme="light"]) .highlight .m { color: #51B2FD } /* Literal.Number */
|
||||||
|
body:not([data-theme="light"]) .highlight .s { color: #ED9D13 } /* Literal.String */
|
||||||
|
body:not([data-theme="light"]) .highlight .na { color: #BBB } /* Name.Attribute */
|
||||||
|
body:not([data-theme="light"]) .highlight .nb { color: #2FBCCD } /* Name.Builtin */
|
||||||
|
body:not([data-theme="light"]) .highlight .nc { color: #71ADFF; text-decoration: underline } /* Name.Class */
|
||||||
|
body:not([data-theme="light"]) .highlight .no { color: #40FFFF } /* Name.Constant */
|
||||||
|
body:not([data-theme="light"]) .highlight .nd { color: #FFA500 } /* Name.Decorator */
|
||||||
|
body:not([data-theme="light"]) .highlight .ni { color: #D0D0D0 } /* Name.Entity */
|
||||||
|
body:not([data-theme="light"]) .highlight .ne { color: #BBB } /* Name.Exception */
|
||||||
|
body:not([data-theme="light"]) .highlight .nf { color: #71ADFF } /* Name.Function */
|
||||||
|
body:not([data-theme="light"]) .highlight .nl { color: #D0D0D0 } /* Name.Label */
|
||||||
|
body:not([data-theme="light"]) .highlight .nn { color: #71ADFF; text-decoration: underline } /* Name.Namespace */
|
||||||
|
body:not([data-theme="light"]) .highlight .nx { color: #D0D0D0 } /* Name.Other */
|
||||||
|
body:not([data-theme="light"]) .highlight .py { color: #D0D0D0 } /* Name.Property */
|
||||||
|
body:not([data-theme="light"]) .highlight .nt { color: #6EBF26; font-weight: bold } /* Name.Tag */
|
||||||
|
body:not([data-theme="light"]) .highlight .nv { color: #40FFFF } /* Name.Variable */
|
||||||
|
body:not([data-theme="light"]) .highlight .ow { color: #6EBF26; font-weight: bold } /* Operator.Word */
|
||||||
|
body:not([data-theme="light"]) .highlight .pm { color: #D0D0D0 } /* Punctuation.Marker */
|
||||||
|
body:not([data-theme="light"]) .highlight .w { color: #666 } /* Text.Whitespace */
|
||||||
|
body:not([data-theme="light"]) .highlight .mb { color: #51B2FD } /* Literal.Number.Bin */
|
||||||
|
body:not([data-theme="light"]) .highlight .mf { color: #51B2FD } /* Literal.Number.Float */
|
||||||
|
body:not([data-theme="light"]) .highlight .mh { color: #51B2FD } /* Literal.Number.Hex */
|
||||||
|
body:not([data-theme="light"]) .highlight .mi { color: #51B2FD } /* Literal.Number.Integer */
|
||||||
|
body:not([data-theme="light"]) .highlight .mo { color: #51B2FD } /* Literal.Number.Oct */
|
||||||
|
body:not([data-theme="light"]) .highlight .sa { color: #ED9D13 } /* Literal.String.Affix */
|
||||||
|
body:not([data-theme="light"]) .highlight .sb { color: #ED9D13 } /* Literal.String.Backtick */
|
||||||
|
body:not([data-theme="light"]) .highlight .sc { color: #ED9D13 } /* Literal.String.Char */
|
||||||
|
body:not([data-theme="light"]) .highlight .dl { color: #ED9D13 } /* Literal.String.Delimiter */
|
||||||
|
body:not([data-theme="light"]) .highlight .sd { color: #ED9D13 } /* Literal.String.Doc */
|
||||||
|
body:not([data-theme="light"]) .highlight .s2 { color: #ED9D13 } /* Literal.String.Double */
|
||||||
|
body:not([data-theme="light"]) .highlight .se { color: #ED9D13 } /* Literal.String.Escape */
|
||||||
|
body:not([data-theme="light"]) .highlight .sh { color: #ED9D13 } /* Literal.String.Heredoc */
|
||||||
|
body:not([data-theme="light"]) .highlight .si { color: #ED9D13 } /* Literal.String.Interpol */
|
||||||
|
body:not([data-theme="light"]) .highlight .sx { color: #FFA500 } /* Literal.String.Other */
|
||||||
|
body:not([data-theme="light"]) .highlight .sr { color: #ED9D13 } /* Literal.String.Regex */
|
||||||
|
body:not([data-theme="light"]) .highlight .s1 { color: #ED9D13 } /* Literal.String.Single */
|
||||||
|
body:not([data-theme="light"]) .highlight .ss { color: #ED9D13 } /* Literal.String.Symbol */
|
||||||
|
body:not([data-theme="light"]) .highlight .bp { color: #2FBCCD } /* Name.Builtin.Pseudo */
|
||||||
|
body:not([data-theme="light"]) .highlight .fm { color: #71ADFF } /* Name.Function.Magic */
|
||||||
|
body:not([data-theme="light"]) .highlight .vc { color: #40FFFF } /* Name.Variable.Class */
|
||||||
|
body:not([data-theme="light"]) .highlight .vg { color: #40FFFF } /* Name.Variable.Global */
|
||||||
|
body:not([data-theme="light"]) .highlight .vi { color: #40FFFF } /* Name.Variable.Instance */
|
||||||
|
body:not([data-theme="light"]) .highlight .vm { color: #40FFFF } /* Name.Variable.Magic */
|
||||||
|
body:not([data-theme="light"]) .highlight .il { color: #51B2FD } /* Literal.Number.Integer.Long */
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,475 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="../">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="../genindex.html"><link rel="search" title="Search" href="../search.html"><link rel="next" title="Privileges" href="privileges.html"><link rel="prev" title="Quick start" href="quickstart.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>Attachments - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="../index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 current has-children"><a class="reference internal" href="index.html">For admins</a><input aria-label="Toggle navigation of For admins" checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul class="current">
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="../user/index.html">For users</a><input aria-label="Toggle navigation of For users" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/admin/attachments.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/admin/attachments.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="attachments">
|
||||||
|
<span id="id1"></span><h1>Attachments<a class="headerlink" href="#attachments" title="Link to this heading">¶</a></h1>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>Attachments from XMPP to Telegram require no special configuration.</p>
|
||||||
|
</div>
|
||||||
|
<p>For slidgram to bridge attachments from Telegram to XMPP, you have two options:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><strong>HTTP Upload</strong>: slidgram will use your XMPP server’s upload component (<a class="extlink-xep reference external" href="https://xmpp.org/extensions/xep-0363.html">XEP-0363</a>).</p></li>
|
||||||
|
<li><p><strong>No upload</strong>: slidgram will copy attachments to a path it can write to. You then need to serve these files from via an HTTP server (eg nginx,
|
||||||
|
prosody’s <a class="reference external" href="https://prosody.im/doc/modules/mod_http_files">http_files</a>, etc.).</p></li>
|
||||||
|
</ul>
|
||||||
|
<section id="http-upload">
|
||||||
|
<span id="upload"></span><h2>HTTP Upload<a class="headerlink" href="#http-upload" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>slidgram can use the HTTP Upload component (<a class="extlink-xep reference external" href="https://xmpp.org/extensions/xep-0363.html">XEP-0363</a>) of your XMPP server,
|
||||||
|
if you configure it with <code class="docutils literal notranslate"><span class="pre">upload-service=upload.example.org</span></code> (see <a class="reference internal" href="config.html#generic-config"><span class="std std-ref">Generic slidge config</span></a>).
|
||||||
|
In this setting, slidgram will upload files just like any normal user of your server.</p>
|
||||||
|
<section id="example-1-prosody-s-mod-http-file-share">
|
||||||
|
<h3>Example 1: prosody’s mod_http_file_share<a class="headerlink" href="#example-1-prosody-s-mod-http-file-share" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>In slidgram’s <a class="reference internal" href="config.html#config-file"><span class="std std-ref">configuration file</span></a>, use <code class="docutils literal notranslate"><span class="pre">upload-service=upload.example.org</span></code></p>
|
||||||
|
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="nv">modules_enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="w"> </span><span class="c1">-- make sure http_file_share is listed here</span>
|
||||||
|
<span class="w"> </span><span class="s2">"http_file_share"</span><span class="p">;</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
|
||||||
|
<span class="nv">Component</span><span class="w"> </span><span class="s2">"upload.example.org"</span><span class="w"> </span><span class="s2">"http_file_share"</span>
|
||||||
|
<span class="w"> </span><span class="c1">-- allow slidgram to use the upload component</span>
|
||||||
|
<span class="w"> </span><span class="nv">http_file_share_access</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="s2">"telegram.example.org"</span><span class="w"> </span><span class="p">}</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>More info: <a class="reference external" href="https://prosody.im/doc/modules/mod_http_file_share">mod_http_file_share</a>.</p>
|
||||||
|
</section>
|
||||||
|
<section id="example-2-ejabberd-mod-http-upload">
|
||||||
|
<h3>Example 2: ejabberd mod_http_upload<a class="headerlink" href="#example-2-ejabberd-mod-http-upload" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>In slidgram’s <a class="reference internal" href="config.html#config-file"><span class="std std-ref">configuration file</span></a>, use <code class="docutils literal notranslate"><span class="pre">upload-service=example.org</span></code></p>
|
||||||
|
<p>The subdomain’s FQDN (example.org) should be listed under the top level ‘hosts’.</p>
|
||||||
|
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">hosts</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">"example.org"</span>
|
||||||
|
|
||||||
|
<span class="nt">acl</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">slidge_acl</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">server</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">"telegram.example.org"</span>
|
||||||
|
|
||||||
|
<span class="nt">listen</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="p p-Indicator">-</span>
|
||||||
|
<span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">5443</span>
|
||||||
|
<span class="w"> </span><span class="nt">module</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ejabberd_http</span>
|
||||||
|
<span class="w"> </span><span class="nt">tls</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
|
||||||
|
<span class="w"> </span><span class="nt">request_handlers</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">/upload</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mod_http_upload</span>
|
||||||
|
|
||||||
|
<span class="nt">modules</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">mod_http_upload</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="c1"># Any path that ejabberd has read and write access to</span>
|
||||||
|
<span class="w"> </span><span class="nt">docroot</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/ejabberd/upload</span>
|
||||||
|
<span class="w"> </span><span class="nt">put_url</span><span class="p">:</span><span class="w"> </span><span class="s">"https://@HOST@:5443/upload"</span>
|
||||||
|
<span class="w"> </span><span class="nt">access</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">allow</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">local</span>
|
||||||
|
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">allow</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_acl</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>To get more information about component configuration, see <a class="reference external" href="https://docs.ejabberd.im/admin/configuration/modules/#mod-http-upload">ejabberd’s docs</a>.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="no-upload">
|
||||||
|
<span id="id2"></span><h2>No upload<a class="headerlink" href="#no-upload" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>You need to set up <code class="docutils literal notranslate"><span class="pre">no-upload-path</span></code> to point to a directory, and <code class="docutils literal notranslate"><span class="pre">no-upload-url-prefix</span></code> to an URL prefix pointing to files in that directory (see <a class="reference internal" href="config.html#generic-config"><span class="std std-ref">Generic slidge config</span></a> for more detail).
|
||||||
|
Example: <code class="docutils literal notranslate"><span class="pre">no-upload-path=/var/www/slidgram-attachments/</span></code> and <code class="docutils literal notranslate"><span class="pre">no-upload-url-prefix=https://example.org/slidgram/</span></code> means that <code class="docutils literal notranslate"><span class="pre">/var/www/slidgram-attachments/some-image.jpg</span></code> is accessible at <code class="docutils literal notranslate"><span class="pre">https://example.org/slidgram/some-image.jpg</span></code></p>
|
||||||
|
<p>Make sure that <code class="docutils literal notranslate"><span class="pre">no-upload-path</span></code> is writeable by slidgram and readable by
|
||||||
|
your HTTP server. You may use <code class="docutils literal notranslate"><span class="pre">no-upload-file-read-others=true</span></code> to do that easily,
|
||||||
|
but you might want to restrict which users can read this directory.</p>
|
||||||
|
<div class="admonition warning">
|
||||||
|
<p class="admonition-title">Warning</p>
|
||||||
|
<p>slidgram will not take care of removing old files, so you should set up a cronjob,
|
||||||
|
a systemd timer, or something similar, to regularly delete files, eg.
|
||||||
|
<code class="docutils literal notranslate"><span class="pre">find</span> <span class="pre">.</span> <span class="pre">-mtime</span> <span class="pre">+7</span> <span class="pre">-delete</span> <span class="pre">&&</span> <span class="pre">find</span> <span class="pre">.</span> <span class="pre">-depth</span> <span class="pre">-type</span> <span class="pre">d</span> <span class="pre">-empty</span> <span class="pre">-delete</span></code>
|
||||||
|
to clean up files older than a week.</p>
|
||||||
|
</div>
|
||||||
|
<p>For the following examples, in slidgram’s config,
|
||||||
|
you would have <code class="docutils literal notranslate"><span class="pre">no-upload-path=/var/lib/slidgram/attachments</span></code>.</p>
|
||||||
|
<section id="example-1-prosody-s-http-files">
|
||||||
|
<h3>Example 1: prosody’s http_files<a class="headerlink" href="#example-1-prosody-s-http-files" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>Here, <code class="docutils literal notranslate"><span class="pre">no-upload-url-prefix</span></code> would be <code class="docutils literal notranslate"><span class="pre">https://example.org:5281/files/</span></code>,
|
||||||
|
as per the <a class="reference external" href="https://prosody.im/doc/modules/mod_http_files">mod_http_files documentation</a>.</p>
|
||||||
|
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="nv">modules_enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="w"> </span><span class="c1">-- make sure http_files is listed here</span>
|
||||||
|
<span class="w"> </span><span class="s2">"http_files"</span><span class="p">;</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
|
||||||
|
<span class="c1">-- Must be the same value as slidgram's no-upload-path</span>
|
||||||
|
<span class="nv">http_files_dir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"/var/lib/slidgram/attachments"</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="example-2-nginx">
|
||||||
|
<span id="nginx-no-upload"></span><h3>Example 2: nginx<a class="headerlink" href="#example-2-nginx" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>Here, <code class="docutils literal notranslate"><span class="pre">no-upload-url-prefix</span></code> would be <code class="docutils literal notranslate"><span class="pre">https://example.org/slidgram/</span></code>.</p>
|
||||||
|
<div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="k">server</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="w"> </span><span class="kn">listen</span><span class="w"> </span><span class="mi">80</span><span class="p">;</span>
|
||||||
|
<span class="w"> </span><span class="kn">server_name</span><span class="w"> </span><span class="s">example.org</span><span class="p">;</span>
|
||||||
|
<span class="w"> </span><span class="kn">root</span><span class="w"> </span><span class="s">/var/www/html</span><span class="p">;</span><span class="w"> </span><span class="c1"># if you already have nginx serving files…</span>
|
||||||
|
|
||||||
|
<span class="w"> </span><span class="c1"># the section below is for slidgram</span>
|
||||||
|
<span class="w"> </span><span class="kn">location</span><span class="w"> </span><span class="s">/slidgram</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="w"> </span><span class="c1"># Must be the same value as slidgram's no-upload-path</span>
|
||||||
|
<span class="w"> </span><span class="kn">alias</span><span class="w"> </span><span class="s">/var/lib/slidgram/attachments/</span><span class="p">;</span>
|
||||||
|
<span class="w"> </span><span class="p">}</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>See the <a class="reference external" href="https://docs.nginx.com/nginx/admin-guide/web-server/serving-static-content/">nginx docs</a> for more info.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="next-steps">
|
||||||
|
<h2>Next steps<a class="headerlink" href="#next-steps" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>To make your slidgram install top notch, set up its <a class="reference internal" href="privileges.html#privileges"><span class="std std-ref">privileges</span></a>.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="privileges.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Privileges</div>
|
||||||
|
</div>
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="quickstart.html">
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Quick start</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
On this page
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Attachments</a><ul>
|
||||||
|
<li><a class="reference internal" href="#http-upload">HTTP Upload</a><ul>
|
||||||
|
<li><a class="reference internal" href="#example-1-prosody-s-mod-http-file-share">Example 1: prosody’s mod_http_file_share</a></li>
|
||||||
|
<li><a class="reference internal" href="#example-2-ejabberd-mod-http-upload">Example 2: ejabberd mod_http_upload</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a class="reference internal" href="#no-upload">No upload</a><ul>
|
||||||
|
<li><a class="reference internal" href="#example-1-prosody-s-http-files">Example 1: prosody’s http_files</a></li>
|
||||||
|
<li><a class="reference internal" href="#example-2-nginx">Example 2: nginx</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a class="reference internal" href="#next-steps">Next steps</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,677 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="../">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="../genindex.html"><link rel="search" title="Search" href="../search.html"><link rel="next" title="XMPP server configs examples" href="examples/index.html"><link rel="prev" title="Privileges" href="privileges.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>Configuration - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="../index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 current has-children"><a class="reference internal" href="index.html">For admins</a><input aria-label="Toggle navigation of For admins" checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul class="current">
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="../user/index.html">For users</a><input aria-label="Toggle navigation of For users" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/admin/config.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/admin/config.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="configuration">
|
||||||
|
<span id="config"></span><h1>Configuration<a class="headerlink" href="#configuration" title="Link to this heading">¶</a></h1>
|
||||||
|
<p>Both
|
||||||
|
<a class="reference internal" href="#config-slidgram"><span class="std std-ref">slidgram-specific options</span></a> and
|
||||||
|
<a class="reference internal" href="#generic-config"><span class="std std-ref">slidge generic options</span></a>
|
||||||
|
can be set using
|
||||||
|
<a class="reference internal" href="#config-file"><span class="std std-ref">config text file(s)</span></a>,
|
||||||
|
<a class="reference internal" href="#config-cli"><span class="std std-ref">command-line arguments</span></a>,
|
||||||
|
or <a class="reference internal" href="#config-env"><span class="std std-ref">environment variables</span></a>.</p>
|
||||||
|
<section id="config-files">
|
||||||
|
<span id="config-file"></span><h2>Config files<a class="headerlink" href="#config-files" title="Link to this heading">¶</a></h2>
|
||||||
|
<section id="location">
|
||||||
|
<h3>Location<a class="headerlink" href="#location" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>By default, slidgram uses all config files found in <code class="docutils literal notranslate"><span class="pre">/etc/slidge/conf.d/*.conf</span></code>.
|
||||||
|
You can change this using the <code class="docutils literal notranslate"><span class="pre">SLIDGE_CONF_DIR</span></code> env var, eg
|
||||||
|
<code class="docutils literal notranslate"><span class="pre">SLIDGE_CONF_DIR=/path/dir1:/path/dir2:/path/dir3</span></code>.</p>
|
||||||
|
<p>We recommend using <code class="docutils literal notranslate"><span class="pre">/etc/slidge/conf.d/common.conf</span></code> file to set
|
||||||
|
the options common to several slidge-based gateways
|
||||||
|
(eg, attachment handling, logging options, etc.),
|
||||||
|
then use a slidgram-specific dedicated config file, eg
|
||||||
|
<code class="docutils literal notranslate"><span class="pre">/etc/slidge/slidgram.conf</span></code>.</p>
|
||||||
|
<p>Point to this specific file using the <code class="docutils literal notranslate"><span class="pre">-c</span></code> command line argument when
|
||||||
|
launching slidgram.</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>slidgram<span class="w"> </span>-c<span class="w"> </span>/etc/slidge/slidgram.conf
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="syntax">
|
||||||
|
<h3>Syntax<a class="headerlink" href="#syntax" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>Config files are simple text files with <code class="docutils literal notranslate"><span class="pre">key=value</span></code> entries.</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">some</span><span class="o">-</span><span class="n">option</span><span class="o">=</span><span class="n">some</span><span class="o">-</span><span class="n">value</span>
|
||||||
|
<span class="n">some</span><span class="o">-</span><span class="n">other</span><span class="o">-</span><span class="n">option</span><span class="o">=</span><span class="n">some</span><span class="o">-</span><span class="n">other</span><span class="o">-</span><span class="n">value</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="command-line-arguments">
|
||||||
|
<span id="config-cli"></span><h2>Command-line arguments<a class="headerlink" href="#command-line-arguments" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>To pass options as command-line arguments, prepend their name with <code class="docutils literal notranslate"><span class="pre">--</span></code>.</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">slidgram</span> <span class="o">--</span><span class="n">some</span><span class="o">-</span><span class="n">option</span><span class="o">=</span><span class="n">some</span><span class="o">-</span><span class="n">value</span> <span class="o">--</span><span class="n">some</span><span class="o">-</span><span class="n">other</span><span class="o">-</span><span class="n">option</span><span class="o">=</span><span class="n">some</span><span class="o">-</span><span class="n">other</span><span class="o">-</span><span class="n">value</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="environment-variables">
|
||||||
|
<span id="config-env"></span><h2>Environment variables<a class="headerlink" href="#environment-variables" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>To pass options as environment variables:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>uppercase their name;</p></li>
|
||||||
|
<li><p>substitue dashed for underscores;</p></li>
|
||||||
|
<li><p>prepend with <code class="docutils literal notranslate"><span class="pre">SLIDGE_</span></code> for <a class="reference internal" href="#generic-config"><span class="std std-ref">generic slidge options</span></a>,
|
||||||
|
or <code class="docutils literal notranslate"><span class="pre">SLIDGRAM_</span></code> for
|
||||||
|
<a class="reference internal" href="#config-slidgram"><span class="std std-ref">slidgram-specific options</span></a>.</p></li>
|
||||||
|
</ul>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">SLIDGE_SOME_GENERIC_OPTION</span><span class="o">=</span><span class="n">some</span><span class="o">-</span><span class="n">value</span>
|
||||||
|
<span class="n">SLIDGRAM_SOME_SPECIFIC_OPTION</span><span class="o">=</span><span class="n">some</span><span class="o">-</span><span class="n">other</span><span class="o">-</span><span class="n">value</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="slidgram-specific-config">
|
||||||
|
<span id="config-slidgram"></span><h2>slidgram-specific config<a class="headerlink" href="#slidgram-specific-config" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>slidgram provides the instance-wide options displayed in the table below.</p>
|
||||||
|
<p></p>
|
||||||
|
<div class="table-wrapper docutils container">
|
||||||
|
<table class="docutils align-default">
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head">name</th>
|
||||||
|
<th class="head">default</th>
|
||||||
|
<th class="head"><p>help </p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td>api-hash</td>
|
||||||
|
<td>None</td>
|
||||||
|
<td><p>Telegram app api_hash, obtained at <a class="reference external" href="https://my.telegram.org/apps">https://my.telegram.org/apps </a>If you dont set it, users will have to enter their own on registration. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>api-id</td>
|
||||||
|
<td>None</td>
|
||||||
|
<td><p>Telegram app api_id, obtained at <a class="reference external" href="https://my.telegram.org/apps">https://my.telegram.org/apps </a>If you dont set it, users will have to enter their own on registration. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>attachment-max-size</td>
|
||||||
|
<td>10485760</td>
|
||||||
|
<td><p>Maximum file size (in bytes) to download from telegram automatically/ </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>big-avatars</td>
|
||||||
|
<td>False</td>
|
||||||
|
<td><p>Fetch contact avatars in high-resolution (640x640) instead of the default 160x160. NB: slidge core main config AVATAR_SIZE still applies. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>group-history-maximum-messages</td>
|
||||||
|
<td>50</td>
|
||||||
|
<td><p>The number of messages to fetch from a group history. These messages and their attachments will be fetched on slidge startup. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>registration-auth-code-timeout</td>
|
||||||
|
<td>60</td>
|
||||||
|
<td><p>On registration, users will be prompted for a 2FA code they receive on other telegram clients. </p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="generic-slidge-config">
|
||||||
|
<span id="generic-config"></span><h2>Generic slidge config<a class="headerlink" href="#generic-slidge-config" title="Link to this heading">¶</a></h2>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>The following options are for slidge version 0.5.0a2.dev2+g8ca420ef0.
|
||||||
|
Depending on how you installed slidgram, you might have a different version of slidge.
|
||||||
|
Use <code class="docutils literal notranslate"><span class="pre">slidgram</span> <span class="pre">--help</span></code> for the exact list of options you can use.</p>
|
||||||
|
</div>
|
||||||
|
<p>Slidge provides the generic instance-wide options displayed in the table below.
|
||||||
|
They may not all have an effect on slidgram’s behaviour.</p>
|
||||||
|
<section id="mandatory-settings">
|
||||||
|
<h3>Mandatory settings<a class="headerlink" href="#mandatory-settings" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="table-wrapper docutils container">
|
||||||
|
<table class="docutils align-default">
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head">name</th>
|
||||||
|
<th class="head">default</th>
|
||||||
|
<th class="head"><p>help </p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td>secret</td>
|
||||||
|
<td>unset</td>
|
||||||
|
<td><p>The gateway component’s secret (required to connect to the XMPP server) </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>jid</td>
|
||||||
|
<td>unset</td>
|
||||||
|
<td><p>The gateway component’s JID </p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="basic-configuration">
|
||||||
|
<h3>Basic configuration<a class="headerlink" href="#basic-configuration" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="table-wrapper docutils container">
|
||||||
|
<table class="docutils align-default">
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head">name</th>
|
||||||
|
<th class="head">default</th>
|
||||||
|
<th class="head"><p>help </p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td>admins</td>
|
||||||
|
<td>()</td>
|
||||||
|
<td><p>JIDs of the gateway admins </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>mam-max-days</td>
|
||||||
|
<td>7</td>
|
||||||
|
<td><p>Maximum number of days for group archive retention. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>port</td>
|
||||||
|
<td>5347</td>
|
||||||
|
<td><p>The XMPP server’s port for incoming component connections </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>server</td>
|
||||||
|
<td>localhost</td>
|
||||||
|
<td><p>The XMPP server’s host name. Defaults to localhost, which is the standard way of running slidge, on the same host as the XMPP server. The ‘Jabber Component Protocol’ (XEP-0114) does not mention encryption, so you *should* provide encryption another way, eg via port forwarding, if you change this. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>legacy-module</td>
|
||||||
|
<td>unset</td>
|
||||||
|
<td><p>Importable python module containing (at least) a BaseGateway and a LegacySession subclass. NB: this is not needed if you use a gateway-specific entrypoint, e.g., `slidgram` or `python -m slidgram`. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>home-dir</td>
|
||||||
|
<td>inferred</td>
|
||||||
|
<td><p>Directory where slidge will writes it persistent data and cache. Defaults to /var/lib/slidge/${SLIDGE_JID}. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>user-jid-validator</td>
|
||||||
|
<td>inferred</td>
|
||||||
|
<td><p>Regular expression to restrict users that can register to the gateway, by JID. Defaults to .*@${INFERRED_SERVER}. INFERRED_SERVER is derived for the gateway JID, by removing whatever is before the first encountered dot in it. Example: if slidge’s JID=slidge.example.org, INFERRED_SERVER=example.org. </p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="attachments">
|
||||||
|
<h3>Attachments<a class="headerlink" href="#attachments" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="table-wrapper docutils container">
|
||||||
|
<table class="docutils align-default">
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head">name</th>
|
||||||
|
<th class="head">default</th>
|
||||||
|
<th class="head"><p>help </p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td>attachment-maximum-file-name-length</td>
|
||||||
|
<td>200</td>
|
||||||
|
<td><p>Some legacy network provide ridiculously long filenames, strip above this limit, preserving suffix. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>convert-stickers</td>
|
||||||
|
<td>False</td>
|
||||||
|
<td><p>Convert lottie vector stickers (from the legacy side) to webp animations. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>fix-filename-suffix-mime-type</td>
|
||||||
|
<td>False</td>
|
||||||
|
<td><p>Fix the Filename suffix based on the Mime Type of the file. Some clients (eg Conversations) may not inline files that have a wrong suffix for the MIME Type. Therefore the MIME Type of the file is checked, if the suffix is not valid for that MIME Type, a valid one will be picked. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>no-upload-file-read-others</td>
|
||||||
|
<td>False</td>
|
||||||
|
<td><p>After writing a file in NO_UPLOAD_PATH, change its permission so that ‘others’ can read it. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>no-upload-path</td>
|
||||||
|
<td>None</td>
|
||||||
|
<td><p>Instead of using the XMPP server’s HTTP upload component, copy files to this dir. You need to set NO_UPLOAD_URL_PREFIX too if you use this option, and configure an web server to serve files in this dir. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>no-upload-url-prefix</td>
|
||||||
|
<td>None</td>
|
||||||
|
<td><p>Base URL that servers files in the dir set in the no-upload-path option, eg <a class="reference external" href="https://example.com:666/slidge-attachments/">https://example.com:666/slidge-attachments/ </a></p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>upload-requester</td>
|
||||||
|
<td>None</td>
|
||||||
|
<td><p>Set which JID should request the upload slots. Defaults to the user’s JID if IQ/get privileges granted for the ‘urn:xmpp:http:upload:0’ namespace; the component JID otherwise. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>upload-service</td>
|
||||||
|
<td>None</td>
|
||||||
|
<td><p>JID of an HTTP upload service the gateway can use. This is optional, as it should be automatically determined via servicediscovery. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>upload-url-prefix</td>
|
||||||
|
<td>None</td>
|
||||||
|
<td><p>This is an optional setting to make sure the URL of your upload service is never leaked to the legacy network in bodies of messages. This can happen under rare circumstances and/or bugs,when replying to an attachment. Set this to the common prefix of the public URL your attachments get, eg <a class="reference external" href="https://upload.example.org:5281/">https://upload.example.org:5281/ </a></p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>use-attachment-original-urls</td>
|
||||||
|
<td>False</td>
|
||||||
|
<td><p>For legacy plugins in which attachments are publicly downloadable URLs, let XMPP clients directly download them from this URL. Note that this will probably leak your client IP to the legacy network. </p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="logging">
|
||||||
|
<h3>Logging<a class="headerlink" href="#logging" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="table-wrapper docutils container">
|
||||||
|
<table class="docutils align-default">
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head">name</th>
|
||||||
|
<th class="head">default</th>
|
||||||
|
<th class="head"><p>help </p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td>log-file</td>
|
||||||
|
<td>None</td>
|
||||||
|
<td><p>Log to a file instead of stdout/err </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>log-format</td>
|
||||||
|
<td>%(levelname)s:%(name)s:%(message)s</td>
|
||||||
|
<td><p>Optionally, a format string for logging messages. Refer to <a class="reference external" href="https://docs.python.org/3/library/logging.html#logrecord-attributes">https://docs.python.org/3/library/logging.html#logrecord-attributes </a>for available options. </p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="advanced-settings">
|
||||||
|
<h3>Advanced settings<a class="headerlink" href="#advanced-settings" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="table-wrapper docutils container">
|
||||||
|
<table class="docutils align-default">
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head">name</th>
|
||||||
|
<th class="head">default</th>
|
||||||
|
<th class="head"><p>help </p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td>avatar-resampling-threads</td>
|
||||||
|
<td>2</td>
|
||||||
|
<td><p>Number of additional threads to use for avatar resampling. Even in a single-core context, this makes avatar resampling non-blocking. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>avatar-size</td>
|
||||||
|
<td>200</td>
|
||||||
|
<td><p>Maximum image size (width and height), image ratio will be preserved </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>component-name</td>
|
||||||
|
<td>None</td>
|
||||||
|
<td><p>Overrides the default component name with a custom one. This is seen in service discovery and as the nickname of the component in chat windows. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>dev-mode</td>
|
||||||
|
<td>False</td>
|
||||||
|
<td><p>Enables an interactive python shell via chat commands, for admins.Not safe to use in prod, but great during dev. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>ignore-delay-threshold</td>
|
||||||
|
<td>300</td>
|
||||||
|
<td><p>Threshold, in seconds, below which the <delay> information is stripped out of emitted stanzas. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>partial-registration-timeout</td>
|
||||||
|
<td>3600</td>
|
||||||
|
<td><p>Timeout before registration and login. Only useful for legacy networks where a single step registration process is not enough. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>qr-timeout</td>
|
||||||
|
<td>60</td>
|
||||||
|
<td><p>Timeout for QR code flashing confirmation. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>strip-leading-emoji-adhoc</td>
|
||||||
|
<td>False</td>
|
||||||
|
<td><p>Strip the leading emoji in ad-hoc command names, if present, in case you are a emoji-hater. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>welcome-message</td>
|
||||||
|
<td>None</td>
|
||||||
|
<td><p>Overrides the default welcome message received by newly registered users. </p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>db-url</td>
|
||||||
|
<td>inferred</td>
|
||||||
|
<td><p>Database URL, see <a class="reference external" href="https://docs.sqlalchemy.org/en/20/core/engines.html#database-urls"><https://docs.sqlalchemy.org/en/20/core/engines.html#database-urls>. </a>Defaults to `sqlite:///${HOME_DIR}/slidge.sqlite`. SQLite is *highly recommended*, other backends such as postgresql may work by chance but are much less tested. </p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="advanced-logging-configuration">
|
||||||
|
<h2>Advanced logging configuration<a class="headerlink" href="#advanced-logging-configuration" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>To customize the output of the slidge, you can use the command line argument <code class="docutils literal notranslate"><span class="pre">--log-config</span></code>
|
||||||
|
to specify a <a class="reference external" href="https://docs.python.org/3/library/logging.config.html#configuration-file-format">logging configuration file</a>.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="examples/index.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">XMPP server configs examples</div>
|
||||||
|
</div>
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="privileges.html">
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Privileges</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
On this page
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Configuration</a><ul>
|
||||||
|
<li><a class="reference internal" href="#config-files">Config files</a><ul>
|
||||||
|
<li><a class="reference internal" href="#location">Location</a></li>
|
||||||
|
<li><a class="reference internal" href="#syntax">Syntax</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a class="reference internal" href="#command-line-arguments">Command-line arguments</a></li>
|
||||||
|
<li><a class="reference internal" href="#environment-variables">Environment variables</a></li>
|
||||||
|
<li><a class="reference internal" href="#slidgram-specific-config">slidgram-specific config</a></li>
|
||||||
|
<li><a class="reference internal" href="#generic-slidge-config">Generic slidge config</a><ul>
|
||||||
|
<li><a class="reference internal" href="#mandatory-settings">Mandatory settings</a></li>
|
||||||
|
<li><a class="reference internal" href="#basic-configuration">Basic configuration</a></li>
|
||||||
|
<li><a class="reference internal" href="#attachments">Attachments</a></li>
|
||||||
|
<li><a class="reference internal" href="#logging">Logging</a></li>
|
||||||
|
<li><a class="reference internal" href="#advanced-settings">Advanced settings</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a class="reference internal" href="#advanced-logging-configuration">Advanced logging configuration</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,506 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="../../">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="../../genindex.html"><link rel="search" title="Search" href="../../search.html"><link rel="next" title="For users" href="../../user/index.html"><link rel="prev" title="Configuration" href="../config.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>XMPP server configs examples - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="../../index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 current has-children"><a class="reference internal" href="../index.html">For admins</a><input aria-label="Toggle navigation of For admins" checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul class="current">
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="../../user/index.html">For users</a><input aria-label="Toggle navigation of For users" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../../user/registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../../user/usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../../user/features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/admin/examples/index.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/admin/examples/index.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="xmpp-server-configs-examples">
|
||||||
|
<h1>XMPP server configs examples<a class="headerlink" href="#xmpp-server-configs-examples" title="Link to this heading">¶</a></h1>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>These examples are not meant to be complete, but rather show the relevant
|
||||||
|
parts for slidge.</p>
|
||||||
|
</div>
|
||||||
|
<section id="prosody-upload">
|
||||||
|
<h2>prosody/upload<a class="headerlink" href="#prosody-upload" title="Link to this heading">¶</a></h2>
|
||||||
|
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="nv">modules_enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="linenos"> 2</span><span class="w"> </span><span class="c1">-- [...]</span>
|
||||||
|
<span class="linenos"> 3</span><span class="w"> </span><span class="s2">"http_file_share"</span><span class="p">;</span><span class="w"> </span><span class="c1">-- for attachments with the "upload" option</span>
|
||||||
|
<span class="linenos"> 4</span><span class="w"> </span><span class="s2">"privilege"</span><span class="p">;</span><span class="w"> </span><span class="c1">-- for roster sync and 'legacy carbons'</span>
|
||||||
|
<span class="linenos"> 5</span><span class="p">}</span>
|
||||||
|
<span class="linenos"> 6</span>
|
||||||
|
<span class="linenos"> 7</span><span class="kd">local</span><span class="w"> </span><span class="nv">_privileges</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="linenos"> 8</span><span class="w"> </span><span class="nv">roster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"both"</span><span class="p">;</span>
|
||||||
|
<span class="linenos"> 9</span><span class="w"> </span><span class="nv">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"outgoing"</span><span class="p">;</span>
|
||||||
|
<span class="linenos">10</span><span class="w"> </span><span class="nv">iq</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="linenos">11</span><span class="w"> </span><span class="p">[</span><span class="s2">"http://jabber.org/protocol/pubsub"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"both"</span><span class="p">;</span>
|
||||||
|
<span class="linenos">12</span><span class="w"> </span><span class="p">[</span><span class="s2">"http://jabber.org/protocol/pubsub#owner"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"set"</span><span class="p">;</span>
|
||||||
|
<span class="linenos">13</span><span class="w"> </span><span class="p">[</span><span class="s2">"urn:xmpp:http:upload:0"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"get"</span><span class="p">;</span>
|
||||||
|
<span class="linenos">14</span><span class="w"> </span><span class="p">};</span>
|
||||||
|
<span class="linenos">15</span><span class="p">}</span>
|
||||||
|
<span class="linenos">16</span>
|
||||||
|
<span class="linenos">17</span><span class="nv">VirtualHost</span><span class="w"> </span><span class="s2">"example.org"</span>
|
||||||
|
<span class="linenos">18</span><span class="w"> </span><span class="c1">-- for roster sync and 'legacy carbons'</span>
|
||||||
|
<span class="linenos">19</span><span class="w"> </span><span class="nv">privileged_entities</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="linenos">20</span><span class="w"> </span><span class="p">[</span><span class="s2">"telegram.example.org"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="nv">_privileges</span><span class="p">,</span>
|
||||||
|
<span class="linenos">21</span><span class="w"> </span><span class="p">[</span><span class="s2">"other-walled-garden.example.org"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">_privileges</span><span class="p">,</span>
|
||||||
|
<span class="linenos">22</span><span class="w"> </span><span class="c1">-- repeat for other slidge plugins…</span>
|
||||||
|
<span class="linenos">23</span><span class="w"> </span><span class="p">}</span>
|
||||||
|
<span class="linenos">24</span>
|
||||||
|
<span class="linenos">25</span><span class="nv">Component</span><span class="w"> </span><span class="s2">"telegram.example.org"</span>
|
||||||
|
<span class="linenos">26</span><span class="w"> </span><span class="nv">component_secret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"secret"</span>
|
||||||
|
<span class="linenos">27</span><span class="w"> </span><span class="nv">modules_enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="s2">"privilege"</span><span class="p">}</span>
|
||||||
|
<span class="linenos">28</span>
|
||||||
|
<span class="linenos">29</span><span class="nv">Component</span><span class="w"> </span><span class="s2">"other-walled-garden.example.org"</span>
|
||||||
|
<span class="linenos">30</span><span class="w"> </span><span class="nv">component_secret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"some-other-secret"</span>
|
||||||
|
<span class="linenos">31</span><span class="w"> </span><span class="nv">modules_enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="s2">"privilege"</span><span class="p">}</span>
|
||||||
|
<span class="linenos">32</span>
|
||||||
|
<span class="linenos">33</span><span class="c1">-- for attachments with the "upload" option</span>
|
||||||
|
<span class="linenos">34</span><span class="c1">-- in telegram's config: upload-service=upload.example.org</span>
|
||||||
|
<span class="linenos">35</span><span class="nv">Component</span><span class="w"> </span><span class="s2">"upload.example.org"</span><span class="w"> </span><span class="s2">"http_file_share"</span>
|
||||||
|
<span class="linenos">36</span><span class="w"> </span><span class="nv">server_user_role</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"prosody:registered"</span>
|
||||||
|
<span class="linenos">37</span><span class="w"> </span><span class="c1">-- alternatively, you can be more specific with:</span>
|
||||||
|
<span class="linenos">38</span><span class="w"> </span><span class="c1">-- http_file_share_access = { "telegram.example.org", "other-walled-garden.example.org" }</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="prosody-no-upload">
|
||||||
|
<h2>prosody/no-upload<a class="headerlink" href="#prosody-no-upload" title="Link to this heading">¶</a></h2>
|
||||||
|
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="nv">modules_enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="linenos"> 2</span><span class="w"> </span><span class="c1">-- [...]</span>
|
||||||
|
<span class="linenos"> 3</span><span class="w"> </span><span class="s2">"http_files"</span><span class="p">;</span><span class="w"> </span><span class="c1">-- to serve "no upload" attachments</span>
|
||||||
|
<span class="linenos"> 4</span><span class="w"> </span><span class="s2">"privilege"</span><span class="p">;</span><span class="w"> </span><span class="c1">-- for roster sync and 'legacy carbons'</span>
|
||||||
|
<span class="linenos"> 5</span><span class="p">}</span>
|
||||||
|
<span class="linenos"> 6</span>
|
||||||
|
<span class="linenos"> 7</span><span class="c1">-- in slidge's config: no-upload-path=/var/lib/slidge/attachments</span>
|
||||||
|
<span class="linenos"> 8</span><span class="nv">http_files_dir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"/var/lib/slidge/attachments"</span>
|
||||||
|
<span class="linenos"> 9</span>
|
||||||
|
<span class="linenos">10</span><span class="kd">local</span><span class="w"> </span><span class="nv">_privileges</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="linenos">11</span><span class="w"> </span><span class="nv">roster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"both"</span><span class="p">;</span>
|
||||||
|
<span class="linenos">12</span><span class="w"> </span><span class="nv">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"outgoing"</span><span class="p">;</span>
|
||||||
|
<span class="linenos">13</span><span class="w"> </span><span class="nv">iq</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="linenos">14</span><span class="w"> </span><span class="p">[</span><span class="s2">"http://jabber.org/protocol/pubsub"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"both"</span><span class="p">;</span>
|
||||||
|
<span class="linenos">15</span><span class="w"> </span><span class="p">[</span><span class="s2">"http://jabber.org/protocol/pubsub#owner"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"set"</span><span class="p">;</span>
|
||||||
|
<span class="linenos">16</span><span class="w"> </span><span class="p">};</span>
|
||||||
|
<span class="linenos">17</span><span class="p">}</span>
|
||||||
|
<span class="linenos">18</span>
|
||||||
|
<span class="linenos">19</span><span class="nv">VirtualHost</span><span class="w"> </span><span class="s2">"example.org"</span>
|
||||||
|
<span class="linenos">20</span><span class="w"> </span><span class="c1">-- for roster sync and 'legacy carbons'</span>
|
||||||
|
<span class="linenos">21</span><span class="w"> </span><span class="nv">privileged_entities</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="linenos">22</span><span class="w"> </span><span class="p">[</span><span class="s2">"telegram.example.org"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="nv">_privileges</span><span class="p">,</span>
|
||||||
|
<span class="linenos">23</span><span class="w"> </span><span class="p">[</span><span class="s2">"other-walled-garden.example.org"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">_privileges</span><span class="p">,</span>
|
||||||
|
<span class="linenos">24</span><span class="w"> </span><span class="c1">-- repeat for other slidge plugins…</span>
|
||||||
|
<span class="linenos">25</span><span class="w"> </span><span class="p">}</span>
|
||||||
|
<span class="linenos">26</span>
|
||||||
|
<span class="linenos">27</span><span class="nv">Component</span><span class="w"> </span><span class="s2">"telegram.example.org"</span>
|
||||||
|
<span class="linenos">28</span><span class="w"> </span><span class="nv">component_secret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"secret"</span>
|
||||||
|
<span class="linenos">29</span><span class="w"> </span><span class="nv">modules_enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="s2">"privilege"</span><span class="p">}</span>
|
||||||
|
<span class="linenos">30</span>
|
||||||
|
<span class="linenos">31</span><span class="nv">Component</span><span class="w"> </span><span class="s2">"other-walled-garden.example.org"</span>
|
||||||
|
<span class="linenos">32</span><span class="w"> </span><span class="nv">component_secret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"some-other-secret"</span>
|
||||||
|
<span class="linenos">33</span><span class="w"> </span><span class="nv">modules_enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="s2">"privilege"</span><span class="p">}</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="ejabberd-upload">
|
||||||
|
<h2>ejabberd/upload<a class="headerlink" href="#ejabberd-upload" title="Link to this heading">¶</a></h2>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>This example does not cover the <cite>No upload</cite> option for attachments (see <a class="reference internal" href="../config.html#config"><span class="std std-ref">Configuration</span></a>).
|
||||||
|
For ‘no upload’ with ejabberd, you need an external HTTP server, eg
|
||||||
|
<a class="reference internal" href="../attachments.html#nginx-no-upload"><span class="std std-ref">Example 2: nginx</span></a>.</p>
|
||||||
|
</div>
|
||||||
|
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="nt">listen</span><span class="p">:</span>
|
||||||
|
<span class="linenos"> 2</span><span class="w"> </span><span class="p p-Indicator">-</span>
|
||||||
|
<span class="linenos"> 3</span><span class="w"> </span><span class="nt">ip</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">127.0.0.1</span>
|
||||||
|
<span class="linenos"> 4</span><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">5347</span>
|
||||||
|
<span class="linenos"> 5</span><span class="w"> </span><span class="nt">module</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ejabberd_service</span>
|
||||||
|
<span class="linenos"> 6</span><span class="w"> </span><span class="c1"># The next line is required if you're settings up multiple bridges</span>
|
||||||
|
<span class="linenos"> 7</span><span class="w"> </span><span class="nt">global_routes</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
|
||||||
|
<span class="linenos"> 8</span><span class="w"> </span><span class="nt">hosts</span><span class="p">:</span>
|
||||||
|
<span class="linenos"> 9</span><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">"superduper.example.org"</span><span class="p p-Indicator">:</span>
|
||||||
|
<span class="linenos">10</span><span class="w"> </span><span class="nt">password</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">secret</span>
|
||||||
|
<span class="linenos">11</span><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">"other-walled-garden.example.org"</span><span class="p p-Indicator">:</span>
|
||||||
|
<span class="linenos">12</span><span class="w"> </span><span class="nt">password</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">some-other-secret</span>
|
||||||
|
<span class="linenos">13</span><span class="w"> </span><span class="c1"># repeat for other slidge plugins…</span>
|
||||||
|
<span class="linenos">14</span>
|
||||||
|
<span class="linenos">15</span><span class="w"> </span><span class="c1"># HTTP upload service (XEP-0363)</span>
|
||||||
|
<span class="linenos">16</span><span class="w"> </span><span class="p p-Indicator">-</span>
|
||||||
|
<span class="linenos">17</span><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">5443</span>
|
||||||
|
<span class="linenos">18</span><span class="w"> </span><span class="nt">module</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ejabberd_http</span>
|
||||||
|
<span class="linenos">19</span><span class="w"> </span><span class="nt">tls</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
|
||||||
|
<span class="linenos">20</span><span class="w"> </span><span class="nt">request_handlers</span><span class="p">:</span>
|
||||||
|
<span class="linenos">21</span><span class="w"> </span><span class="nt">/upload</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mod_http_upload</span>
|
||||||
|
<span class="linenos">22</span>
|
||||||
|
<span class="linenos">23</span><span class="nt">acl</span><span class="p">:</span>
|
||||||
|
<span class="linenos">24</span><span class="w"> </span><span class="nt">slidge_acl</span><span class="p">:</span>
|
||||||
|
<span class="linenos">25</span><span class="w"> </span><span class="nt">server</span><span class="p">:</span>
|
||||||
|
<span class="linenos">26</span><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">"superduper.example.org"</span>
|
||||||
|
<span class="linenos">27</span><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">"other-walled-garden.example.org"</span>
|
||||||
|
<span class="linenos">28</span><span class="w"> </span><span class="c1"># repeat for other slidge plugins you added in the listen section above</span>
|
||||||
|
<span class="linenos">29</span>
|
||||||
|
<span class="linenos">30</span><span class="nt">access_rules</span><span class="p">:</span>
|
||||||
|
<span class="linenos">31</span><span class="w"> </span><span class="nt">slidge_rule</span><span class="p">:</span>
|
||||||
|
<span class="linenos">32</span><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">allow</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_acl</span>
|
||||||
|
<span class="linenos">33</span>
|
||||||
|
<span class="linenos">34</span><span class="nt">modules</span><span class="p">:</span>
|
||||||
|
<span class="linenos">35</span><span class="w"> </span><span class="nt">mod_http_upload</span><span class="p">:</span>
|
||||||
|
<span class="linenos">36</span><span class="w"> </span><span class="c1"># A path that ejabberd has Read and Write access to</span>
|
||||||
|
<span class="linenos">37</span><span class="w"> </span><span class="nt">docroot</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/ejabberd/upload</span>
|
||||||
|
<span class="linenos">38</span><span class="w"> </span><span class="nt">put_url</span><span class="p">:</span><span class="w"> </span><span class="s">"https://@HOST@:5443/upload"</span>
|
||||||
|
<span class="linenos">39</span><span class="w"> </span><span class="nt">access</span><span class="p">:</span>
|
||||||
|
<span class="linenos">40</span><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">allow</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">local</span>
|
||||||
|
<span class="linenos">41</span><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">allow</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_acl</span>
|
||||||
|
<span class="linenos">42</span>
|
||||||
|
<span class="linenos">43</span><span class="w"> </span><span class="c1"># for roster auto-fill and "carbons from legacy apps"</span>
|
||||||
|
<span class="linenos">44</span><span class="w"> </span><span class="c1"># (broken in ejabberd when this was written, hopefully fixed since)</span>
|
||||||
|
<span class="linenos">45</span><span class="w"> </span><span class="nt">mod_privilege</span><span class="p">:</span>
|
||||||
|
<span class="linenos">46</span><span class="w"> </span><span class="nt">roster</span><span class="p">:</span>
|
||||||
|
<span class="linenos">47</span><span class="w"> </span><span class="nt">both</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_rule</span>
|
||||||
|
<span class="linenos">48</span><span class="w"> </span><span class="nt">message</span><span class="p">:</span>
|
||||||
|
<span class="linenos">49</span><span class="w"> </span><span class="nt">outgoing</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_rule</span>
|
||||||
|
<span class="linenos">50</span><span class="w"> </span><span class="nt">iq</span><span class="p">:</span>
|
||||||
|
<span class="linenos">51</span><span class="w"> </span><span class="s">"http://jabber.org/protocol/pubsub"</span><span class="p p-Indicator">:</span>
|
||||||
|
<span class="linenos">52</span><span class="w"> </span><span class="nt">both</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_rule</span>
|
||||||
|
<span class="linenos">53</span><span class="w"> </span><span class="s">"http://jabber.org/protocol/pubsub#owner"</span><span class="p p-Indicator">:</span>
|
||||||
|
<span class="linenos">54</span><span class="w"> </span><span class="nt">set</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_rule</span>
|
||||||
|
<span class="linenos">55</span><span class="w"> </span><span class="s">"urn:xmpp:http:upload:0"</span><span class="p p-Indicator">:</span>
|
||||||
|
<span class="linenos">56</span><span class="w"> </span><span class="nt">get</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_rule</span>
|
||||||
|
<span class="linenos">57</span><span class="w"> </span><span class="nt">mod_roster</span><span class="p">:</span>
|
||||||
|
<span class="linenos">58</span><span class="w"> </span><span class="nt">versioning</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="../../user/index.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">For users</div>
|
||||||
|
</div>
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="../config.html">
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Configuration</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
On this page
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">XMPP server configs examples</a><ul>
|
||||||
|
<li><a class="reference internal" href="#prosody-upload">prosody/upload</a></li>
|
||||||
|
<li><a class="reference internal" href="#prosody-no-upload">prosody/no-upload</a></li>
|
||||||
|
<li><a class="reference internal" href="#ejabberd-upload">ejabberd/upload</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="../../_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="../../_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="../../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,404 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="../">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="../genindex.html"><link rel="search" title="Search" href="../search.html"><link rel="next" title="Installation" href="install.html"><link rel="prev" title="slidgram" href="../index.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>For admins - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="../index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 current has-children current-page"><a class="current reference internal" href="#">For admins</a><input aria-label="Toggle navigation of For admins" checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="../user/index.html">For users</a><input aria-label="Toggle navigation of For users" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/admin/index.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/admin/index.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="for-admins">
|
||||||
|
<h1>For admins<a class="headerlink" href="#for-admins" title="Link to this heading">¶</a></h1>
|
||||||
|
<p>If you are the administrator of an XMPP server and want to set up slidgram,
|
||||||
|
this part of the documentation is made for you.</p>
|
||||||
|
<p>Once the gateway is set up, multiple users can use after registering themselves, through
|
||||||
|
an XMPP client.</p>
|
||||||
|
<div class="toctree-wrapper compound">
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="install.html">Installation</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="install.html#containers">Containers</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="install.html#python-packages">Python packages</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="install.html#unofficial-debian-package">Unofficial debian package</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="install.html#netbsd-specific-instructions">NetBSD-specific instructions</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quick start</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="quickstart.html#setup-an-xmpp-server-component">Setup an XMPP server component</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="quickstart.html#id1">Prosŏdy</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="quickstart.html#id2">ejabberd</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="quickstart.html#launch-the-daemon">Launch the daemon</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="quickstart.html#next-steps">Next steps</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="attachments.html">Attachments</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="attachments.html#http-upload">HTTP Upload</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="attachments.html#example-1-prosody-s-mod-http-file-share">Example 1: prosody’s mod_http_file_share</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="attachments.html#example-2-ejabberd-mod-http-upload">Example 2: ejabberd mod_http_upload</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="attachments.html#no-upload">No upload</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="attachments.html#example-1-prosody-s-http-files">Example 1: prosody’s http_files</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="attachments.html#example-2-nginx">Example 2: nginx</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="attachments.html#next-steps">Next steps</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="privileges.html">Privileges</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="privileges.html#server-specific-instructions">Server-specific instructions</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="privileges.html#prosody">Prosŏdy</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="privileges.html#ejabberd">ejabberd</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="privileges.html#next-step">Next step</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="config.html#config-files">Config files</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="config.html#location">Location</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="config.html#syntax">Syntax</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="config.html#command-line-arguments">Command-line arguments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="config.html#environment-variables">Environment variables</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="config.html#slidgram-specific-config">slidgram-specific config</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="config.html#generic-slidge-config">Generic slidge config</a><ul>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="config.html#mandatory-settings">Mandatory settings</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="config.html#basic-configuration">Basic configuration</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="config.html#attachments">Attachments</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="config.html#logging">Logging</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="config.html#advanced-settings">Advanced settings</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="config.html#advanced-logging-configuration">Advanced logging configuration</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="examples/index.html">XMPP server configs examples</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="examples/index.html#prosody-upload">prosody/upload</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="examples/index.html#prosody-no-upload">prosody/no-upload</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="examples/index.html#ejabberd-upload">ejabberd/upload</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="install.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Installation</div>
|
||||||
|
</div>
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="../index.html">
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Home</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer no-toc">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,416 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="../">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="../genindex.html"><link rel="search" title="Search" href="../search.html"><link rel="next" title="Quick start" href="quickstart.html"><link rel="prev" title="For admins" href="index.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>Installation - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="../index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 current has-children"><a class="reference internal" href="index.html">For admins</a><input aria-label="Toggle navigation of For admins" checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul class="current">
|
||||||
|
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="../user/index.html">For users</a><input aria-label="Toggle navigation of For users" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/admin/install.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/admin/install.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="installation">
|
||||||
|
<h1>Installation<a class="headerlink" href="#installation" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="containers">
|
||||||
|
<h2>Containers<a class="headerlink" href="#containers" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>A container is built on every push to the git repository and uploaded to <a class="reference external" href="https://codeberg.org/slidge/-/packages/container/slidgram/latest">the codeberg package
|
||||||
|
registry</a>.</p>
|
||||||
|
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>docker<span class="w"> </span>run<span class="w"> </span>codeberg.org/slidge/slidgram:latest<span class="w"> </span><span class="c1"># works with podman too</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Use the <code class="docutils literal notranslate"><span class="pre">:latest</span></code> tag for the latest release, <code class="docutils literal notranslate"><span class="pre">:vX.X.X</span></code> for release
|
||||||
|
X.X.X, and <code class="docutils literal notranslate"><span class="pre">:main</span></code> for the bleeding edge.</p>
|
||||||
|
<p>For data persistence, mount a writeable directory into <code class="docutils literal notranslate"><span class="pre">/var/lib/slidge</span></code>. Inside the container,
|
||||||
|
slidgram runs as the <code class="docutils literal notranslate"><span class="pre">slidge</span></code> user with UID/GID 10000/10000.</p>
|
||||||
|
<p>slidgram must be able to <a class="reference internal" href="quickstart.html#setup-component"><span class="std std-ref">reach your XMPP server</span></a>, so set up networking accordingly.</p>
|
||||||
|
</section>
|
||||||
|
<section id="python-packages">
|
||||||
|
<h2>Python packages<a class="headerlink" href="#python-packages" title="Link to this heading">¶</a></h2>
|
||||||
|
<a class="reference external image-reference" href="https://pypi.org/project/slidgram/"><img alt="PyPI package version" src="https://badge.fury.io/py/slidgram.svg" />
|
||||||
|
</a>
|
||||||
|
<p>slidgram is available on the <a class="reference external" href="https://pypi.org/project/slidgram/">python package index (PyPI)</a>.</p>
|
||||||
|
<p>If you are not familiar with python packaging, we recommend using <a class="reference external" href="https://pypa.github.io/pipx/">pipx</a> to
|
||||||
|
set up slidgram and its dependencies, isolated from the rest of your system.</p>
|
||||||
|
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># for the latest stable release published to PyPI, if any</span>
|
||||||
|
pipx<span class="w"> </span>install<span class="w"> </span>slidgram
|
||||||
|
|
||||||
|
slidgram<span class="w"> </span>--help
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Bleeding edge versions are also available on <a class="reference external" href="https://codeberg/slidge/-/packages/pypi/slidgram">codeberg’s python index</a>.</p>
|
||||||
|
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># for the bleeding edge</span>
|
||||||
|
pipx<span class="w"> </span>install<span class="w"> </span>slidgram<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>--pip-args<span class="o">=</span><span class="s1">'--extra-index-url https://codeberg.org/api/packages/slidge/pypi/simple/ --pre'</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="unofficial-debian-package">
|
||||||
|
<h2>Unofficial debian package<a class="headerlink" href="#unofficial-debian-package" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>If you are using debian you might be interested in installing the
|
||||||
|
<a class="reference external" href="https://codeberg.org/slidge/debian">slidge (unofficial) debian
|
||||||
|
package</a> which bundles slidgram
|
||||||
|
along with other slidge-based XMPP gateways.</p>
|
||||||
|
<p>Follow the instructions in the repository <a class="reference external" href="https://codeberg.org/slidge/debian/src/branch/main/README.md">README</a>. In short:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><a class="reference internal" href="quickstart.html#setup-component"><span class="std std-ref">Configure</span></a> your XMPP ;</p></li>
|
||||||
|
<li><p>edit <code class="docutils literal notranslate"><span class="pre">/etc/slidge/conf.d/common.conf</span></code>;</p></li>
|
||||||
|
<li><p>edit <code class="docutils literal notranslate"><span class="pre">/etc/slidge/telegram.conf</span></code>;</p></li>
|
||||||
|
<li><p>run <code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">systemctl</span> <span class="pre">start</span> <span class="pre">slidge@telegram</span></code>;</p></li>
|
||||||
|
<li><p>watch the logs with <code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">journalctl</span> <span class="pre">-u</span> <span class="pre">slidge@telegram</span> <span class="pre">-f</span></code>.</p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="netbsd-specific-instructions">
|
||||||
|
<h2>NetBSD-specific instructions<a class="headerlink" href="#netbsd-specific-instructions" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>It is possible to install slidgram on bare metal or in a sandbox.</p>
|
||||||
|
<p>First, install the necessary build dependencies:</p>
|
||||||
|
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>pkgin<span class="w"> </span>install<span class="w"> </span>py313-pip<span class="w"> </span>py313-setuptools<span class="w"> </span>py313-setuptools-rust<span class="w"> </span>py313-wheel<span class="w"> </span>rust<span class="w"> </span>rust-bin<span class="w"> </span>gcc14
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Then, optionally, install the dependencies available with pkgin:</p>
|
||||||
|
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>pkgin<span class="w"> </span>install<span class="w"> </span>py313-uvloop<span class="w"> </span>py313-aiohttp<span class="w"> </span>py313-alembic<span class="w"> </span>py313-Pillow<span class="w"> </span>py313-configargparse<span class="w"> </span>py313-defusedxml<span class="w"> </span>py313-qrcode<span class="w"> </span>py313-sqlalchemy<span class="w"> </span>py313-aiohappyeyeballs<span class="w"> </span>py313-aiosignal<span class="w"> </span>py313-attrs<span class="w"> </span>py313-frozenlist<span class="w"> </span>py313-multidict<span class="w"> </span>py313-propcache<span class="w"> </span>py313-yarl<span class="w"> </span>py313-aiodns<span class="w"> </span>py313-brotli<span class="w"> </span>py313-mako<span class="w"> </span>py313-greenlet<span class="w"> </span>py313-idna<span class="w"> </span>py313-cffi
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>After this, install with <code class="docutils literal notranslate"><span class="pre">pip</span></code>:</p>
|
||||||
|
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nv">PATH</span><span class="o">=</span><span class="s2">"</span><span class="nv">$PATH</span><span class="s2">:/usr/pkg/gcc14/bin"</span><span class="w"> </span>pip3.13<span class="w"> </span>install<span class="w"> </span>slidgram
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="quickstart.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Quick start</div>
|
||||||
|
</div>
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="index.html">
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">For admins</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
On this page
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Installation</a><ul>
|
||||||
|
<li><a class="reference internal" href="#containers">Containers</a></li>
|
||||||
|
<li><a class="reference internal" href="#python-packages">Python packages</a></li>
|
||||||
|
<li><a class="reference internal" href="#unofficial-debian-package">Unofficial debian package</a></li>
|
||||||
|
<li><a class="reference internal" href="#netbsd-specific-instructions">NetBSD-specific instructions</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,441 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="../">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="../genindex.html"><link rel="search" title="Search" href="../search.html"><link rel="next" title="Configuration" href="config.html"><link rel="prev" title="Attachments" href="attachments.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>Privileges - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="../index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 current has-children"><a class="reference internal" href="index.html">For admins</a><input aria-label="Toggle navigation of For admins" checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul class="current">
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="../user/index.html">For users</a><input aria-label="Toggle navigation of For users" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/admin/privileges.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/admin/privileges.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="privileges">
|
||||||
|
<span id="id1"></span><h1>Privileges<a class="headerlink" href="#privileges" title="Link to this heading">¶</a></h1>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>“<a class="extlink-xep reference external" href="https://xmpp.org/extensions/xep-0356.html">XEP-0356</a>: Privileged Entity” only works for XMPP users using the same server as slidgram, e.g., <code class="docutils literal notranslate"><span class="pre">eve@example.org</span></code> on <code class="docutils literal notranslate"><span class="pre">telegram.example.org</span></code>.</p>
|
||||||
|
</div>
|
||||||
|
<p>Setting up slidgram as a privileged entity (<a class="extlink-xep reference external" href="https://xmpp.org/extensions/xep-0356.html">XEP-0356</a>) is optional, but nice to have.
|
||||||
|
It improves user experience with a few “cherry on top” features.
|
||||||
|
By configuring your XMPP server such that slidgram is a privileged entity, slidgram can:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>automatically add/remove “puppet contacts” from the XMPP roster of slidgram users,</p></li>
|
||||||
|
<li><p>reflect on the XMPP side messages sent by users via official Telegram apps,</p></li>
|
||||||
|
<li><p>(if using <a class="reference internal" href="attachments.html#upload"><span class="std std-ref">HTTP Upload</span></a> for attachments from Telegram to XMPP) request upload slots on behalf of slidgram users,
|
||||||
|
respecting any quota, retention, permission, or other policy set at the upload component level,</p></li>
|
||||||
|
<li><p>synchronize other actions done via official Telegram apps, such as marking messages as read, using emoji reactions,
|
||||||
|
retracting messages, sending files…</p></li>
|
||||||
|
<li><p>automatically add XMPP bookmarks (<a class="extlink-xep reference external" href="https://xmpp.org/extensions/xep-0402.html">XEP-0402</a>) for MUCs (<a class="extlink-xep reference external" href="https://xmpp.org/extensions/xep-0045.html">XEP-0045</a>).</p></li>
|
||||||
|
</ul>
|
||||||
|
<section id="server-specific-instructions">
|
||||||
|
<h2>Server-specific instructions<a class="headerlink" href="#server-specific-instructions" title="Link to this heading">¶</a></h2>
|
||||||
|
<section id="prosody">
|
||||||
|
<h3>Prosŏdy<a class="headerlink" href="#prosody" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>Install the <a class="reference external" href="https://modules.prosody.im/mod_privilege.html">mod_privilege</a>
|
||||||
|
community module with:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>prosodyctl<span class="w"> </span>install<span class="w"> </span>--server<span class="o">=</span>https://modules.prosody.im/rocks/<span class="w"> </span>mod_privilege
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>In <code class="docutils literal notranslate"><span class="pre">prosody.cfg.lua</span></code>, add <code class="docutils literal notranslate"><span class="pre">mod_privilege</span></code> to the <code class="docutils literal notranslate"><span class="pre">modules_enabled</span></code> list, and
|
||||||
|
declare slidgram privileges in the appropriate virtualhost block:</p>
|
||||||
|
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="kd">local</span><span class="w"> </span><span class="nv">_privileges</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="w"> </span><span class="nv">roster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"both"</span><span class="p">;</span><span class="w"> </span><span class="c1">-- for adding/removing contacts from the users' rosters</span>
|
||||||
|
<span class="w"> </span><span class="nv">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"outgoing"</span><span class="p">;</span><span class="w"> </span><span class="c1">-- for reflecting messages sent by the user themselve from official Telegram apps</span>
|
||||||
|
<span class="w"> </span><span class="nv">iq</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="w"> </span><span class="p">[</span><span class="s2">"http://jabber.org/protocol/pubsub"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"both"</span><span class="p">;</span><span class="w"> </span><span class="c1">-- for PEP Bookmarks</span>
|
||||||
|
<span class="w"> </span><span class="p">[</span><span class="s2">"http://jabber.org/protocol/pubsub#owner"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"set"</span><span class="p">;</span><span class="w"> </span><span class="c1">-- for Message Display Synchronization</span>
|
||||||
|
<span class="w"> </span><span class="p">[</span><span class="s2">"urn:xmpp:http:upload:0"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"get"</span><span class="p">;</span><span class="w"> </span><span class="c1">-- for HTTP Upload on behalf of users</span>
|
||||||
|
<span class="w"> </span><span class="p">}</span>
|
||||||
|
<span class="p">};</span>
|
||||||
|
|
||||||
|
<span class="nv">VirtualHost</span><span class="w"> </span><span class="s2">"example.org"</span>
|
||||||
|
<span class="w"> </span><span class="nv">privileged_entities</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
||||||
|
<span class="w"> </span><span class="p">[</span><span class="s2">"telegram.example.org"</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">_privileges</span><span class="p">;</span>
|
||||||
|
<span class="w"> </span><span class="p">}</span>
|
||||||
|
|
||||||
|
<span class="nv">Component</span><span class="w"> </span><span class="s2">"telegram.example.org"</span>
|
||||||
|
<span class="w"> </span><span class="nv">modules_enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="s2">"privilege"</span><span class="p">}</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Then either restart the prosody server, or reload the config.
|
||||||
|
You might need to use
|
||||||
|
<a class="reference external" href="https://modules.prosody.im/mod_reload_components.html">mod_reload_component</a>,
|
||||||
|
and activate/deactivate hosts
|
||||||
|
for all changes to be taken into account
|
||||||
|
(restarting prosody is the easiest way to go).</p>
|
||||||
|
</section>
|
||||||
|
<section id="ejabberd">
|
||||||
|
<h3>ejabberd<a class="headerlink" href="#ejabberd" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">acl</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">slidge_acl</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">server</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">"telegram.example.org"</span>
|
||||||
|
|
||||||
|
<span class="nt">access_rules</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">slidge_rule</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">allow</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_acl</span>
|
||||||
|
|
||||||
|
<span class="nt">modules</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">mod_privilege</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">roster</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">both</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_rule</span>
|
||||||
|
<span class="w"> </span><span class="nt">message</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">outgoing</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_rule</span>
|
||||||
|
<span class="w"> </span><span class="nt">iq</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="s">"http://jabber.org/protocol/pubsub"</span><span class="p p-Indicator">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">both</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_rule</span>
|
||||||
|
<span class="w"> </span><span class="s">"http://jabber.org/protocol/pubsub#owner"</span><span class="p p-Indicator">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">set</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_rule</span>
|
||||||
|
<span class="w"> </span><span class="s">"urn:xmpp:http:upload:0"</span><span class="p p-Indicator">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">get</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">slidge_rule</span>
|
||||||
|
<span class="w"> </span><span class="nt">mod_roster</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">versioning</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="next-step">
|
||||||
|
<h2>Next step<a class="headerlink" href="#next-step" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Learn about about slidgram’s <a class="reference internal" href="config.html#config"><span class="std std-ref">configuration</span></a> to tune its behaviour to your liking.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="config.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Configuration</div>
|
||||||
|
</div>
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="attachments.html">
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Attachments</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
On this page
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Privileges</a><ul>
|
||||||
|
<li><a class="reference internal" href="#server-specific-instructions">Server-specific instructions</a><ul>
|
||||||
|
<li><a class="reference internal" href="#prosody">Prosŏdy</a></li>
|
||||||
|
<li><a class="reference internal" href="#ejabberd">ejabberd</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a class="reference internal" href="#next-step">Next step</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,403 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="../">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="../genindex.html"><link rel="search" title="Search" href="../search.html"><link rel="next" title="Attachments" href="attachments.html"><link rel="prev" title="Installation" href="install.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>Quick start - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="../index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 current has-children"><a class="reference internal" href="index.html">For admins</a><input aria-label="Toggle navigation of For admins" checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul class="current">
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="../user/index.html">For users</a><input aria-label="Toggle navigation of For users" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../user/features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/admin/quickstart.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/admin/quickstart.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="quick-start">
|
||||||
|
<span id="quickstart"></span><h1>Quick start<a class="headerlink" href="#quick-start" title="Link to this heading">¶</a></h1>
|
||||||
|
<section id="setup-an-xmpp-server-component">
|
||||||
|
<span id="setup-component"></span><h2>Setup an XMPP server component<a class="headerlink" href="#setup-an-xmpp-server-component" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>slidgram uses the <a class="reference external" href="https://xmpp.org/extensions/xep-0114.html">Jabber Component Protocol</a> to
|
||||||
|
connect to an XMPP server.
|
||||||
|
slidgram itself needs to have a JID without a local part, such as <code class="docutils literal notranslate"><span class="pre">telegram.example.org</span></code>.
|
||||||
|
In a typical deployment, slidgram runs on the same host as the XMPP server and connects to it via <code class="docutils literal notranslate"><span class="pre">localhost</span></code>.
|
||||||
|
This requires adequate configuration of the XMPP server, and depends on the XMPP server software you are using.</p>
|
||||||
|
<p>This documentation explains how to do that for
|
||||||
|
<a class="reference external" href="https://prosody.im/doc/components">prosody</a>
|
||||||
|
and <a class="reference external" href="https://docs.ejabberd.im/developer/hosts/">ejabberd</a>.
|
||||||
|
It might be outdated and you may want to check the official, up-to-date documentation of the XMPP server you are using.
|
||||||
|
If you know how to set up slidge with other XMPP servers, please contribute to the docs. ;-)</p>
|
||||||
|
<section id="id1">
|
||||||
|
<h3>Prosŏdy<a class="headerlink" href="#id1" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>Add a component block below the appropriate virtualhost in <code class="docutils literal notranslate"><span class="pre">prosody.cfg.lua</span></code></p>
|
||||||
|
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="nv">Component</span><span class="w"> </span><span class="s2">"telegram.example.org"</span>
|
||||||
|
<span class="w"> </span><span class="nv">component_secret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"some-secret-string"</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="id2">
|
||||||
|
<h3>ejabberd<a class="headerlink" href="#id2" title="Link to this heading">¶</a></h3>
|
||||||
|
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">listen</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="p p-Indicator">-</span>
|
||||||
|
<span class="w"> </span><span class="nt">ip</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">127.0.0.1</span>
|
||||||
|
<span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">5347</span>
|
||||||
|
<span class="w"> </span><span class="nt">module</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ejabberd_service</span>
|
||||||
|
<span class="w"> </span><span class="nt">hosts</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">telegram.example.org</span><span class="p">:</span>
|
||||||
|
<span class="w"> </span><span class="nt">password</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">some-secret-string</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="launch-the-daemon">
|
||||||
|
<h2>Launch the daemon<a class="headerlink" href="#launch-the-daemon" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Start slidgram with:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>slidgram<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>--jid<span class="w"> </span>telegram.example.org<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>--secret<span class="w"> </span>some-secret-string<span class="w"> </span><span class="se">\</span>
|
||||||
|
<span class="w"> </span>--home-dir<span class="w"> </span>/somewhere/writable
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="next-steps">
|
||||||
|
<h2>Next steps<a class="headerlink" href="#next-steps" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Next, you probably want to set up <a class="reference internal" href="attachments.html#attachments"><span class="std std-ref">attachments</span></a> to support bridging files from Telegram to XMPP.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="attachments.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Attachments</div>
|
||||||
|
</div>
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="install.html">
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Installation</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
On this page
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Quick start</a><ul>
|
||||||
|
<li><a class="reference internal" href="#setup-an-xmpp-server-component">Setup an XMPP server component</a><ul>
|
||||||
|
<li><a class="reference internal" href="#id1">Prosŏdy</a></li>
|
||||||
|
<li><a class="reference internal" href="#id2">ejabberd</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a class="reference internal" href="#launch-the-daemon">Launch the daemon</a></li>
|
||||||
|
<li><a class="reference internal" href="#next-steps">Next steps</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,437 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="./">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html"><link rel="prev" title="Features" href="user/features.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>Contributing - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="admin/index.html">For admins</a><input aria-label="Toggle navigation of For admins" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="user/index.html">For users</a><input aria-label="Toggle navigation of For users" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/contributing.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/contributing.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="contributing">
|
||||||
|
<h1>Contributing<a class="headerlink" href="#contributing" title="Link to this heading">¶</a></h1>
|
||||||
|
<p>We are really happy to welcome new contributors to slidgram!
|
||||||
|
Before starting anything, please join <a class="reference external" href="xmpp:dev@rooms.slidge.im?join">our chat room</a>
|
||||||
|
to say hi and see if anyone is already working on the bug you want to fix or
|
||||||
|
the feature you want to implement.</p>
|
||||||
|
<section id="quickstart">
|
||||||
|
<h2>Quickstart<a class="headerlink" href="#quickstart" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>To start hacking on slidgram, you need to:</p>
|
||||||
|
<ol class="arabic simple">
|
||||||
|
<li><p>Clone the repository: <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">clone</span> <span class="pre">https://codeberg.org/slidge/slidgram</span></code>.</p></li>
|
||||||
|
<li><p>Install the required dependencies. (see below)</p></li>
|
||||||
|
<li><p>Spin up a development XMPP server for slidgram to connect to. (see below)</p></li>
|
||||||
|
</ol>
|
||||||
|
<section id="easy-mode-docker-compose">
|
||||||
|
<h3>Easy mode: docker-compose<a class="headerlink" href="#easy-mode-docker-compose" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>The easiest way to achieve 2 and 3 at the same time is to use the provided
|
||||||
|
<code class="docutils literal notranslate"><span class="pre">docker-compose.yml</span></code> file. Run <code class="docutils literal notranslate"><span class="pre">docker</span> <span class="pre">compose</span> <span class="pre">up</span></code> (or <code class="docutils literal notranslate"><span class="pre">podman-compose</span> <span class="pre">up</span></code>)
|
||||||
|
in the directory of the repository you just cloned. It will:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>spin up a <a class="reference external" href="https://prosody.im">prosody</a> instance configured for development;</p></li>
|
||||||
|
<li><p>launch slidgram in a dedicated container, with hot code reload.</p></li>
|
||||||
|
</ul>
|
||||||
|
<p>You will then be able to connect to that prosody using any XMPP client, using
|
||||||
|
“<a class="reference external" href="mailto:test%40localhost">test<span>@</span>localhost</a>” as JID and “password” as password. We recommended
|
||||||
|
<a class="reference external" href="https://gajim.org">gajim</a> which lets you start a different profile than your
|
||||||
|
main profile: <code class="docutils literal notranslate"><span class="pre">gajim</span> <span class="pre">-p</span> <span class="pre">slidge</span> <span class="pre">-c</span> <span class="pre">~/.local/share/gajim-slidge</span></code>.</p>
|
||||||
|
<p>To avoid having to accept self-signed certificates, you can add prosody’s
|
||||||
|
certificate to your local store. In debian, you can do that with:</p>
|
||||||
|
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># download the certificate</span>
|
||||||
|
curl<span class="w"> </span>https://codeberg.org/slidge/prosody-dev-container/raw/branch/main/localhost.crt<span class="w"> </span><span class="p">|</span><span class="w"> </span>sudo<span class="w"> </span>tee<span class="w"> </span>/usr/local/share/ca-certificates/localhost.crt
|
||||||
|
<span class="c1"># set the right perms</span>
|
||||||
|
sudo<span class="w"> </span>chmod<span class="w"> </span><span class="m">600</span><span class="w"> </span>/usr/local/share/ca-certificates/localhost.crt
|
||||||
|
<span class="c1"># import it</span>
|
||||||
|
sudo<span class="w"> </span>update-ca-certificates
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="slightly-harder-mode-setting-up-a-virtualenv">
|
||||||
|
<h3>Slightly harder mode: setting up a virtualenv<a class="headerlink" href="#slightly-harder-mode-setting-up-a-virtualenv" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>In some situations, developing in containers is not optimal, for instance if
|
||||||
|
you want to attach an interactive debugger to the slidgram process.</p>
|
||||||
|
<p>slidgram defines its dependencies in a <a class="reference external" href="https://peps.python.org/pep-0517/">PEP 517</a>-compliant
|
||||||
|
<code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> file. This means that you can use different tools to set up a
|
||||||
|
virtualenv with the appropriate dependencies.</p>
|
||||||
|
<p>We recommend using <a class="reference external" href="https://docs.astral.sh/uv/">uv</a> which is fast and has some
|
||||||
|
nice features. By running <code class="docutils literal notranslate"><span class="pre">uv</span> <span class="pre">sync</span> <span class="pre">--frozen</span> <span class="pre">--all-groups</span> <span class="pre">--all-extras</span></code>, a
|
||||||
|
standard virtualenv will be installed in <code class="docutils literal notranslate"><span class="pre">./.venv</span></code>. You can then activate it
|
||||||
|
with <code class="docutils literal notranslate"><span class="pre">source</span> <span class="pre">.venv/bin/activate</span></code> and launch <code class="docutils literal notranslate"><span class="pre">slidgram</span> <span class="pre">--help</span></code>.</p>
|
||||||
|
<p>NB: you will need to set up a local XMPP server. An easy way to do that is to
|
||||||
|
use the <code class="docutils literal notranslate"><span class="pre">slidge-prosody-dev</span></code> container: <code class="docutils literal notranslate"><span class="pre">docker</span> <span class="pre">run</span> <span class="pre">--network</span> <span class="pre">host</span> <span class="pre">codeberg.org/slidge/prosody-slidge-dev</span></code>.
|
||||||
|
With it you will be able to launch slidgram with
|
||||||
|
<code class="docutils literal notranslate"><span class="pre">slidgram</span> <span class="pre">--jid</span> <span class="pre">slidge.localhost</span> <span class="pre">--secret</span> <span class="pre">secret</span> <span class="pre">--debug</span> <span class="pre">--home-dir</span> <span class="pre">./persistent</span></code>.</p>
|
||||||
|
</section>
|
||||||
|
<section id="hacking-on-slidge-core-simultaneously">
|
||||||
|
<h3>Hacking on slidge core simultaneously<a class="headerlink" href="#hacking-on-slidge-core-simultaneously" title="Link to this heading">¶</a></h3>
|
||||||
|
<p>Maybe you will discover that what you want to change, add or fix is not part
|
||||||
|
of slidgram but part of slidge core. To modify slidge core, first you
|
||||||
|
need to clone <a class="reference external" href="https://codeberg.org/slidge/slidge">the slidge repo</a> somewhere
|
||||||
|
on your computer.</p>
|
||||||
|
<p>Let’s assume you cloned <code class="docutils literal notranslate"><span class="pre">slidge</span></code> in the same root dir as <code class="docutils literal notranslate"><span class="pre">slidgram</span></code>,
|
||||||
|
e.g., <code class="docutils literal notranslate"><span class="pre">~/src/slidgram</span></code> and <code class="docutils literal notranslate"><span class="pre">~/src/slidge</span></code>.
|
||||||
|
With the <code class="docutils literal notranslate"><span class="pre">docker-compose</span></code>-based dev setup, you will need to add an additional
|
||||||
|
mount for the slidge dir, e.g., <code class="docutils literal notranslate"><span class="pre">../slidge:/build/slidge</span></code>. If you opted for
|
||||||
|
the virtualenv solution, you can install slidge in your virtualenv in editable
|
||||||
|
mode with <code class="docutils literal notranslate"><span class="pre">[uv]</span> <span class="pre">pip</span> <span class="pre">install</span> <span class="pre">-e</span> <span class="pre">../slidge</span></code>.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="guidelines">
|
||||||
|
<h2>Guidelines<a class="headerlink" href="#guidelines" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>slidgram uses these tools to ensure some level of code quality:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><a class="reference external" href="https://www.mypy-lang.org/">mypy</a>
|
||||||
|
for static type checking,</p></li>
|
||||||
|
<li><p><a class="reference external" href="https://docs.astral.sh/ruff/">ruff</a>
|
||||||
|
to detect common python mistakes and enforce a consistent style,</p></li>
|
||||||
|
<li><p><a class="reference external" href="https://docs.pytest.org/en/stable/">pytest</a>
|
||||||
|
for automated tests.</p></li>
|
||||||
|
</ul>
|
||||||
|
<p>Commit messages should be in the form of
|
||||||
|
<a class="reference external" href="https://www.conventionalcommits.org/en/v1.0.0/">conventional commits</a>, with
|
||||||
|
some additional types defined in <a class="reference external" href="https://codeberg.org/slidge/slidgram/src/branch/main/commitlint.config.js">./commitlinx.config.js</a>.
|
||||||
|
This makes it possible to automatically generate changelogs on releases, it
|
||||||
|
is worth it! We use <a class="reference external" href="https://git-cliff.org/">git-cliff</a> for this. You don’t have
|
||||||
|
to install git-cliff locally, the magic happens in CI.</p>
|
||||||
|
<p>We recommended setting up <a class="reference external" href="https://pre-commit.com/">pre-commit</a> to ensure that
|
||||||
|
these pass for each commit: <code class="docutils literal notranslate"><span class="pre">pre-commit</span> <span class="pre">install</span> <span class="pre">&&</span> <span class="pre">pre-commit</span> <span class="pre">install</span> <span class="pre">--hook-type</span> <span class="pre">commit-msg</span></code>.</p>
|
||||||
|
<p>Make a new git branch, commit your changes, push it to your fork and open a
|
||||||
|
pull request!</p>
|
||||||
|
<p>NB: we also accept contributions without pull requests. Just push your changes
|
||||||
|
somewhere and tell us where to pull via the group chat.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
|
||||||
|
<a class="prev-page" href="user/features.html">
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Features</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
On this page
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Contributing</a><ul>
|
||||||
|
<li><a class="reference internal" href="#quickstart">Quickstart</a><ul>
|
||||||
|
<li><a class="reference internal" href="#easy-mode-docker-compose">Easy mode: docker-compose</a></li>
|
||||||
|
<li><a class="reference internal" href="#slightly-harder-mode-setting-up-a-virtualenv">Slightly harder mode: setting up a virtualenv</a></li>
|
||||||
|
<li><a class="reference internal" href="#hacking-on-slidge-core-simultaneously">Hacking on slidge core simultaneously</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a class="reference internal" href="#guidelines">Guidelines</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,302 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="./">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#"><link rel="search" title="Search" href="search.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 --><title>Index - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="admin/index.html">For admins</a><input aria-label="Toggle navigation of For admins" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="user/index.html">For users</a><input aria-label="Toggle navigation of For users" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
|
||||||
|
<section class="genindex-section">
|
||||||
|
<h1 id="index">Index</h1>
|
||||||
|
<div class="genindex-jumpbox"></div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer no-toc">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,360 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="./">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html"><link rel="next" title="For admins" href="admin/index.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="#"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="#">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="admin/index.html">For admins</a><input aria-label="Toggle navigation of For admins" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="user/index.html">For users</a><input aria-label="Toggle navigation of For users" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/index.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/index.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="slidgram">
|
||||||
|
<h1>slidgram<a class="headerlink" href="#slidgram" title="Link to this heading">¶</a></h1>
|
||||||
|
<aside class="sidebar">
|
||||||
|
<p class="sidebar-title">Useful links</p>
|
||||||
|
<p><a class="reference external" href="https://codeberg.org/slidge/slidgram">Source</a></p>
|
||||||
|
<p><a class="reference external" href="xmpp:support@rooms.slidge.im?join">Chat room</a></p>
|
||||||
|
<p><a class="reference external" href="https://codeberg.org/slidge/slidgram/issues">Bug tracker</a></p>
|
||||||
|
</aside>
|
||||||
|
<p>A
|
||||||
|
<a class="reference external" href="user/features.html">feature-rich</a>
|
||||||
|
<a class="reference external" href="https://telegram.org">Telegram</a> to
|
||||||
|
<a class="reference external" href="https://xmpp.org/">XMPP</a> puppeteering
|
||||||
|
<a class="reference external" href="https://xmpp.org/extensions/xep-0100.html">gateway</a>, based on
|
||||||
|
<a class="reference external" href="https://slidge.im">slidge</a> and
|
||||||
|
<a class="reference external" href="https://pyrofork.mayuri.my.id/main/">Pyrofork</a>.</p>
|
||||||
|
<div class="toctree-wrapper compound">
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="admin/index.html">For admins</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="user/index.html">For users</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="contributing.html#quickstart">Quickstart</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="contributing.html#guidelines">Guidelines</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="admin/index.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">For admins</div>
|
||||||
|
</div>
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer no-toc">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,313 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="./">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="#">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<meta name="robots" content="noindex" />
|
||||||
|
<title>Search - slidgram documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="#" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="admin/index.html">For admins</a><input aria-label="Toggle navigation of For admins" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="admin/examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="user/index.html">For users</a><input aria-label="Toggle navigation of For users" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="user/features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
|
||||||
|
<noscript>
|
||||||
|
<div class="admonition error">
|
||||||
|
<p class="admonition-title">Error</p>
|
||||||
|
<p>
|
||||||
|
Please activate JavaScript to enable the search functionality.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</noscript>
|
||||||
|
|
||||||
|
<div id="search-results"></div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer no-toc">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|
||||||
|
<script src="_static/searchtools.js"></script>
|
||||||
|
<script src="_static/language_data.js"></script>
|
||||||
|
<script src="searchindex.js"></script></body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,391 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="../">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="../genindex.html"><link rel="search" title="Search" href="../search.html"><link rel="next" title="Contributing" href="../contributing.html"><link rel="prev" title="Usage" href="usage.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>Features - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="../index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="../admin/index.html">For admins</a><input aria-label="Toggle navigation of For admins" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 current has-children"><a class="reference internal" href="index.html">For users</a><input aria-label="Toggle navigation of For users" checked="" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul class="current">
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/user/features.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/user/features.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="features">
|
||||||
|
<h1>Features<a class="headerlink" href="#features" title="Link to this heading">¶</a></h1>
|
||||||
|
<p>The table below lists the notable features for slidgram.
|
||||||
|
Refer to <a class="reference external" href="https://xmpp.org/software/slidge/">xmpp.org</a> for a longer version,
|
||||||
|
including all XEPs supported by <a class="reference external" href="https://slidge.im/">slidge</a>.</p>
|
||||||
|
<div class="table-wrapper docutils container">
|
||||||
|
<table class="docutils align-default">
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-odd"><td>✅</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0045.html">Multi-User Chat</a></p></td>
|
||||||
|
<td>Full support, including creation, administration and moderation</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>✅</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0084.html">User Avatar</a></p></td>
|
||||||
|
<td>Telegram contacts have avatars, and the user's XMPP avatar is used to set their Telegram avatar.</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>✅</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0085.html">Chat State Notifications</a></p></td>
|
||||||
|
<td>All chat states have a telegram equivalent, including active/inactive</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>✅</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0184.html">Message Delivery Receipts</a></p></td>
|
||||||
|
<td>No real recipient-generated delivery receipts in Telegram, but slidge will emit some when Telegram servers acknowledge a message</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>✅</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0319.html">Last User Interaction in Presence</a></p></td>
|
||||||
|
<td>Supported</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>✅</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0308.html">Last Message Correction</a></p></td>
|
||||||
|
<td>Supported</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>✅</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0333.html">Displayed Markers</a></p></td>
|
||||||
|
<td>Only displayed markers have an equivalence in Telegram. They are also used to sync read state from and to Telegram clients. In groups, you only receive displayed markers for message you have sent, not for messages from other participants.</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>✅</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0363.html">HTTP File Upload</a></p></td>
|
||||||
|
<td>Supported</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>🤏</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0393.html">Message Styling</a></p></td>
|
||||||
|
<td>Incoming telegram messages formatting are converted to XEP-0393 styling, with linked URLs shown. Incoming XMPP messages are parsed for message styling tags and converted to telegram formatted text. Additionally, double pipes can be used for spoilers, eg ||spoiler||.</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>✅</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0424.html">Message Retraction</a></p></td>
|
||||||
|
<td>Supported</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>✅</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0444.html">Message Reactions</a></p></td>
|
||||||
|
<td>Supported</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td>✅</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0461.html">Message Replies</a></p></td>
|
||||||
|
<td>Supported</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td>✅</td>
|
||||||
|
<td><p><a class="reference external" href="https://xmpp.org/extensions/xep-0425.html">Moderated Message Retraction</a></p></td>
|
||||||
|
<td>Supported</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="../contributing.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Contributing</div>
|
||||||
|
</div>
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="usage.html">
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Usage</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer no-toc">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,342 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="../">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="../genindex.html"><link rel="search" title="Search" href="../search.html"><link rel="next" title="Registration" href="registration.html"><link rel="prev" title="XMPP server configs examples" href="../admin/examples/index.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>For users - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="../index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="../admin/index.html">For admins</a><input aria-label="Toggle navigation of For admins" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 current has-children current-page"><a class="current reference internal" href="#">For users</a><input aria-label="Toggle navigation of For users" checked="" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/user/index.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/user/index.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="for-users">
|
||||||
|
<h1>For users<a class="headerlink" href="#for-users" title="Link to this heading">¶</a></h1>
|
||||||
|
<p>You want to use a slidgram instance? You have come to the right place.</p>
|
||||||
|
<div class="toctree-wrapper compound">
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="usage.html#roster">Roster</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="usage.html#presences">Presences</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="registration.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Registration</div>
|
||||||
|
</div>
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="../admin/examples/index.html">
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">XMPP server configs examples</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer no-toc">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,341 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="../">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="../genindex.html"><link rel="search" title="Search" href="../search.html"><link rel="next" title="Usage" href="usage.html"><link rel="prev" title="For users" href="index.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>Registration - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="../index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="../admin/index.html">For admins</a><input aria-label="Toggle navigation of For admins" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 current has-children"><a class="reference internal" href="index.html">For users</a><input aria-label="Toggle navigation of For users" checked="" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul class="current">
|
||||||
|
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Registration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="usage.html">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/user/registration.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/user/registration.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="registration">
|
||||||
|
<h1>Registration<a class="headerlink" href="#registration" title="Link to this heading">¶</a></h1>
|
||||||
|
<p>To start using a slidgram, you need to register your XMPP account with it.
|
||||||
|
The instance has a unique XMPP (aka JID) address, which is just a domain name (e.g., <code class="docutils literal notranslate"><span class="pre">telegram.example.org</span></code>, without any @ sign in it).</p>
|
||||||
|
<p>There are two ways to register, depending on which XMPP/Jabber client you are using:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>If your client supports adhoc commands (such as Movim, Gajim, or Cheogram),
|
||||||
|
you can use the “Register” command with the slidgram instance’s
|
||||||
|
address.</p></li>
|
||||||
|
<li><p>If your client does not support adhoc commands (such as Conversations), you
|
||||||
|
can register by sending a text message that says “register” to the
|
||||||
|
slidgram instance’s address.</p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="usage.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Usage</div>
|
||||||
|
</div>
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="index.html">
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">For users</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer no-toc">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,366 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js" lang="en" data-content_root="../">
|
||||||
|
<head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="index" title="Index" href="../genindex.html"><link rel="search" title="Search" href="../search.html"><link rel="next" title="Features" href="features.html"><link rel="prev" title="Registration" href="registration.html">
|
||||||
|
|
||||||
|
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
||||||
|
<title>Usage - slidgram documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d111a655" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=7bdb33bb" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f2f2f2;
|
||||||
|
--color-code-foreground: #1e1e1e;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||||
|
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||||
|
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||||
|
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||||
|
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||||
|
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||||
|
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||||
|
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||||
|
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||||
|
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark, in dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||||
|
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||||
|
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||||
|
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||||
|
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||||
|
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||||
|
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||||
|
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||||
|
<path d="M13.5 6.5l4 4" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||||
|
<path
|
||||||
|
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||||
|
<path d="M20 21l2 -2l-2 -2" />
|
||||||
|
<path d="M17 17l-2 2l2 2" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc"></label>
|
||||||
|
|
||||||
|
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="../index.html"><div class="brand">slidgram documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">slidgram documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 has-children"><a class="reference internal" href="../admin/index.html">For admins</a><input aria-label="Toggle navigation of For admins" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/install.html">Installation</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/quickstart.html">Quick start</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/attachments.html">Attachments</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/privileges.html">Privileges</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/config.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="../admin/examples/index.html">XMPP server configs examples</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1 current has-children"><a class="reference internal" href="index.html">For users</a><input aria-label="Toggle navigation of For users" checked="" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul class="current">
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="registration.html">Registration</a></li>
|
||||||
|
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Usage</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="features.html">Features</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">Contributing</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="view-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/src/branch/main/docs/source/user/usage.rst" title="View this page">
|
||||||
|
<svg><use href="#svg-eye"></use></svg>
|
||||||
|
<span class="visually-hidden">View this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="edit-this-page">
|
||||||
|
<a class="muted-link" href="https://codeberg.org/slidge/slidgram/_edit/main/docs/source/user/usage.rst" rel="edit" title="Edit this page">
|
||||||
|
<svg><use href="#svg-pencil"></use></svg>
|
||||||
|
<span class="visually-hidden">Edit this page</span>
|
||||||
|
</a>
|
||||||
|
</div><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||||
|
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main" id="furo-main-content">
|
||||||
|
<section id="usage">
|
||||||
|
<h1>Usage<a class="headerlink" href="#usage" title="Link to this heading">¶</a></h1>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>Telegram is OK with alternative clients, so as long as you’re not doing evil stuff, using slidge
|
||||||
|
to interact with the telegram network is fine.</p>
|
||||||
|
</div>
|
||||||
|
<section id="roster">
|
||||||
|
<h2>Roster<a class="headerlink" href="#roster" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Contact JIDs are of the form <code class="docutils literal notranslate"><span class="pre">123456789@slidge-telegram.example.org</span></code> where 123456789 is a telegram ID.
|
||||||
|
If you want to find the telegram ID of someone using their phone number, use slidge’s search feature:
|
||||||
|
<span class="xref std std-ref">Finding legacy contacts</span>.</p>
|
||||||
|
</section>
|
||||||
|
<section id="presences">
|
||||||
|
<h2>Presences<a class="headerlink" href="#presences" title="Link to this heading">¶</a></h2>
|
||||||
|
<p>Your contacts’ puppet JIDs presence statuses will show when they were last seen online,
|
||||||
|
and their presence statuses will be set to “away” after 5 minutes.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="features.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Features</div>
|
||||||
|
</div>
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="registration.html">
|
||||||
|
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Registration</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2026, the slidgram contributors
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
<a class="muted-link " href="https://codeberg.org/slidge/slidgram" aria-label="Codeberg"><svg xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-label="Codeberg" role="img"
|
||||||
|
viewBox="55 65 400 390">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="A" x1="259.804" x2="383.132" y1="161.4" y2="407.835" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
|
||||||
|
<stop offset=".5" stop-color="#71c2ff"/>
|
||||||
|
<stop offset="1" stop-color="#39aaff"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path fill="url(#A)"
|
||||||
|
d="M259.804 161.4c-.44 0-1.1 0-1.32.44l-.44 1.1L332.04 440.21a192.039 192.039 0 0 0 86.77-74.437L261.125 162.06a1.762 1.762 0 0 0-1.321-.661z"
|
||||||
|
opacity=".5" paint-order="stroke markers fill"/>
|
||||||
|
<path fill="#2185d0"
|
||||||
|
d="M255.3 71.8a192 192 0 0 0-162 294l160.1-207c.5-.6 1.5-1 2.6-1s2 .4 2.6 1l160 207a192 192 0 0 0 29.4-102c0-106-86-192-192-192a192 192 0 0 0-.7 0z"
|
||||||
|
paint-order="stroke markers fill"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
On this page
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Usage</a><ul>
|
||||||
|
<li><a class="reference internal" href="#roster">Roster</a></li>
|
||||||
|
<li><a class="reference internal" href="#presences">Presences</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
|
||||||
|
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
||||||
|
<script src="../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,685 @@
|
|||||||
|
-- XEP-0356 (Privileged Entity)
|
||||||
|
-- Copyright (C) 2015-2022 Jérôme Poisson
|
||||||
|
--
|
||||||
|
-- This module is MIT/X11 licensed. Please see the
|
||||||
|
-- COPYING file in the source package for more information.
|
||||||
|
--
|
||||||
|
-- Some parts come from mod_remote_roster (module by Waqas Hussain and Kim Alvefur, see https://code.google.com/p/prosody-modules/)
|
||||||
|
|
||||||
|
-- TODO: manage external <presence/> (for "roster" presence permission) when the account with the roster is offline
|
||||||
|
|
||||||
|
local jid = require("util.jid")
|
||||||
|
local set = require("util.set")
|
||||||
|
local st = require("util.stanza")
|
||||||
|
local roster_manager = require("core.rostermanager")
|
||||||
|
local usermanager_user_exists = require "core.usermanager".user_exists
|
||||||
|
local hosts = prosody.hosts
|
||||||
|
local full_sessions = prosody.full_sessions
|
||||||
|
|
||||||
|
local priv_session = module:shared("/*/privilege/session")
|
||||||
|
|
||||||
|
if priv_session.connected_cb == nil then
|
||||||
|
-- set used to have connected event listeners
|
||||||
|
-- which allows a host to react on events from
|
||||||
|
-- other hosts
|
||||||
|
priv_session.connected_cb = set.new()
|
||||||
|
end
|
||||||
|
local connected_cb = priv_session.connected_cb
|
||||||
|
|
||||||
|
-- the folowing sets are used to forward presence stanza
|
||||||
|
-- the folowing sets are used to forward presence stanza
|
||||||
|
local presence_man_ent = set.new()
|
||||||
|
local presence_roster = set.new()
|
||||||
|
|
||||||
|
local _ALLOWED_ROSTER = set.new({'none', 'get', 'set', 'both'})
|
||||||
|
local _ROSTER_GET_PERM = set.new({'get', 'both'})
|
||||||
|
local _ROSTER_SET_PERM = set.new({'set', 'both'})
|
||||||
|
local _ALLOWED_MESSAGE = set.new({'none', 'outgoing'})
|
||||||
|
local _ALLOWED_PRESENCE = set.new({'none', 'managed_entity', 'roster'})
|
||||||
|
local _PRESENCE_MANAGED = set.new({'managed_entity', 'roster'})
|
||||||
|
local _TO_CHECK = {roster=_ALLOWED_ROSTER, message=_ALLOWED_MESSAGE, presence=_ALLOWED_PRESENCE}
|
||||||
|
local _PRIV_ENT_NS = 'urn:xmpp:privilege:2'
|
||||||
|
local _FORWARDED_NS = 'urn:xmpp:forward:0'
|
||||||
|
local _MODULE_HOST = module:get_host()
|
||||||
|
|
||||||
|
|
||||||
|
module:log("debug", "Loading privileged entity module ")
|
||||||
|
|
||||||
|
|
||||||
|
--> Permissions management <--
|
||||||
|
|
||||||
|
local config_priv = module:get_option("privileged_entities", {})
|
||||||
|
|
||||||
|
local function get_session_privileges(session, host)
|
||||||
|
if not session.privileges then return nil end
|
||||||
|
return session.privileges[host]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function advertise_perm(session, to_jid, perms)
|
||||||
|
-- send <message/> stanza to advertise permissions
|
||||||
|
-- as expained in § 4.2
|
||||||
|
local message = st.message({from=module.host, to=to_jid})
|
||||||
|
:tag("privilege", {xmlns=_PRIV_ENT_NS})
|
||||||
|
|
||||||
|
for _, perm in pairs({'roster', 'message', 'presence'}) do
|
||||||
|
if perms[perm] then
|
||||||
|
message:tag("perm", {access=perm, type=perms[perm]}):up()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local iq_perm = perms["iq"]
|
||||||
|
if iq_perm ~= nil then
|
||||||
|
local perm_el = st.stanza("perm", {access="iq"})
|
||||||
|
for namespace, ns_perm in pairs(iq_perm) do
|
||||||
|
local perm_type
|
||||||
|
if ns_perm.set and ns_perm.get then
|
||||||
|
perm_type = "both"
|
||||||
|
elseif ns_perm.set then
|
||||||
|
perm_type = "set"
|
||||||
|
elseif ns_perm.get then
|
||||||
|
perm_type = "get"
|
||||||
|
else
|
||||||
|
perm_type = nil
|
||||||
|
end
|
||||||
|
perm_el:tag("namespace", {ns=namespace, type=perm_type}):up()
|
||||||
|
end
|
||||||
|
message:add_child(perm_el)
|
||||||
|
end
|
||||||
|
session.send(message)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_presence_perm_set(to_jid, perms)
|
||||||
|
-- fill the presence sets according to perms
|
||||||
|
if _PRESENCE_MANAGED:contains(perms.presence) then
|
||||||
|
presence_man_ent:add(to_jid)
|
||||||
|
end
|
||||||
|
if perms.presence == 'roster' then
|
||||||
|
presence_roster:add(to_jid)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function advertise_presences(session, to_jid, perms)
|
||||||
|
-- send presence status for already connected entities
|
||||||
|
-- as explained in § 7.1
|
||||||
|
-- people in roster are probed only for active sessions
|
||||||
|
-- TODO: manage roster load for inactive sessions
|
||||||
|
if not perms.presence then return; end
|
||||||
|
local to_probe = {}
|
||||||
|
for _, user_session in pairs(full_sessions) do
|
||||||
|
if user_session.presence and _PRESENCE_MANAGED:contains(perms.presence) then
|
||||||
|
local presence = st.clone(user_session.presence)
|
||||||
|
presence.attr.to = to_jid
|
||||||
|
module:log("debug", "sending current presence for "..tostring(user_session.full_jid))
|
||||||
|
session.send(presence)
|
||||||
|
end
|
||||||
|
if perms.presence == "roster" then
|
||||||
|
-- we reset the cache to avoid to miss a presence that just changed
|
||||||
|
priv_session.last_presence = nil
|
||||||
|
|
||||||
|
if user_session.roster then
|
||||||
|
local bare_jid = jid.bare(user_session.full_jid)
|
||||||
|
for entity, item in pairs(user_session.roster) do
|
||||||
|
if entity~=false and entity~="pending" and (item.subscription=="both" or item.subscription=="to") then
|
||||||
|
local _, host = jid.split(entity)
|
||||||
|
if not hosts[host] then -- we don't probe jid from hosts we manage
|
||||||
|
-- using a table with entity as key avoid probing several time the same one
|
||||||
|
to_probe[entity] = bare_jid
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- now we probe peoples for "roster" presence permission
|
||||||
|
for probe_to, probe_from in pairs(to_probe) do
|
||||||
|
module:log("debug", "probing presence for %s (on behalf of %s)", tostring(probe_to), tostring(probe_from))
|
||||||
|
local probe = st.presence({from=probe_from, to=probe_to, type="probe"})
|
||||||
|
prosody.core_route_stanza(nil, probe)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function on_auth(event)
|
||||||
|
-- Check if entity is privileged according to configuration,
|
||||||
|
-- and set session.privileges accordingly
|
||||||
|
|
||||||
|
local session = event.session
|
||||||
|
local bare_jid = jid.join(session.username, session.host)
|
||||||
|
if not session.privileges then
|
||||||
|
session.privileges = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
local conf_ent_priv = config_priv[bare_jid]
|
||||||
|
local ent_priv = {}
|
||||||
|
if conf_ent_priv ~= nil then
|
||||||
|
module:log("debug", "Entity is privileged")
|
||||||
|
for perm_type, allowed_values in pairs(_TO_CHECK) do
|
||||||
|
local value = conf_ent_priv[perm_type]
|
||||||
|
if value ~= nil then
|
||||||
|
if not allowed_values:contains(value) then
|
||||||
|
module:log('warn', 'Invalid value for '..perm_type..' privilege: ['..value..']')
|
||||||
|
module:log('warn', 'Setting '..perm_type..' privilege to none')
|
||||||
|
ent_priv[perm_type] = nil
|
||||||
|
elseif value == 'none' then
|
||||||
|
ent_priv[perm_type] = nil
|
||||||
|
else
|
||||||
|
ent_priv[perm_type] = value
|
||||||
|
end
|
||||||
|
else
|
||||||
|
ent_priv[perm_type] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- extra checks for presence permission
|
||||||
|
if ent_priv.presence == 'roster' and not _ROSTER_GET_PERM:contains(ent_priv.roster) then
|
||||||
|
module:log("warn", "Can't allow roster presence privilege without roster \"get\" privilege")
|
||||||
|
module:log("warn", "Setting presence permission to none")
|
||||||
|
ent_priv.presence = nil
|
||||||
|
end
|
||||||
|
-- iq permission
|
||||||
|
local iq_perm_config = conf_ent_priv["iq"]
|
||||||
|
if iq_perm_config ~= nil then
|
||||||
|
local iq_perm = {}
|
||||||
|
ent_priv["iq"] = iq_perm
|
||||||
|
for ns, ns_perm_config in pairs(iq_perm_config) do
|
||||||
|
iq_perm[ns] = {
|
||||||
|
["get"] = ns_perm_config == "get" or ns_perm_config == "both",
|
||||||
|
["set"] = ns_perm_config == "set" or ns_perm_config == "both"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
else
|
||||||
|
ent_priv["iq"] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
if session.type == "component" then
|
||||||
|
-- we send the message stanza only for component
|
||||||
|
-- it will be sent at first <presence/> for other entities
|
||||||
|
advertise_perm(session, bare_jid, ent_priv)
|
||||||
|
set_presence_perm_set(bare_jid, ent_priv)
|
||||||
|
advertise_presences(session, bare_jid, ent_priv)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
session.privileges[_MODULE_HOST] = ent_priv
|
||||||
|
end
|
||||||
|
|
||||||
|
local function on_presence(event)
|
||||||
|
-- Permission are already checked at this point,
|
||||||
|
-- we only advertise them to the entity
|
||||||
|
local session = event.origin
|
||||||
|
local session_privileges = get_session_privileges(session, _MODULE_HOST)
|
||||||
|
if session_privileges then
|
||||||
|
advertise_perm(session, session.full_jid, session_privileges)
|
||||||
|
set_presence_perm_set(session.full_jid, session_privileges)
|
||||||
|
advertise_presences(session, session.full_jid, session_privileges)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function on_component_auth(event)
|
||||||
|
-- react to component-authenticated event from this host
|
||||||
|
-- and call the on_auth methods from all other hosts
|
||||||
|
-- needed for the component to get delegations advertising
|
||||||
|
for callback in connected_cb:items() do
|
||||||
|
callback(event)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if module:get_host_type() ~= "component" then
|
||||||
|
connected_cb:add(on_auth)
|
||||||
|
end
|
||||||
|
module:hook('authentication-success', on_auth)
|
||||||
|
module:hook('component-authenticated', on_component_auth)
|
||||||
|
module:hook('presence/initial', on_presence)
|
||||||
|
|
||||||
|
|
||||||
|
--> roster permission <--
|
||||||
|
|
||||||
|
-- get
|
||||||
|
module:hook("iq-get/bare/jabber:iq:roster:query", function(event)
|
||||||
|
local session, stanza = event.origin, event.stanza
|
||||||
|
if not stanza.attr.to then
|
||||||
|
-- we don't want stanzas addressed to /self
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local node, host = jid.split(stanza.attr.to)
|
||||||
|
local session_privileges = get_session_privileges(session, host)
|
||||||
|
|
||||||
|
if session_privileges and _ROSTER_GET_PERM:contains(session_privileges.roster) then
|
||||||
|
module:log("debug", "Roster get from allowed privileged entity received")
|
||||||
|
-- following code is adapted from mod_remote_roster
|
||||||
|
local roster = roster_manager.load_roster(node, host)
|
||||||
|
|
||||||
|
local reply = st.reply(stanza):query("jabber:iq:roster")
|
||||||
|
for entity_jid, item in pairs(roster) do
|
||||||
|
if entity_jid and entity_jid ~= "pending" then
|
||||||
|
reply:tag("item", {
|
||||||
|
jid = entity_jid,
|
||||||
|
subscription = item.subscription,
|
||||||
|
ask = item.ask,
|
||||||
|
name = item.name,
|
||||||
|
})
|
||||||
|
for group in pairs(item.groups) do
|
||||||
|
reply:tag("group"):text(group):up()
|
||||||
|
end
|
||||||
|
reply:up(); -- move out from item
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- end of code adapted from mod_remote_roster
|
||||||
|
session.send(reply)
|
||||||
|
else
|
||||||
|
module:log("warn", "Entity "..tostring(session.full_jid).." try to get roster without permission")
|
||||||
|
session.send(st.error_reply(stanza, 'auth', 'forbidden'))
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- set
|
||||||
|
module:hook("iq-set/bare/jabber:iq:roster:query", function(event)
|
||||||
|
local session, stanza = event.origin, event.stanza
|
||||||
|
if not stanza.attr.to then
|
||||||
|
-- we don't want stanzas addressed to /self
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local from_node, from_host = jid.split(stanza.attr.to)
|
||||||
|
local session_privileges = get_session_privileges(session, from_host)
|
||||||
|
|
||||||
|
if session_privileges and _ROSTER_SET_PERM:contains(session_privileges.roster) then
|
||||||
|
module:log("debug", "Roster set from allowed privileged entity received")
|
||||||
|
-- following code is adapted from mod_remote_roster
|
||||||
|
if not(usermanager_user_exists(from_node, from_host)) then return; end
|
||||||
|
local roster = roster_manager.load_roster(from_node, from_host)
|
||||||
|
if not(roster) then return; end
|
||||||
|
|
||||||
|
local query = stanza.tags[1]
|
||||||
|
for _, item in ipairs(query.tags) do
|
||||||
|
if item.name == "item"
|
||||||
|
and item.attr.xmlns == "jabber:iq:roster" and item.attr.jid
|
||||||
|
-- Protection against overwriting roster.pending, until we move it
|
||||||
|
and item.attr.jid ~= "pending" then
|
||||||
|
|
||||||
|
local item_jid = jid.prep(item.attr.jid)
|
||||||
|
local _, host, resource = jid.split(item_jid)
|
||||||
|
if not resource then
|
||||||
|
if item_jid ~= stanza.attr.to then -- not self-item_jid
|
||||||
|
if item.attr.subscription == "remove" then
|
||||||
|
local r_item = roster[item_jid]
|
||||||
|
if r_item then
|
||||||
|
roster[item_jid] = nil
|
||||||
|
if roster_manager.save_roster(from_node, from_host, roster) then
|
||||||
|
session.send(st.reply(stanza))
|
||||||
|
roster_manager.roster_push(from_node, from_host, item_jid)
|
||||||
|
else
|
||||||
|
roster[item_jid] = item
|
||||||
|
session.send(st.error_reply(stanza, "wait", "internal-server-error", "Unable to save roster"))
|
||||||
|
end
|
||||||
|
else
|
||||||
|
session.send(st.error_reply(stanza, "modify", "item-not-found"))
|
||||||
|
end
|
||||||
|
else
|
||||||
|
local subscription = item.attr.subscription
|
||||||
|
if subscription ~= "both" and subscription ~= "to" and subscription ~= "from" and subscription ~= "none" then -- TODO error on invalid
|
||||||
|
subscription = roster[item_jid] and roster[item_jid].subscription or "none"
|
||||||
|
end
|
||||||
|
local r_item = {name = item.attr.name, groups = {}}
|
||||||
|
if r_item.name == "" then r_item.name = nil; end
|
||||||
|
r_item.subscription = subscription
|
||||||
|
if subscription ~= "both" and subscription ~= "to" then
|
||||||
|
r_item.ask = roster[item_jid] and roster[item_jid].ask
|
||||||
|
end
|
||||||
|
for _, child in ipairs(item) do
|
||||||
|
if child.name == "group" then
|
||||||
|
local text = table.concat(child)
|
||||||
|
if text and text ~= "" then
|
||||||
|
r_item.groups[text] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local olditem = roster[item_jid]
|
||||||
|
roster[item_jid] = r_item
|
||||||
|
if roster_manager.save_roster(from_node, from_host, roster) then -- Ok, send success
|
||||||
|
session.send(st.reply(stanza))
|
||||||
|
-- and push change to all resources
|
||||||
|
roster_manager.roster_push(from_node, from_host, item_jid)
|
||||||
|
else -- Adding to roster failed
|
||||||
|
roster[item_jid] = olditem
|
||||||
|
session.send(st.error_reply(stanza, "wait", "internal-server-error", "Unable to save roster"))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else -- Trying to add self to roster
|
||||||
|
session.send(st.error_reply(stanza, "cancel", "not-allowed"))
|
||||||
|
end
|
||||||
|
else -- Invalid JID added to roster
|
||||||
|
module:log("warn", "resource: %s , host: %s", tostring(resource), tostring(host))
|
||||||
|
session.send(st.error_reply(stanza, "modify", "bad-request")); -- FIXME what's the correct error?
|
||||||
|
end
|
||||||
|
else -- Roster set didn't include a single item, or its name wasn't 'item'
|
||||||
|
session.send(st.error_reply(stanza, "modify", "bad-request"))
|
||||||
|
end
|
||||||
|
end -- for loop end
|
||||||
|
-- end of code adapted from mod_remote_roster
|
||||||
|
else -- The permission is not granted
|
||||||
|
module:log("warn", "Entity "..tostring(session.full_jid).." try to set roster without permission")
|
||||||
|
session.send(st.error_reply(stanza, 'auth', 'forbidden'))
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
--> message permission <--
|
||||||
|
|
||||||
|
local function clean_xmlns(node)
|
||||||
|
-- Recursively remove "jabber:client" attribute from node.
|
||||||
|
-- In Prosody internal routing, xmlns should not be set.
|
||||||
|
-- Keeping xmlns would lead to issues like mod_smacks ignoring the outgoing stanza,
|
||||||
|
-- so we remove all xmlns attributes with a value of "jabber:client"
|
||||||
|
if node.attr.xmlns == 'jabber:client' then
|
||||||
|
for childnode in node:childtags() do
|
||||||
|
clean_xmlns(childnode)
|
||||||
|
end
|
||||||
|
node.attr.xmlns = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module:hook("message/host", function(event)
|
||||||
|
local session, stanza = event.origin, event.stanza
|
||||||
|
local privilege_elt = stanza:get_child('privilege', _PRIV_ENT_NS)
|
||||||
|
if privilege_elt==nil then return; end
|
||||||
|
local _, to_host = jid.split(stanza.attr.to)
|
||||||
|
local session_privileges = get_session_privileges(session, to_host)
|
||||||
|
|
||||||
|
if session_privileges and session_privileges.message=="outgoing" then
|
||||||
|
if #privilege_elt.tags==1 and privilege_elt.tags[1].name == "forwarded"
|
||||||
|
and privilege_elt.tags[1].attr.xmlns==_FORWARDED_NS then
|
||||||
|
local message_elt = privilege_elt.tags[1]:get_child('message', 'jabber:client')
|
||||||
|
if message_elt ~= nil then
|
||||||
|
local username, from_host, from_resource = jid.split(message_elt.attr.from)
|
||||||
|
if from_resource == nil and hosts[from_host] then -- we only accept bare jids from one of the server hosts
|
||||||
|
clean_xmlns(message_elt); -- needed do to proper routing
|
||||||
|
local session = {
|
||||||
|
username = username;
|
||||||
|
host = from_host;
|
||||||
|
type = "c2s";
|
||||||
|
log = module._log;
|
||||||
|
}
|
||||||
|
-- at this point everything should be alright, we can send the message
|
||||||
|
prosody.core_post_stanza(session, message_elt, true)
|
||||||
|
else -- trying to send a message from a forbidden entity
|
||||||
|
module:log("warn", "Entity "..tostring(session.full_jid).." try to send a message from "..tostring(message_elt.attr.from))
|
||||||
|
session.send(st.error_reply(stanza, 'auth', 'forbidden'))
|
||||||
|
end
|
||||||
|
else -- incorrect message child
|
||||||
|
session.send(st.error_reply(stanza, "modify", "bad-request", "invalid forwarded <message/> element"))
|
||||||
|
end
|
||||||
|
else -- incorrect forwarded child
|
||||||
|
session.send(st.error_reply(stanza, "modify", "bad-request", "invalid <forwarded/> element"))
|
||||||
|
end
|
||||||
|
else -- The permission is not granted
|
||||||
|
module:log("warn", "Entity "..tostring(session.full_jid).." try to send message without permission")
|
||||||
|
session.send(st.error_reply(stanza, 'auth', 'forbidden'))
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
--> presence permission <--
|
||||||
|
|
||||||
|
local function same_tags(tag1, tag2)
|
||||||
|
-- check if two tags are equivalent
|
||||||
|
|
||||||
|
if tag1.name ~= tag2.name then return false; end
|
||||||
|
|
||||||
|
if #tag1 ~= #tag2 then return false; end
|
||||||
|
|
||||||
|
for name, value in pairs(tag1.attr) do
|
||||||
|
if tag2.attr[name] ~= value then return false; end
|
||||||
|
end
|
||||||
|
|
||||||
|
for i=1,#tag1 do
|
||||||
|
if type(tag1[i]) == "string" then
|
||||||
|
if tag1[i] ~= tag2[i] then return false; end
|
||||||
|
else
|
||||||
|
if not same_tags(tag1[i], tag2[i]) then return false; end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local function same_presences(presence1, presence2)
|
||||||
|
-- check that 2 <presence/> stanzas are equivalent (except for "to" attribute)
|
||||||
|
-- /!\ if the id change but everything else is equivalent, this method return false
|
||||||
|
-- this behaviour may change in the future
|
||||||
|
if presence1.attr.from ~= presence2.attr.from or presence1.attr.id ~= presence2.attr.id
|
||||||
|
or presence1.attr.type ~= presence2.attr.type then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
if presence1.attr.id and presence1.attr.id == presence2.attr.id then return true; end
|
||||||
|
|
||||||
|
if #presence1 ~= #presence2 then return false; end
|
||||||
|
|
||||||
|
for i=1,#presence1 do
|
||||||
|
if type(presence1[i]) == "string" then
|
||||||
|
if presence1[i] ~= presence2[i] then return false; end
|
||||||
|
else
|
||||||
|
if not same_tags(presence1[i], presence2[i]) then return false; end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local function forward_presence(presence, to_jid)
|
||||||
|
local presence_fwd = st.clone(presence)
|
||||||
|
presence_fwd.attr.to = to_jid
|
||||||
|
module:log("debug", "presence forwarded to "..to_jid..": "..tostring(presence_fwd))
|
||||||
|
module:send(presence_fwd)
|
||||||
|
-- cache used to avoid to send several times the same stanza
|
||||||
|
priv_session.last_presence = presence
|
||||||
|
end
|
||||||
|
|
||||||
|
module:hook("presence/bare", function(event)
|
||||||
|
if presence_man_ent:empty() and presence_roster:empty() then return; end
|
||||||
|
|
||||||
|
local stanza = event.stanza
|
||||||
|
if stanza.attr.type == nil or stanza.attr.type == "unavailable" then
|
||||||
|
if not stanza.attr.to then
|
||||||
|
for entity in presence_man_ent:items() do
|
||||||
|
if stanza.attr.from ~= entity then forward_presence(stanza, entity); end
|
||||||
|
end
|
||||||
|
else -- directed presence
|
||||||
|
-- we ignore directed presences from our own host, as we already have them
|
||||||
|
local _, from_host = jid.split(stanza.attr.from)
|
||||||
|
if hosts[from_host] then return; end
|
||||||
|
|
||||||
|
-- we don't send several time the same presence, as recommended in §7 #2
|
||||||
|
if priv_session.last_presence and same_presences(priv_session.last_presence, stanza) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
for entity in presence_roster:items() do
|
||||||
|
if stanza.attr.from ~= entity then forward_presence(stanza, entity); end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end, 150)
|
||||||
|
|
||||||
|
--> IQ permission <--
|
||||||
|
|
||||||
|
module:hook("iq/bare/".._PRIV_ENT_NS..":privileged_iq", function(event)
|
||||||
|
local session, stanza = event.origin, event.stanza
|
||||||
|
if not stanza.attr.to then
|
||||||
|
-- we don't want stanzas addressed to /self
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local from_node, from_host, from_resource = jid.split(stanza.attr.to)
|
||||||
|
|
||||||
|
if from_resource ~= nil or not usermanager_user_exists(from_node, from_host) then
|
||||||
|
session.send(
|
||||||
|
st.error_reply(
|
||||||
|
stanza,
|
||||||
|
"auth",
|
||||||
|
"forbidden",
|
||||||
|
"wrapping <IQ> stanza recipient must be a bare JID of a local user"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local session_privileges = get_session_privileges(session, from_host)
|
||||||
|
|
||||||
|
if session_privileges == nil then
|
||||||
|
session.send(
|
||||||
|
st.error_reply(
|
||||||
|
stanza,
|
||||||
|
"auth",
|
||||||
|
"forbidden",
|
||||||
|
"no privilege granted"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local iq_privileges = session_privileges["iq"]
|
||||||
|
if iq_privileges == nil then
|
||||||
|
session.send(
|
||||||
|
session.send(st.error_reply(stanza, "auth", "forbidden", "you are not allowed to send privileged <IQ> stanzas"))
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local privileged_iq = stanza:get_child("privileged_iq", _PRIV_ENT_NS)
|
||||||
|
|
||||||
|
local wrapped_iq = privileged_iq.tags[1]
|
||||||
|
if wrapped_iq == nil then
|
||||||
|
session.send(
|
||||||
|
st.error_reply(stanza, "auth", "forbidden", "missing <IQ> stanza to send")
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if wrapped_iq.attr.xmlns ~= "jabber:client" then
|
||||||
|
session.send(
|
||||||
|
st.error_reply(
|
||||||
|
stanza,
|
||||||
|
"auth",
|
||||||
|
"forbidden",
|
||||||
|
'wrapped <IQ> must have a xmlns of "jabber:client"'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
clean_xmlns(wrapped_iq)
|
||||||
|
|
||||||
|
if #wrapped_iq.tags ~= 1 then
|
||||||
|
session.send(
|
||||||
|
st.error_reply(
|
||||||
|
stanza,
|
||||||
|
"auth",
|
||||||
|
"forbidden",
|
||||||
|
'invalid payload in wrapped <IQ>'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local payload = wrapped_iq.tags[1]
|
||||||
|
|
||||||
|
local priv_ns = payload.attr.xmlns
|
||||||
|
if priv_ns == nil then
|
||||||
|
session.send(
|
||||||
|
st.error_reply(stanza, "auth", "forbidden", "xmlns not set in privileged <IQ>")
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local ns_perms = iq_privileges[priv_ns]
|
||||||
|
local iq_type = stanza.attr.type
|
||||||
|
if ns_perms == nil or iq_type == nil or not ns_perms[iq_type] then
|
||||||
|
session.send(
|
||||||
|
session.send(st.error_reply(
|
||||||
|
stanza,
|
||||||
|
"auth",
|
||||||
|
"forbidden",
|
||||||
|
"you are not allowed to send privileged <IQ> stanzas of this type and namespace")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if wrapped_iq.attr.from ~= nil and wrapped_iq.attr.from ~= stanza.attr.to then
|
||||||
|
session.send(
|
||||||
|
st.error_reply(
|
||||||
|
stanza,
|
||||||
|
"auth",
|
||||||
|
"forbidden",
|
||||||
|
'wrapped <IQ> "from" attribute is inconsistent with main <IQ> "to" attribute'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
wrapped_iq.attr.from = stanza.attr.to
|
||||||
|
|
||||||
|
|
||||||
|
if wrapped_iq.attr.type ~= iq_type then
|
||||||
|
session.send(
|
||||||
|
st.error_reply(
|
||||||
|
stanza,
|
||||||
|
"auth",
|
||||||
|
"forbidden",
|
||||||
|
'invalid wrapped <IQ>: type mismatch'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if wrapped_iq.attr.id == nil then
|
||||||
|
session.send(
|
||||||
|
st.error_reply(
|
||||||
|
stanza,
|
||||||
|
"auth",
|
||||||
|
"forbidden",
|
||||||
|
'invalid wrapped <IQ>: missing "id" attribute'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- at this point, wrapped_iq is considered valid, and privileged entity is allowed to send it
|
||||||
|
local username, from_host, _ = jid.split(wrapped_iq.attr.from)
|
||||||
|
local newsession = {
|
||||||
|
username = username;
|
||||||
|
host = from_host;
|
||||||
|
full_jid = stanza.attr.to;
|
||||||
|
type = "c2s";
|
||||||
|
log = module._log;
|
||||||
|
}
|
||||||
|
|
||||||
|
module:send_iq(wrapped_iq,newsession)
|
||||||
|
:next(function (response)
|
||||||
|
local reply = st.reply(stanza);
|
||||||
|
response.stanza.attr.xmlns = 'jabber:client'
|
||||||
|
reply:tag("privilege", {xmlns = _PRIV_ENT_NS})
|
||||||
|
:tag("forwarded", {xmlns = _FORWARDED_NS})
|
||||||
|
:add_child(response.stanza)
|
||||||
|
reply.attr.type = response.stanza.attr.type;
|
||||||
|
session.send(reply)
|
||||||
|
end,
|
||||||
|
function(response)
|
||||||
|
module:log("error", "Error while sending privileged <IQ>: %s", response);
|
||||||
|
session.send(
|
||||||
|
st.error_reply(
|
||||||
|
stanza,
|
||||||
|
"cancel",
|
||||||
|
"internal-server-error"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
end)
|
||||||
|
|
||||||
|
return true
|
||||||
|
end)
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Кастомный образ slidgram с поддержкой SOCKS5-прокси для маршрутизации Telegram
|
||||||
|
# через VPS01 (SSH-туннель SOCKS5 172.27.0.1:1080, вне РФ).
|
||||||
|
# Базовый: codeberg.org/slidge/slidgram:latest
|
||||||
|
# Примечание: pysocks (модуль `socks`) УЖЕ есть в базовом образе (PySocks-1.7.1).
|
||||||
|
|
||||||
|
FROM codeberg.org/slidge/slidgram:latest
|
||||||
|
|
||||||
|
# Патч: добавить поддержку прокси в slidgram
|
||||||
|
COPY patch-telegram.py /tmp/patch-telegram.py
|
||||||
|
COPY patch-gateway.py /tmp/patch-gateway.py
|
||||||
|
RUN python /tmp/patch-telegram.py && python /tmp/patch-gateway.py
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Патч slidgram/gateway.py: передать SOCKS5-прокси из env SLIDGRAM_PROXY в Client при регистрации."""
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
p = Path("/venv/lib/python3.13/site-packages/slidgram/gateway.py")
|
||||||
|
src = p.read_text()
|
||||||
|
|
||||||
|
old = ''' tg_client = Client(
|
||||||
|
str(user_jid.bare),
|
||||||
|
phone_number=phone,
|
||||||
|
api_id=registration_form.get("api_id") or config.API_ID,
|
||||||
|
api_hash=registration_form.get("api_hash") or config.API_HASH,
|
||||||
|
workdir=global_config.HOME_DIR,
|
||||||
|
)
|
||||||
|
'''
|
||||||
|
new = ''' _proxy = None
|
||||||
|
_proxy_url = __import__("os").environ.get("SLIDGRAM_PROXY", "")
|
||||||
|
if _proxy_url and _proxy_url.startswith("socks5://"):
|
||||||
|
_h = _proxy_url.split("://", 1)[1]
|
||||||
|
_host, _, _port = _h.partition(":")
|
||||||
|
_proxy = dict(scheme="socks5", hostname=_host, port=int(_port))
|
||||||
|
tg_client = Client(
|
||||||
|
str(user_jid.bare),
|
||||||
|
phone_number=phone,
|
||||||
|
api_id=registration_form.get("api_id") or config.API_ID,
|
||||||
|
api_hash=registration_form.get("api_hash") or config.API_HASH,
|
||||||
|
workdir=global_config.HOME_DIR,
|
||||||
|
proxy=_proxy,
|
||||||
|
)
|
||||||
|
'''
|
||||||
|
assert old in src, "gateway.py: шаблон не найден"
|
||||||
|
p.write_text(src.replace(old, new, 1))
|
||||||
|
print("gateway.py patched OK")
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Патч slidgram/telegram.py: прокинуть SOCKS5-прокси из env SLIDGRAM_PROXY в Client."""
|
||||||
|
import re
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
p = Path("/venv/lib/python3.13/site-packages/slidgram/telegram.py")
|
||||||
|
src = p.read_text()
|
||||||
|
|
||||||
|
old = ''' def __init__(self, name: str) -> None:
|
||||||
|
super().__init__(name, workdir=str(global_config.HOME_DIR))
|
||||||
|
'''
|
||||||
|
new = ''' def __init__(self, name: str) -> None:
|
||||||
|
import os
|
||||||
|
_proxy = None
|
||||||
|
_proxy_url = os.environ.get("SLIDGRAM_PROXY", "")
|
||||||
|
if _proxy_url and _proxy_url.startswith("socks5://"):
|
||||||
|
_h = _proxy_url.split("://", 1)[1]
|
||||||
|
_host, _, _port = _h.partition(":")
|
||||||
|
_proxy = dict(scheme="socks5", hostname=_host, port=int(_port))
|
||||||
|
super().__init__(name, workdir=str(global_config.HOME_DIR), proxy=_proxy)
|
||||||
|
'''
|
||||||
|
assert old in src, "telegram.py: шаблон не найден"
|
||||||
|
p.write_text(src.replace(old, new, 1))
|
||||||
|
print("telegram.py patched OK")
|
||||||
Reference in New Issue
Block a user