1414#define TOTP_CLI_COMMAND_ADD_ARG_DIGITS "digits"
1515#define TOTP_CLI_COMMAND_ADD_ARG_DIGITS_PREFIX "-d"
1616#define TOTP_CLI_COMMAND_ADD_ARG_UNSECURE_PREFIX "-u"
17+ #define TOTP_CLI_COMMAND_ADD_ARG_DURATION "duration"
18+ #define TOTP_CLI_COMMAND_ADD_ARG_DURATION_PREFIX "-l"
1719
1820static bool token_info_set_algo_from_str (TokenInfo * token_info , const FuriString * str ) {
1921 if (furi_string_cmpi_str (str , TOTP_CONFIG_TOKEN_ALGO_SHA1_NAME ) == 0 ) {
@@ -34,6 +36,16 @@ static bool token_info_set_algo_from_str(TokenInfo* token_info, const FuriString
3436 return false;
3537}
3638
39+ static bool args_read_uint8_and_trim (FuriString * args , uint8_t * value ) {
40+ int int_value ;
41+ if (!args_read_int_and_trim (args , & int_value ) || int_value < 0 || int_value > UINT8_MAX ) {
42+ return false;
43+ }
44+
45+ * value = (uint8_t )int_value ;
46+ return true;
47+ }
48+
3749void totp_cli_command_add_docopt_commands () {
3850 TOTP_CLI_PRINTF (" " TOTP_CLI_COMMAND_ADD ", " TOTP_CLI_COMMAND_ADD_ALT
3951 ", " TOTP_CLI_COMMAND_ADD_ALT2 " Add new token\r\n" );
@@ -42,11 +54,11 @@ void totp_cli_command_add_docopt_commands() {
4254void totp_cli_command_add_docopt_usage () {
4355 TOTP_CLI_PRINTF (
4456 " " TOTP_CLI_COMMAND_NAME
45- " " DOCOPT_REQUIRED (TOTP_CLI_COMMAND_ADD " | " TOTP_CLI_COMMAND_ADD_ALT " | " TOTP_CLI_COMMAND_ADD_ALT2 ) " " DOCOPT_ARGUMENT(TOTP_CLI_COMMAND_ADD_ARG_NAME) " " DOCOPT_OPTIONAL(
57+ " " DOCOPT_REQUIRED (TOTP_CLI_COMMAND_ADD " | " TOTP_CLI_COMMAND_ADD_ALT " | " TOTP_CLI_COMMAND_ADD_ALT2 ) " " DOCOPT_ARGUMENT(TOTP_CLI_COMMAND_ADD_ARG_NAME) " " DOCOPT_OPTIONAL(DOCOPT_OPTION(TOTP_CLI_COMMAND_ADD_ARG_ALGO_PREFIX, DOCOPT_ARGUMENT(TOTP_CLI_COMMAND_ADD_ARG_ALGO))) " " DOCOPT_OPTIONAL(
4658 DOCOPT_OPTION (
47- TOTP_CLI_COMMAND_ADD_ARG_ALGO_PREFIX ,
59+ TOTP_CLI_COMMAND_ADD_ARG_DIGITS_PREFIX ,
4860 DOCOPT_ARGUMENT (
49- TOTP_CLI_COMMAND_ADD_ARG_ALGO ))) " " DOCOPT_OPTIONAL (DOCOPT_OPTION (TOTP_CLI_COMMAND_ADD_ARG_DIGITS_PREFIX , DOCOPT_ARGUMENT (TOTP_CLI_COMMAND_ADD_ARG_DIGITS ))) " " DOCOPT_OPTIONAL (DOCOPT_SWITCH (TOTP_CLI_COMMAND_ADD_ARG_UNSECURE_PREFIX )) "\r\n" );
61+ TOTP_CLI_COMMAND_ADD_ARG_DIGITS ))) " " DOCOPT_OPTIONAL (DOCOPT_OPTION (TOTP_CLI_COMMAND_ADD_ARG_DURATION_PREFIX , DOCOPT_ARGUMENT (TOTP_CLI_COMMAND_ADD_ARG_DURATION ))) " " DOCOPT_OPTIONAL (DOCOPT_SWITCH (TOTP_CLI_COMMAND_ADD_ARG_UNSECURE_PREFIX )) "\r\n" );
5062}
5163
5264void totp_cli_command_add_docopt_arguments () {
@@ -64,6 +76,10 @@ void totp_cli_command_add_docopt_options() {
6476 TOTP_CLI_COMMAND_ADD_ARG_DIGITS_PREFIX ,
6577 DOCOPT_ARGUMENT (
6678 TOTP_CLI_COMMAND_ADD_ARG_DIGITS )) " Number of digits to generate, one of: 6, 8 " DOCOPT_DEFAULT ("6" ) "\r\n" );
79+ TOTP_CLI_PRINTF (" " DOCOPT_OPTION (
80+ TOTP_CLI_COMMAND_ADD_ARG_DURATION_PREFIX ,
81+ DOCOPT_ARGUMENT (
82+ TOTP_CLI_COMMAND_ADD_ARG_DURATION )) " Token lifetime duration in seconds, between: 15 and 255 " DOCOPT_DEFAULT ("30" ) "\r\n" );
6783 TOTP_CLI_PRINTF (" " DOCOPT_SWITCH (
6884 TOTP_CLI_COMMAND_ADD_ARG_UNSECURE_PREFIX ) " Show console user input as-is without masking\r\n" );
6985}
@@ -110,16 +126,30 @@ void totp_cli_command_add_handle(PluginState* plugin_state, FuriString* args, Cl
110126 parsed = true;
111127 }
112128 } else if (furi_string_cmpi_str (temp_str , TOTP_CLI_COMMAND_ADD_ARG_DIGITS_PREFIX ) == 0 ) {
113- if (!args_read_string_and_trim (args , temp_str )) {
129+ uint8_t digit_value ;
130+ if (!args_read_uint8_and_trim (args , & digit_value )) {
114131 TOTP_CLI_PRINTF (
115- "Missed value for argument \"" TOTP_CLI_COMMAND_ADD_ARG_DIGITS_PREFIX
132+ "Missed or incorrect value for argument \"" TOTP_CLI_COMMAND_ADD_ARG_DIGITS_PREFIX
116133 "\"\r\n" );
117- } else if (!token_info_set_digits_from_int (
118- token_info , CONVERT_CHAR_TO_DIGIT (furi_string_get_char (temp_str , 0 )))) {
134+ } else if (!token_info_set_digits_from_int (token_info , digit_value )) {
119135 TOTP_CLI_PRINTF (
120- "\"%s \" is incorrect value for argument \"" TOTP_CLI_COMMAND_ADD_ARG_DIGITS_PREFIX
136+ "\"%" PRIu8 " \" is incorrect value for argument \"" TOTP_CLI_COMMAND_ADD_ARG_DIGITS_PREFIX
121137 "\"\r\n" ,
122- furi_string_get_cstr (temp_str ));
138+ digit_value );
139+ } else {
140+ parsed = true;
141+ }
142+ } else if (furi_string_cmpi_str (temp_str , TOTP_CLI_COMMAND_ADD_ARG_DURATION_PREFIX ) == 0 ) {
143+ uint8_t duration_value ;
144+ if (!args_read_uint8_and_trim (args , & duration_value )) {
145+ TOTP_CLI_PRINTF (
146+ "Missed or incorrect value for argument \"" TOTP_CLI_COMMAND_ADD_ARG_DURATION_PREFIX
147+ "\"\r\n" );
148+ } else if (!token_info_set_duration_from_int (token_info , duration_value )) {
149+ TOTP_CLI_PRINTF (
150+ "\"%" PRIu8 "\" is incorrect value for argument \"" TOTP_CLI_COMMAND_ADD_ARG_DURATION_PREFIX
151+ "\"\r\n" ,
152+ duration_value );
123153 } else {
124154 parsed = true;
125155 }
0 commit comments