diff --git a/tools/chatcli b/tools/chatcli index edf65363c..459e21915 100755 --- a/tools/chatcli +++ b/tools/chatcli @@ -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 [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 [node_id]"),)) elif cmd == "invite_nodes": cmd_invite_nodes(*args[1:2] if len(args) > 1 else (_die("usage: invite_nodes "),)) + 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 "),)) elif cmd in ("connect","join"): cmd_connect(*args[1:2] if len(args) > 1 else (_die("usage: connect "),)) diff --git a/tools/chatcli_commands.txt b/tools/chatcli_commands.txt index a245f5ce6..1b04589dc 100644 --- a/tools/chatcli_commands.txt +++ b/tools/chatcli_commands.txt @@ -167,3 +167,11 @@ status содержит свой показываемый PIN (pin), ожида Состояния:1 ждёт PIN,2 проверяет,3 передаёт ключи,4 импорт подтверждён,5 отказ,6 истёк,7 результат неизвестен, 8 ждёт ответный PIN,9 проверяет ответный PIN,10 получатель ждёт ключи после проверки второго PIN. Остановка сервиса отменяет ожидания; сохранённые ключи и квитанции импорта переживают перезапуск. +group_policy [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\",...]". +