diff --git a/.tools/bin/jq b/.tools/bin/jq new file mode 100755 index 0000000..37a7a66 Binary files /dev/null and b/.tools/bin/jq differ diff --git a/Dockerfile.alpine-musl b/Dockerfile.alpine-musl index 62725ee..9d3d215 100644 --- a/Dockerfile.alpine-musl +++ b/Dockerfile.alpine-musl @@ -28,7 +28,8 @@ RUN apk add --no-cache \ sqlite-static \ linux-headers \ wget \ - bash + bash \ + openssh-client # Set working directory WORKDIR /build @@ -68,15 +69,8 @@ RUN cd /tmp && \ make install && \ rm -rf /tmp/libwebsockets -# Copy only submodule configuration and git directory -COPY .gitmodules /build/.gitmodules -COPY .git /build/.git - -# Clean up any stale submodule references (nips directory is not a submodule) -RUN git rm --cached nips 2>/dev/null || true - -# Initialize submodules (cached unless .gitmodules changes) -RUN git submodule update --init --recursive +# Submodules are provided in the local build context and copied explicitly below. +# Avoid network/SSH dependency inside Docker image build. # Copy nostr_core_lib source files (cached unless nostr_core_lib changes) COPY nostr_core_lib /build/nostr_core_lib/ @@ -84,11 +78,13 @@ COPY nostr_core_lib /build/nostr_core_lib/ # Copy c_utils_lib source files (cached unless c_utils_lib changes) COPY c_utils_lib /build/c_utils_lib/ -# Build c_utils_lib with MUSL-compatible flags (cached unless c_utils_lib changes) +# Build c_utils_lib static library for relay logging utilities +# (build only debug.c to avoid broken/missing version header surface in submodule revision) RUN cd c_utils_lib && \ - sed -i 's/CFLAGS = -Wall -Wextra -std=c99 -O2 -g/CFLAGS = -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -Wall -Wextra -std=c99 -O2 -g/' Makefile && \ - make clean && \ - make + mkdir -p build && \ + gcc -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -Wall -Wextra -std=c99 -O2 -g \ + -Isrc -Iinclude -c src/debug.c -o build/debug.o && \ + ar rcs libc_utils.a build/debug.o # Build nostr_core_lib with required NIPs (cached unless nostr_core_lib changes) # Disable fortification in build.sh to prevent __*_chk symbol issues @@ -122,6 +118,7 @@ RUN if [ "$DEBUG_BUILD" = "true" ]; then \ src/main.c src/config.c src/dm_admin.c src/request_validator.c \ src/nip009.c src/nip011.c src/nip013.c src/nip040.c src/nip042.c \ src/websockets.c src/subscriptions.c src/api.c src/embedded_web_content.c src/ip_ban.c \ + src/db_ops.c src/thread_pool.c \ -o /build/c_relay_static \ c_utils_lib/libc_utils.a \ nostr_core_lib/libnostr_core_x64.a \ diff --git a/relay.pid b/relay.pid index 07bd98c..76d9faf 100644 --- a/relay.pid +++ b/relay.pid @@ -1 +1 @@ -3134018 +409692 diff --git a/src/main.h b/src/main.h index 75e4bc1..5b2c970 100644 --- a/src/main.h +++ b/src/main.h @@ -13,8 +13,8 @@ // Using CRELAY_ prefix to avoid conflicts with nostr_core_lib VERSION macros #define CRELAY_VERSION_MAJOR 2 #define CRELAY_VERSION_MINOR 0 -#define CRELAY_VERSION_PATCH 0 -#define CRELAY_VERSION "v2.0.0" +#define CRELAY_VERSION_PATCH 1 +#define CRELAY_VERSION "v2.0.1" // Relay metadata (authoritative source for NIP-11 information) #define RELAY_NAME "C-Relay" diff --git a/src/websockets.c b/src/websockets.c index 8562674..ecf9a10 100644 --- a/src/websockets.c +++ b/src/websockets.c @@ -459,33 +459,27 @@ static int nostr_relay_callback(struct lws *wsi, enum lws_callback_reasons reaso } } - // Not a WebSocket upgrade, check for NIP-11 request + // Not a WebSocket upgrade: treat root path as NIP-11 endpoint. + // NIP-11 handler will return 200 for proper Accept header and 406 otherwise. char accept_header[256] = {0}; int header_len = lws_hdr_copy(wsi, accept_header, sizeof(accept_header) - 1, WSI_TOKEN_HTTP_ACCEPT); + const char* accept_ptr = NULL; if (header_len > 0) { accept_header[header_len] = '\0'; - - // Check if this is a NIP-11 request - int is_nip11_request = (strstr(accept_header, "application/nostr+json") != NULL); - - if (is_nip11_request) { - // Mark session as active so HTTP requests don't trigger idle ban - if (pss) { - pthread_mutex_lock(&pss->session_lock); - pss->session_active = 1; - pthread_mutex_unlock(&pss->session_lock); - } - // Handle NIP-11 request - if (handle_nip11_http_request(wsi, accept_header) == 0) { - return 0; // Successfully handled - } - } + accept_ptr = accept_header; } - // Root path without NIP-11 Accept header and not WebSocket - return 404 - DEBUG_WARN("Rejecting root path request - not WebSocket upgrade and not NIP-11"); - lws_return_http_status(wsi, HTTP_STATUS_NOT_FOUND, NULL); + // Mark session as active so HTTP requests don't trigger idle ban + if (pss) { + pthread_mutex_lock(&pss->session_lock); + pss->session_active = 1; + pthread_mutex_unlock(&pss->session_lock); + } + + if (handle_nip11_http_request(wsi, accept_ptr) == 0) { + return 0; // Successfully handled + } return -1; }