v0.7.2 - -m
This commit is contained in:
69
src/main.c
69
src/main.c
@@ -19,6 +19,7 @@
|
|||||||
#include "../nostr_core_lib/cjson/cJSON.h"
|
#include "../nostr_core_lib/cjson/cJSON.h"
|
||||||
#include "../nostr_core_lib/nostr_core/nostr_core.h"
|
#include "../nostr_core_lib/nostr_core/nostr_core.h"
|
||||||
#include "../nostr_core_lib/nostr_core/nip013.h" // NIP-13: Proof of Work
|
#include "../nostr_core_lib/nostr_core/nip013.h" // NIP-13: Proof of Work
|
||||||
|
#include "../nostr_core_lib/nostr_core/nip019.h" // NIP-19: bech32-encoded entities
|
||||||
#include "config.h" // Configuration management system
|
#include "config.h" // Configuration management system
|
||||||
#include "sql_schema.h" // Embedded database schema
|
#include "sql_schema.h" // Embedded database schema
|
||||||
#include "websockets.h" // WebSocket protocol implementation
|
#include "websockets.h" // WebSocket protocol implementation
|
||||||
@@ -1293,8 +1294,8 @@ void print_usage(const char* program_name) {
|
|||||||
printf(" -v, --version Show version information\n");
|
printf(" -v, --version Show version information\n");
|
||||||
printf(" -p, --port PORT Override relay port (first-time startup only)\n");
|
printf(" -p, --port PORT Override relay port (first-time startup only)\n");
|
||||||
printf(" --strict-port Fail if exact port is unavailable (no port increment)\n");
|
printf(" --strict-port Fail if exact port is unavailable (no port increment)\n");
|
||||||
printf(" -a, --admin-pubkey HEX Override admin public key (64-char hex)\n");
|
printf(" -a, --admin-pubkey KEY Override admin public key (64-char hex or npub)\n");
|
||||||
printf(" -r, --relay-privkey HEX Override relay private key (64-char hex)\n");
|
printf(" -r, --relay-privkey KEY Override relay private key (64-char hex or nsec)\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("Configuration:\n");
|
printf("Configuration:\n");
|
||||||
printf(" This relay uses event-based configuration stored in the database.\n");
|
printf(" This relay uses event-based configuration stored in the database.\n");
|
||||||
@@ -1375,24 +1376,25 @@ int main(int argc, char* argv[]) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate public key format (must be 64 hex characters)
|
const char* input_key = argv[i + 1];
|
||||||
if (strlen(argv[i + 1]) != 64) {
|
char decoded_key[65] = {0}; // Buffer for decoded hex key
|
||||||
log_error("Invalid admin public key length. Must be exactly 64 hex characters.");
|
|
||||||
|
// Try to decode the input as either hex or npub format
|
||||||
|
unsigned char pubkey_bytes[32];
|
||||||
|
if (nostr_decode_npub(input_key, pubkey_bytes) == NOSTR_SUCCESS) {
|
||||||
|
// Convert bytes back to hex string
|
||||||
|
char* hex_ptr = decoded_key;
|
||||||
|
for (int j = 0; j < 32; j++) {
|
||||||
|
sprintf(hex_ptr, "%02x", pubkey_bytes[j]);
|
||||||
|
hex_ptr += 2;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log_error("Invalid admin public key format. Must be 64 hex characters or valid npub format.");
|
||||||
print_usage(argv[0]);
|
print_usage(argv[0]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate hex format
|
strncpy(cli_options.admin_pubkey_override, decoded_key, sizeof(cli_options.admin_pubkey_override) - 1);
|
||||||
for (int j = 0; j < 64; j++) {
|
|
||||||
char c = argv[i + 1][j];
|
|
||||||
if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))) {
|
|
||||||
log_error("Invalid admin public key format. Must contain only hex characters (0-9, a-f, A-F).");
|
|
||||||
print_usage(argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
strncpy(cli_options.admin_pubkey_override, argv[i + 1], sizeof(cli_options.admin_pubkey_override) - 1);
|
|
||||||
cli_options.admin_pubkey_override[sizeof(cli_options.admin_pubkey_override) - 1] = '\0';
|
cli_options.admin_pubkey_override[sizeof(cli_options.admin_pubkey_override) - 1] = '\0';
|
||||||
i++; // Skip the key argument
|
i++; // Skip the key argument
|
||||||
|
|
||||||
@@ -1404,28 +1406,29 @@ int main(int argc, char* argv[]) {
|
|||||||
print_usage(argv[0]);
|
print_usage(argv[0]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate private key format (must be 64 hex characters)
|
const char* input_key = argv[i + 1];
|
||||||
if (strlen(argv[i + 1]) != 64) {
|
char decoded_key[65] = {0}; // Buffer for decoded hex key
|
||||||
log_error("Invalid relay private key length. Must be exactly 64 hex characters.");
|
|
||||||
|
// Try to decode the input as either hex or nsec format
|
||||||
|
unsigned char privkey_bytes[32];
|
||||||
|
if (nostr_decode_nsec(input_key, privkey_bytes) == NOSTR_SUCCESS) {
|
||||||
|
// Convert bytes back to hex string
|
||||||
|
char* hex_ptr = decoded_key;
|
||||||
|
for (int j = 0; j < 32; j++) {
|
||||||
|
sprintf(hex_ptr, "%02x", privkey_bytes[j]);
|
||||||
|
hex_ptr += 2;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log_error("Invalid relay private key format. Must be 64 hex characters or valid nsec format.");
|
||||||
print_usage(argv[0]);
|
print_usage(argv[0]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate hex format
|
strncpy(cli_options.relay_privkey_override, decoded_key, sizeof(cli_options.relay_privkey_override) - 1);
|
||||||
for (int j = 0; j < 64; j++) {
|
|
||||||
char c = argv[i + 1][j];
|
|
||||||
if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))) {
|
|
||||||
log_error("Invalid relay private key format. Must contain only hex characters (0-9, a-f, A-F).");
|
|
||||||
print_usage(argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
strncpy(cli_options.relay_privkey_override, argv[i + 1], sizeof(cli_options.relay_privkey_override) - 1);
|
|
||||||
cli_options.relay_privkey_override[sizeof(cli_options.relay_privkey_override) - 1] = '\0';
|
cli_options.relay_privkey_override[sizeof(cli_options.relay_privkey_override) - 1] = '\0';
|
||||||
i++; // Skip the key argument
|
i++; // Skip the key argument
|
||||||
|
|
||||||
log_info("Relay private key override specified");
|
log_info("Relay private key override specified");
|
||||||
} else if (strcmp(argv[i], "--strict-port") == 0) {
|
} else if (strcmp(argv[i], "--strict-port") == 0) {
|
||||||
// Strict port mode option
|
// Strict port mode option
|
||||||
|
|||||||
Reference in New Issue
Block a user