common_command_arguments.c 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include "common_command_arguments.h"
  2. #include <lib/toolbox/args.h>
  3. void totp_cli_printf_missed_argument_value(char* arg) {
  4. TOTP_CLI_PRINTF_ERROR("Missed or incorrect value for argument \"%s\"\r\n", arg);
  5. }
  6. void totp_cli_printf_unknown_argument(const FuriString* arg) {
  7. TOTP_CLI_PRINTF("Unknown argument \"%s\"\r\n", furi_string_get_cstr(arg));
  8. }
  9. bool totp_cli_try_read_algo(TokenInfo* token_info, FuriString* arg, FuriString* args, bool* parsed) {
  10. if(furi_string_cmpi_str(arg, TOTP_CLI_COMMAND_ARG_ALGO_PREFIX) == 0) {
  11. if(!args_read_string_and_trim(args, arg)) {
  12. totp_cli_printf_missed_argument_value(TOTP_CLI_COMMAND_ARG_ALGO_PREFIX);
  13. } else if(!token_info_set_algo_from_str(token_info, arg)) {
  14. TOTP_CLI_PRINTF_ERROR(
  15. "\"%s\" is incorrect value for argument \"" TOTP_CLI_COMMAND_ARG_ALGO_PREFIX
  16. "\"\r\n",
  17. furi_string_get_cstr(arg));
  18. } else {
  19. *parsed = true;
  20. }
  21. return true;
  22. }
  23. return false;
  24. }
  25. bool totp_cli_try_read_digits(
  26. TokenInfo* token_info,
  27. const FuriString* arg,
  28. FuriString* args,
  29. bool* parsed) {
  30. if(furi_string_cmpi_str(arg, TOTP_CLI_COMMAND_ARG_DIGITS_PREFIX) == 0) {
  31. uint8_t digit_value;
  32. if(!args_read_uint8_and_trim(args, &digit_value)) {
  33. totp_cli_printf_missed_argument_value(TOTP_CLI_COMMAND_ARG_DIGITS_PREFIX);
  34. } else if(!token_info_set_digits_from_int(token_info, digit_value)) {
  35. TOTP_CLI_PRINTF_ERROR(
  36. "\"%" PRIu8
  37. "\" is incorrect value for argument \"" TOTP_CLI_COMMAND_ARG_DIGITS_PREFIX
  38. "\"\r\n",
  39. digit_value);
  40. } else {
  41. *parsed = true;
  42. }
  43. return true;
  44. }
  45. return false;
  46. }
  47. bool totp_cli_try_read_duration(
  48. TokenInfo* token_info,
  49. const FuriString* arg,
  50. FuriString* args,
  51. bool* parsed) {
  52. if(furi_string_cmpi_str(arg, TOTP_CLI_COMMAND_ARG_DURATION_PREFIX) == 0) {
  53. uint8_t duration_value;
  54. if(!args_read_uint8_and_trim(args, &duration_value)) {
  55. totp_cli_printf_missed_argument_value(TOTP_CLI_COMMAND_ARG_DURATION_PREFIX);
  56. } else if(!token_info_set_duration_from_int(token_info, duration_value)) {
  57. TOTP_CLI_PRINTF_ERROR(
  58. "\"%" PRIu8
  59. "\" is incorrect value for argument \"" TOTP_CLI_COMMAND_ARG_DURATION_PREFIX
  60. "\"\r\n",
  61. duration_value);
  62. } else {
  63. *parsed = true;
  64. }
  65. return true;
  66. }
  67. return false;
  68. }
  69. bool totp_cli_try_read_automation_features(
  70. TokenInfo* token_info,
  71. FuriString* arg,
  72. FuriString* args,
  73. bool* parsed) {
  74. if(furi_string_cmpi_str(arg, TOTP_CLI_COMMAND_ARG_AUTOMATION_FEATURE_PREFIX) == 0) {
  75. if(!args_read_string_and_trim(args, arg)) {
  76. totp_cli_printf_missed_argument_value(TOTP_CLI_COMMAND_ARG_AUTOMATION_FEATURE_PREFIX);
  77. } else if(!token_info_set_automation_feature_from_str(token_info, arg)) {
  78. TOTP_CLI_PRINTF_ERROR(
  79. "\"%s\" is incorrect value for argument \"" TOTP_CLI_COMMAND_ARG_AUTOMATION_FEATURE_PREFIX
  80. "\"\r\n",
  81. furi_string_get_cstr(arg));
  82. } else {
  83. *parsed = true;
  84. }
  85. return true;
  86. }
  87. return false;
  88. }
  89. bool totp_cli_try_read_unsecure_flag(const FuriString* arg, bool* parsed, bool* unsecure_flag) {
  90. if(furi_string_cmpi_str(arg, TOTP_CLI_COMMAND_ARG_UNSECURE_PREFIX) == 0) {
  91. *unsecure_flag = false;
  92. *parsed = true;
  93. return true;
  94. }
  95. return false;
  96. }
  97. bool totp_cli_try_read_plain_token_secret_encoding(
  98. FuriString* arg,
  99. FuriString* args,
  100. bool* parsed,
  101. PlainTokenSecretEncoding* secret_encoding) {
  102. if(furi_string_cmpi_str(arg, TOTP_CLI_COMMAND_ARG_SECRET_ENCODING_PREFIX) == 0) {
  103. if(!args_read_string_and_trim(args, arg)) {
  104. totp_cli_printf_missed_argument_value(TOTP_CLI_COMMAND_ARG_SECRET_ENCODING_PREFIX);
  105. } else {
  106. if(furi_string_cmpi_str(arg, PLAIN_TOKEN_ENCODING_BASE32_NAME) == 0) {
  107. *secret_encoding = PlainTokenSecretEncodingBase32;
  108. *parsed = true;
  109. } else if(furi_string_cmpi_str(arg, PLAIN_TOKEN_ENCODING_BASE64_NAME) == 0) {
  110. *secret_encoding = PlainTokenSecretEncodingBase64;
  111. *parsed = true;
  112. } else {
  113. TOTP_CLI_PRINTF_ERROR(
  114. "\"%s\" is incorrect value for argument \"" TOTP_CLI_COMMAND_ARG_SECRET_ENCODING_PREFIX
  115. "\"\r\n",
  116. furi_string_get_cstr(arg));
  117. }
  118. }
  119. return true;
  120. }
  121. return false;
  122. }