v0.0.40 - Add interactive index whitelist prompt after transport selection — users can restrict nostr_index values without CLI flags
This commit is contained in:
65
src/main.c
65
src/main.c
@@ -503,8 +503,8 @@ int socket_name_random(char *out, size_t out_len);
|
||||
/* Version information (auto-updated by build/version tooling) */
|
||||
#define NSIGNER_VERSION_MAJOR 0
|
||||
#define NSIGNER_VERSION_MINOR 0
|
||||
#define NSIGNER_VERSION_PATCH 39
|
||||
#define NSIGNER_VERSION "v0.0.39"
|
||||
#define NSIGNER_VERSION_PATCH 40
|
||||
#define NSIGNER_VERSION "v0.0.40"
|
||||
|
||||
|
||||
/* NSIGNER_HEADERLESS_DECLS_END */
|
||||
@@ -1671,6 +1671,59 @@ static int prompt_transport_selection(void) {
|
||||
return selected;
|
||||
}
|
||||
|
||||
/*
|
||||
* Interactive index whitelist prompt.
|
||||
* Shown after transport selection when no --allow-index flag was given.
|
||||
* Returns a malloc'd spec string (caller must free), or NULL for "all".
|
||||
*/
|
||||
static char *prompt_index_whitelist(void) {
|
||||
char input[256];
|
||||
|
||||
for (;;) {
|
||||
tui_render_content_screen(NULL, "Index whitelist — restrict which nostr_index values this session can access");
|
||||
printf("Enter allowed indices, or press Enter for 'all' (no restriction):\n\n");
|
||||
printf(" Examples:\n");
|
||||
printf(" all (default — allow all indices)\n");
|
||||
printf(" 0 (only index 0)\n");
|
||||
printf(" 0,1,3 (specific indices)\n");
|
||||
printf(" 0-3 (range 0 through 3)\n");
|
||||
printf(" 0,2-3,7 (mixed list and ranges)\n");
|
||||
printf("\n Enter = all\n");
|
||||
printf("> ");
|
||||
fflush(stdout);
|
||||
|
||||
if (read_line_stdin(input, sizeof(input)) != 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Trim trailing whitespace */
|
||||
{
|
||||
size_t len = strlen(input);
|
||||
while (len > 0 && (input[len-1] == '\n' || input[len-1] == '\r' ||
|
||||
input[len-1] == ' ' || input[len-1] == '\t')) {
|
||||
input[--len] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
if (input[0] == '\0') {
|
||||
/* Enter pressed — default to "all" */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Validate by parsing into a temp whitelist */
|
||||
{
|
||||
server_ctx_t tmp;
|
||||
memset(&tmp, 0, sizeof(tmp));
|
||||
if (server_set_index_whitelist(&tmp, input) != 0) {
|
||||
printf("Invalid spec: '%s'. Try again or press Enter for 'all'.\n", input);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return strdup(input);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
mnemonic_state_t mnemonic;
|
||||
role_table_t role_table;
|
||||
@@ -1969,6 +2022,14 @@ int main(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Index whitelist prompt (only if --allow-index wasn't given on CLI) */
|
||||
if (allow_index_spec == NULL) {
|
||||
char *wl_spec = prompt_index_whitelist();
|
||||
if (wl_spec != NULL) {
|
||||
allow_index_spec = wl_spec; /* will be freed at program exit */
|
||||
}
|
||||
}
|
||||
|
||||
/* Persistent listeners — configure from menu selection */
|
||||
multi_listen = 1;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user