Add CLI preview and apply command for invitation permissions

This commit is contained in:
evgeny committed 2026-11-03 16:19:12 +01:00
1 parent a1653d648b
commit 34df38da5a
2 files changed
+18

No files matched your search

+10
View File
@@ -126,6 +126,15 @@ def cmd_invite(ch_id, node_id=None):
def cmd_invite_nodes(ch_id):
_req("invite_nodes", ch=ch_id)
def cmd_group_policy(args):
if len(args) < 2 or len(args) > 4 or args[1] not in ("admins", "all"):
_die("usage: group_policy <ch_id> <admins|all> [preview_token [keep_id,keep_id,...]]")
params = {"ch": args[0], "all_members": int(args[1] == "all")}
if len(args) >= 3:
params["token"] = args[2]
params["keep"] = json.dumps(args[3].split(",") if len(args) == 4 and args[3] else [])
_req("group_policy", **params)
def cmd_connect(link):
_req("connect", link=link)
@@ -286,6 +295,7 @@ def main():
cmd_attach(args[1], path, as_video)
elif cmd == "invite": cmd_invite(*args[1:3] if len(args) > 1 else (_die("usage: invite <ch_id> [node_id]"),))
elif cmd == "invite_nodes": cmd_invite_nodes(*args[1:2] if len(args) > 1 else (_die("usage: invite_nodes <ch_id>"),))
elif cmd == "group_policy": cmd_group_policy(args[1:])
elif cmd == "server_link": _req("server_link")
elif cmd == "server_add": cmd_server_add(*args[1:3] if len(args) > 2 else (_die("usage: server_add <ch_id> <utun://...>"),))
elif cmd in ("connect","join"): cmd_connect(*args[1:2] if len(args) > 1 else (_die("usage: connect <utun://...>"),))
+8
View File
@@ -167,3 +167,11 @@ status содержит свой показываемый PIN (pin), ожида
Состояния:1 ждёт PIN,2 проверяет,3 передаёт ключи,4 импорт подтверждён,5 отказ,6 истёк,7 результат неизвестен,
8 ждёт ответный PIN,9 проверяет ответный PIN,10 получатель ждёт ключи после проверки второго PIN.
Остановка сервиса отменяет ожидания; сохранённые ключи и квитанции импорта переживают перезапуск.
group_policy <ch_id> <admins|all> [preview_token [keep_id,keep_id,...]]
Без token: текущий режим, can_edit, Merkle token и список affected для предложенного режима.
С token: атомарно переподписать выбранные decimal node ID ключом группы и сохранить режим.
admins — только владелец/администраторы (по умолчанию); all — все действующие участники.
Только обладатель приватного ключа группы меняет настройку. При conflict получить свежий preview.
После перехода на admins неподходящие цепочки теряют доступ при следующей завершённой MEMBERS сверке.
Headless JSON: cmd=group_policy, ch=decimal, all_members=0/1, token=hex (необязательно), keep="[\"decimal\",...]".