From db7621a293561320f1c8cadc7b40e85e99d20edc Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 21 Nov 2025 11:54:17 -0400 Subject: [PATCH] v0.1.10 - In the middle of working on getting admin api working --- .test_keys | 2 +- Makefile | 2 +- {tests => Trash}/admin_test.sh | 0 {db => Trash}/schema.sql | 2 +- {tests => Trash}/test_admin_api.sh | 0 build/admin_api.o | Bin 33832 -> 34368 bytes build/admin_event.o | Bin 0 -> 17552 bytes build/bud08.o | Bin 9344 -> 9344 bytes build/bud09.o | Bin 13968 -> 13960 bytes build/ginxsom-fcgi | Bin 280352 -> 284872 bytes build/main.o | Bin 99136 -> 106960 bytes build/request_validator.o | Bin 66008 -> 66008 bytes config/local-nginx.conf | 4 +- ...e51ccf828a2f5a05227d7a768f33b5a198681a.db} | Bin 73728 -> 73728 bytes db/migrations/001_add_auth_rules.sql | 78 --- db/migrations/002_add_relay_seckey.sql | 15 - docs/DATABASE_NAMING_DESIGN.md | 300 +++++++++++ restart-all.sh | 58 ++- src/admin_api.c | 37 +- src/admin_event.c | 471 +++++++++++++++++ src/bud08.c | 8 +- src/bud09.c | 6 +- src/ginxsom.h | 7 +- src/main.c | 491 ++++++++++++++---- src/request_validator.c | 8 +- tests/admin_event_test.sh | 206 ++++++++ 26 files changed, 1431 insertions(+), 264 deletions(-) rename {tests => Trash}/admin_test.sh (100%) rename {db => Trash}/schema.sql (98%) rename {tests => Trash}/test_admin_api.sh (100%) create mode 100644 build/admin_event.o rename db/{ginxsom.db => 52e366edfa4e9cc6a6d4653828e51ccf828a2f5a05227d7a768f33b5a198681a.db} (94%) delete mode 100644 db/migrations/001_add_auth_rules.sql delete mode 100644 db/migrations/002_add_relay_seckey.sql create mode 100644 docs/DATABASE_NAMING_DESIGN.md create mode 100644 src/admin_event.c create mode 100755 tests/admin_event_test.sh diff --git a/.test_keys b/.test_keys index ccbe9a6..5c0d7fd 100644 --- a/.test_keys +++ b/.test_keys @@ -1,4 +1,4 @@ ADMIN_PRIVKEY='22cc83aa57928a2800234c939240c9a6f0f44a33ea3838a860ed38930b195afd' ADMIN_PUBKEY='8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e' SERVER_PRIVKEY='c4e0d2ed7d36277d6698650f68a6e9199f91f3abb476a67f07303e81309c48f1' -SERVER_PUBKEY='52e366edfa4e9cc6a6d4653828e51ccf828a2f5a05227d7a768f33b5a198681a' +SERVER_PUBKEY='ebe82fbff0ff79b2973892eb285cafc767863e434f894838a548580266b70254' diff --git a/Makefile b/Makefile index 6973bed..d248ea8 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ BUILDDIR = build TARGET = $(BUILDDIR)/ginxsom-fcgi # Source files -SOURCES = $(SRCDIR)/main.c $(SRCDIR)/admin_api.c $(SRCDIR)/admin_auth.c $(SRCDIR)/admin_websocket.c $(SRCDIR)/admin_handlers.c $(SRCDIR)/bud04.c $(SRCDIR)/bud06.c $(SRCDIR)/bud08.c $(SRCDIR)/bud09.c $(SRCDIR)/request_validator.c +SOURCES = $(SRCDIR)/main.c $(SRCDIR)/admin_api.c $(SRCDIR)/admin_auth.c $(SRCDIR)/admin_event.c $(SRCDIR)/admin_websocket.c $(SRCDIR)/admin_handlers.c $(SRCDIR)/bud04.c $(SRCDIR)/bud06.c $(SRCDIR)/bud08.c $(SRCDIR)/bud09.c $(SRCDIR)/request_validator.c OBJECTS = $(SOURCES:$(SRCDIR)/%.c=$(BUILDDIR)/%.o) # Default target diff --git a/tests/admin_test.sh b/Trash/admin_test.sh similarity index 100% rename from tests/admin_test.sh rename to Trash/admin_test.sh diff --git a/db/schema.sql b/Trash/schema.sql similarity index 98% rename from db/schema.sql rename to Trash/schema.sql index 44eb556..b9fac10 100644 --- a/db/schema.sql +++ b/Trash/schema.sql @@ -38,7 +38,7 @@ INSERT OR IGNORE INTO config (key, value, description) VALUES ('auth_rules_enabled', 'false', 'Whether authentication rules are enabled for uploads'), ('server_name', 'ginxsom', 'Server name for responses'), ('admin_pubkey', '', 'Admin public key for API access'), - ('admin_enabled', 'false', 'Whether admin API is enabled'), + ('admin_enabled', 'true', 'Whether admin API is enabled'), ('nip42_require_auth', 'false', 'Enable NIP-42 challenge/response authentication'), ('nip42_challenge_timeout', '600', 'NIP-42 challenge timeout in seconds'), ('nip42_time_tolerance', '300', 'NIP-42 timestamp tolerance in seconds'); diff --git a/tests/test_admin_api.sh b/Trash/test_admin_api.sh similarity index 100% rename from tests/test_admin_api.sh rename to Trash/test_admin_api.sh diff --git a/build/admin_api.o b/build/admin_api.o index eb368735d4f784e93b307c4fab2d645625c4667f..9efa6ca1b4eeb6d5af968d77da4483ecfe81706b 100644 GIT binary patch literal 34368 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