Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b89c011ad5 |
69
src/main.c
69
src/main.c
@@ -19,6 +19,7 @@
|
||||
#include "../nostr_core_lib/cjson/cJSON.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/nip019.h" // NIP-19: bech32-encoded entities
|
||||
#include "config.h" // Configuration management system
|
||||
#include "sql_schema.h" // Embedded database schema
|
||||
#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(" -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(" -a, --admin-pubkey HEX Override admin public key (64-char hex)\n");
|
||||
printf(" -r, --relay-privkey HEX Override relay private key (64-char hex)\n");
|
||||
printf(" -a, --admin-pubkey KEY Override admin public key (64-char hex or npub)\n");
|
||||
printf(" -r, --relay-privkey KEY Override relay private key (64-char hex or nsec)\n");
|
||||
printf("\n");
|
||||
printf("Configuration:\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;
|
||||
}
|
||||
|
||||
// Validate public key format (must be 64 hex characters)
|
||||
if (strlen(argv[i + 1]) != 64) {
|
||||
log_error("Invalid admin public key length. Must be exactly 64 hex characters.");
|
||||
const char* input_key = argv[i + 1];
|
||||
char decoded_key[65] = {0}; // Buffer for decoded hex key
|
||||
|
||||
// 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]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Validate hex format
|
||||
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);
|
||||
strncpy(cli_options.admin_pubkey_override, decoded_key, sizeof(cli_options.admin_pubkey_override) - 1);
|
||||
cli_options.admin_pubkey_override[sizeof(cli_options.admin_pubkey_override) - 1] = '\0';
|
||||
i++; // Skip the key argument
|
||||
|
||||
@@ -1404,28 +1406,29 @@ int main(int argc, char* argv[]) {
|
||||
print_usage(argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Validate private key format (must be 64 hex characters)
|
||||
if (strlen(argv[i + 1]) != 64) {
|
||||
log_error("Invalid relay private key length. Must be exactly 64 hex characters.");
|
||||
|
||||
const char* input_key = argv[i + 1];
|
||||
char decoded_key[65] = {0}; // Buffer for decoded hex key
|
||||
|
||||
// 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]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Validate hex format
|
||||
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);
|
||||
|
||||
strncpy(cli_options.relay_privkey_override, decoded_key, sizeof(cli_options.relay_privkey_override) - 1);
|
||||
cli_options.relay_privkey_override[sizeof(cli_options.relay_privkey_override) - 1] = '\0';
|
||||
i++; // Skip the key argument
|
||||
|
||||
|
||||
log_info("Relay private key override specified");
|
||||
} else if (strcmp(argv[i], "--strict-port") == 0) {
|
||||
// Strict port mode option
|
||||
|
||||
Reference in New Issue
Block a user