X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/58bb4b5358c798b7dd832e55a320891f3ec5d280..15c9d047033f2dd64a677aca8139a3ecd34e9472:/client/src/cli.rs diff --git a/client/src/cli.rs b/client/src/cli.rs index f211bb20..dea3a7df 100644 --- a/client/src/cli.rs +++ b/client/src/cli.rs @@ -1,221 +1,278 @@ -use clap::{crate_version, ArgEnum, Parser, Subcommand}; use std::{ffi::OsString, net::SocketAddr}; +use clap::{crate_version, Parser, Subcommand, ValueEnum}; + /// JSON-RPC client for signal-cli #[derive(Parser, Debug)] -#[clap(rename_all = "kebab-case", version=crate_version!())] +#[command(rename_all = "kebab-case", version = crate_version!())] pub struct Cli { /// Account to use (for daemon in multi-account mode) - #[clap(short = 'a', long)] + #[arg(short = 'a', long)] pub account: Option, /// TCP host and port of signal-cli daemon - #[clap(long)] + #[arg(long, conflicts_with = "json_rpc_http")] pub json_rpc_tcp: Option>, /// UNIX socket address and port of signal-cli daemon - #[clap(long)] + #[arg(long, conflicts_with = "json_rpc_tcp")] pub json_rpc_socket: Option>, - #[clap(arg_enum, long, default_value_t = OutputTypes::Json)] - pub output: OutputTypes, + /// HTTP URL of signal-cli daemon + #[arg(long, conflicts_with = "json_rpc_socket")] + pub json_rpc_http: Option>, - #[clap(long)] + #[arg(long)] pub verbose: bool, - #[clap(subcommand)] + #[command(subcommand)] pub command: CliCommands, } -#[derive(ArgEnum, Clone, Debug)] -#[clap(rename_all = "kebab-case")] -pub enum OutputTypes { - PlainText, - Json, -} - #[allow(clippy::large_enum_variant)] #[derive(Subcommand, Debug)] -#[clap(rename_all = "camelCase", version=crate_version!())] +#[command(rename_all = "camelCase", version = crate_version!())] pub enum CliCommands { AddDevice { - #[clap(long)] + #[arg(long)] uri: String, }, - #[clap(rename_all = "kebab-case")] + AddStickerPack { + #[arg(long)] + uri: String, + }, + #[command(rename_all = "kebab-case")] Block { recipient: Vec, - #[clap(short = 'g', long)] + #[arg(short = 'g', long)] group_id: Vec, }, DeleteLocalAccountData { - #[clap(long = "ignore-registered")] + #[arg(long = "ignore-registered")] ignore_registered: Option, }, + FinishChangeNumber { + number: String, + #[arg(short = 'v', long = "verification-code")] + verification_code: String, + + #[arg(short = 'p', long)] + pin: Option, + }, + GetAttachment { + #[arg(long)] + id: String, + #[arg(long)] + recipient: Option, + #[arg(short = 'g', long = "group-id")] + group_id: Option, + }, GetUserStatus { recipient: Vec, }, JoinGroup { - #[clap(long)] + #[arg(long)] uri: String, }, Link { - #[clap(short = 'n', long)] + #[arg(short = 'n', long)] name: String, }, ListAccounts, ListContacts { recipient: Vec, - #[clap(short = 'a', long = "all-recipients")] + #[arg(short = 'a', long = "all-recipients")] all_recipients: bool, - #[clap(long)] + #[arg(long)] blocked: Option, - #[clap(long)] + #[arg(long)] name: Option, }, ListDevices, ListGroups { - #[clap(short = 'd', long)] + #[arg(short = 'd', long)] detailed: bool, - #[clap(short = 'g', long = "group-id")] + #[arg(short = 'g', long = "group-id")] group_id: Vec, }, ListIdentities { - #[clap(short = 'n', long)] + #[arg(short = 'n', long)] number: Option, }, ListStickerPacks, QuitGroup { - #[clap(short = 'g', long = "group-id")] + #[arg(short = 'g', long = "group-id")] group_id: String, - #[clap(long)] + #[arg(long)] delete: bool, - #[clap(long)] + #[arg(long)] admin: Vec, }, Receive { - #[clap(short = 't', long, default_value_t = 3.0)] + #[arg(short = 't', long, default_value_t = 3.0)] timeout: f64, }, Register { - #[clap(short = 'v', long)] + #[arg(short = 'v', long)] voice: bool, - #[clap(long)] + #[arg(long)] captcha: Option, }, RemoveContact { recipient: String, - #[clap(long)] + #[arg(long)] forget: bool, + #[arg(long)] + hide: bool, }, RemoveDevice { - #[clap(short = 'd', long = "device-id")] + #[arg(short = 'd', long = "device-id")] device_id: u32, }, RemovePin, RemoteDelete { - #[clap(short = 't', long = "target-timestamp")] + #[arg(short = 't', long = "target-timestamp")] target_timestamp: u64, recipient: Vec, - #[clap(short = 'g', long = "group-id")] + #[arg(short = 'g', long = "group-id")] group_id: Vec, - #[clap(long = "note-to-self")] + #[arg(long = "note-to-self")] note_to_self: bool, }, - #[clap(rename_all = "kebab-case")] + #[command(rename_all = "kebab-case")] Send { recipient: Vec, - #[clap(short = 'g', long)] + #[arg(short = 'g', long)] group_id: Vec, - #[clap(long)] + #[arg(long)] note_to_self: bool, - #[clap(short = 'e', long)] + #[arg(short = 'e', long)] end_session: bool, - #[clap(short = 'm', long)] + #[arg(short = 'm', long)] message: Option, - #[clap(short = 'a', long)] + #[arg(short = 'a', long)] attachment: Vec, - #[clap(long)] + #[arg(long)] mention: Vec, - #[clap(long)] + #[arg(long)] + text_style: Vec, + + #[arg(long)] quote_timestamp: Option, - #[clap(long)] + #[arg(long)] quote_author: Option, - #[clap(long)] + #[arg(long)] quote_message: Option, - #[clap(long)] + #[arg(long)] quote_mention: Vec, - #[clap(long)] + #[arg(long)] + quote_text_style: Vec, + + #[arg(long)] + quote_attachment: Vec, + + #[arg(long)] + preview_url: Option, + + #[arg(long)] + preview_title: Option, + + #[arg(long)] + preview_description: Option, + + #[arg(long)] + preview_image: Option, + + #[arg(long)] sticker: Option, + + #[arg(long)] + story_timestamp: Option, + + #[arg(long)] + story_author: Option, + + #[arg(long)] + edit_timestamp: Option, }, SendContacts, SendPaymentNotification { recipient: String, - #[clap(long)] + #[arg(long)] receipt: String, - #[clap(long)] + #[arg(long)] note: String, }, SendReaction { recipient: Vec, - #[clap(short = 'g', long = "group-id")] + #[arg(short = 'g', long = "group-id")] group_id: Vec, - #[clap(long = "note-to-self")] + #[arg(long = "note-to-self")] note_to_self: bool, - #[clap(short = 'e', long)] + #[arg(short = 'e', long)] emoji: String, - #[clap(short = 'a', long = "target-author")] + #[arg(short = 'a', long = "target-author")] target_author: String, - #[clap(short = 't', long = "target-timestamp")] + #[arg(short = 't', long = "target-timestamp")] target_timestamp: u64, - #[clap(short = 'r', long)] + #[arg(short = 'r', long)] remove: bool, + + #[arg(long)] + story: bool, }, SendReceipt { recipient: String, - #[clap(short = 't', long = "target-timestamp")] + #[arg(short = 't', long = "target-timestamp")] target_timestamp: Vec, - #[clap(arg_enum, long)] + #[arg(value_enum, long)] r#type: ReceiptType, }, SendSyncRequest, SendTyping { recipient: Vec, - #[clap(short = 'g', long = "group-id")] + #[arg(short = 'g', long = "group-id")] group_id: Vec, - #[clap(short = 's', long)] + #[arg(short = 's', long)] stop: bool, }, SetPin { pin: String, }, + StartChangeNumber { + number: String, + #[arg(short = 'v', long)] + voice: bool, + #[arg(long)] + captcha: Option, + }, SubmitRateLimitChallenge { challenge: String, captcha: String, @@ -223,118 +280,120 @@ pub enum CliCommands { Trust { recipient: String, - #[clap(short = 'a', long = "trust-all-known-keys")] + #[arg(short = 'a', long = "trust-all-known-keys")] trust_all_known_keys: bool, - #[clap(short = 'v', long = "verified-safety-number")] + #[arg(short = 'v', long = "verified-safety-number")] verified_safety_number: Option, }, - #[clap(rename_all = "kebab-case")] + #[command(rename_all = "kebab-case")] Unblock { recipient: Vec, - #[clap(short = 'g', long)] + #[arg(short = 'g', long)] group_id: Vec, }, Unregister { - #[clap(long = "delete-account")] + #[arg(long = "delete-account")] delete_account: bool, }, UpdateAccount { - #[clap(short = 'n', long = "device-name")] + #[arg(short = 'n', long = "device-name")] device_name: Option, + #[arg(long = "unrestricted-unidentified-sender")] + unrestricted_unidentified_sender: Option, }, UpdateConfiguration { - #[clap(long = "read-receipts")] + #[arg(long = "read-receipts")] read_receipts: Option, - #[clap(long = "unidentified-delivery-indicators")] + #[arg(long = "unidentified-delivery-indicators")] unidentified_delivery_indicators: Option, - #[clap(long = "typing-indicators")] + #[arg(long = "typing-indicators")] typing_indicators: Option, - #[clap(long = "link-previews")] + #[arg(long = "link-previews")] link_previews: Option, }, UpdateContact { recipient: String, - #[clap(short = 'e', long)] + #[arg(short = 'e', long)] expiration: Option, - #[clap(short = 'n', long)] + #[arg(short = 'n', long)] name: Option, }, UpdateGroup { - #[clap(short = 'g', long = "group-id")] + #[arg(short = 'g', long = "group-id")] group_id: Option, - #[clap(short = 'n', long)] + #[arg(short = 'n', long)] name: Option, - #[clap(short = 'd', long)] + #[arg(short = 'd', long)] description: Option, - #[clap(short = 'a', long)] + #[arg(short = 'a', long)] avatar: Option, - #[clap(short = 'm', long)] + #[arg(short = 'm', long)] member: Vec, - #[clap(short = 'r', long = "remove-member")] + #[arg(short = 'r', long = "remove-member")] remove_member: Vec, - #[clap(long)] + #[arg(long)] admin: Vec, - #[clap(long = "remove-admin")] + #[arg(long = "remove-admin")] remove_admin: Vec, - #[clap(long)] + #[arg(long)] ban: Vec, - #[clap(long)] + #[arg(long)] unban: Vec, - #[clap(long = "reset-link")] + #[arg(long = "reset-link")] reset_link: bool, - #[clap(arg_enum, long)] + #[arg(value_enum, long)] link: Option, - #[clap(arg_enum, long = "set-permission-add-member")] + #[arg(value_enum, long = "set-permission-add-member")] set_permission_add_member: Option, - #[clap(arg_enum, long = "set-permission-edit-details")] + #[arg(value_enum, long = "set-permission-edit-details")] set_permission_edit_details: Option, - #[clap(arg_enum, long = "set-permission-send-messages")] + #[arg(value_enum, long = "set-permission-send-messages")] set_permission_send_messages: Option, - #[clap(short = 'e', long)] + #[arg(short = 'e', long)] expiration: Option, }, UpdateProfile { - #[clap(long = "given-name")] + #[arg(long = "given-name")] given_name: Option, - #[clap(long = "family-name")] + #[arg(long = "family-name")] family_name: Option, - #[clap(long)] + #[arg(long)] about: Option, - #[clap(long = "about-emoji")] + #[arg(long = "about-emoji")] about_emoji: Option, - #[clap(long = "mobile-coin-address")] + #[arg(long = "mobile-coin-address")] mobile_coin_address: Option, - #[clap(long)] + #[arg(long)] avatar: Option, - #[clap(long = "remove-avatar")] + #[arg(long = "remove-avatar")] remove_avatar: bool, }, UploadStickerPack { @@ -343,29 +402,29 @@ pub enum CliCommands { Verify { verification_code: String, - #[clap(short = 'p', long)] + #[arg(short = 'p', long)] pin: Option, }, Version, } -#[derive(ArgEnum, Clone, Debug)] -#[clap(rename_all = "kebab-case")] +#[derive(ValueEnum, Clone, Debug)] +#[value(rename_all = "kebab-case")] pub enum ReceiptType { Read, Viewed, } -#[derive(ArgEnum, Clone, Debug)] -#[clap(rename_all = "kebab-case")] +#[derive(ValueEnum, Clone, Debug)] +#[value(rename_all = "kebab-case")] pub enum LinkState { Enabled, EnabledWithApproval, Disabled, } -#[derive(ArgEnum, Clone, Debug)] -#[clap(rename_all = "kebab-case")] +#[derive(ValueEnum, Clone, Debug)] +#[value(rename_all = "kebab-case")] pub enum GroupPermission { EveryMember, OnlyAdmins,