v0.3.9 - API work
This commit is contained in:
958
api/index.html
958
api/index.html
File diff suppressed because it is too large
Load Diff
66
src/config.c
66
src/config.c
@@ -2156,15 +2156,28 @@ int process_admin_config_event(cJSON* event, char* error_message, size_t error_s
|
|||||||
|
|
||||||
// Handle kind 33335 auth rule events
|
// Handle kind 33335 auth rule events
|
||||||
int process_admin_auth_event(cJSON* event, char* error_message, size_t error_size) {
|
int process_admin_auth_event(cJSON* event, char* error_message, size_t error_size) {
|
||||||
|
log_info("=== SERVER-SIDE AUTH RULE EVENT DEBUG ===");
|
||||||
|
|
||||||
|
// Print the entire received event for debugging
|
||||||
|
char* debug_event_str = cJSON_Print(event);
|
||||||
|
if (debug_event_str) {
|
||||||
|
printf("Received Auth Event JSON: %s\n", debug_event_str);
|
||||||
|
free(debug_event_str);
|
||||||
|
}
|
||||||
|
|
||||||
cJSON* tags_obj = cJSON_GetObjectItem(event, "tags");
|
cJSON* tags_obj = cJSON_GetObjectItem(event, "tags");
|
||||||
if (!tags_obj || !cJSON_IsArray(tags_obj)) {
|
if (!tags_obj || !cJSON_IsArray(tags_obj)) {
|
||||||
|
log_error("Auth event missing or invalid tags array");
|
||||||
snprintf(error_message, error_size, "invalid: auth rule event must have tags");
|
snprintf(error_message, error_size, "invalid: auth rule event must have tags");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("Tags array size: %d\n", cJSON_GetArraySize(tags_obj));
|
||||||
|
|
||||||
// Extract action from content or tags
|
// Extract action from content or tags
|
||||||
cJSON* content_obj = cJSON_GetObjectItem(event, "content");
|
cJSON* content_obj = cJSON_GetObjectItem(event, "content");
|
||||||
const char* content = content_obj ? cJSON_GetStringValue(content_obj) : "";
|
const char* content = content_obj ? cJSON_GetStringValue(content_obj) : "";
|
||||||
|
printf("Event content: '%s'\n", content);
|
||||||
|
|
||||||
// Parse the action from content (should be "add" or "remove")
|
// Parse the action from content (should be "add" or "remove")
|
||||||
cJSON* content_json = cJSON_Parse(content);
|
cJSON* content_json = cJSON_Parse(content);
|
||||||
@@ -2176,6 +2189,7 @@ int process_admin_auth_event(cJSON* event, char* error_message, size_t error_siz
|
|||||||
}
|
}
|
||||||
cJSON_Delete(content_json);
|
cJSON_Delete(content_json);
|
||||||
}
|
}
|
||||||
|
printf("Parsed action: '%s'\n", action);
|
||||||
|
|
||||||
// Begin transaction for atomic auth rule updates
|
// Begin transaction for atomic auth rule updates
|
||||||
int rc = sqlite3_exec(g_db, "BEGIN IMMEDIATE TRANSACTION", NULL, NULL, NULL);
|
int rc = sqlite3_exec(g_db, "BEGIN IMMEDIATE TRANSACTION", NULL, NULL, NULL);
|
||||||
@@ -2185,11 +2199,33 @@ int process_admin_auth_event(cJSON* event, char* error_message, size_t error_siz
|
|||||||
}
|
}
|
||||||
|
|
||||||
int rules_processed = 0;
|
int rules_processed = 0;
|
||||||
|
int tags_examined = 0;
|
||||||
|
int tags_skipped = 0;
|
||||||
|
|
||||||
// Process each tag as an auth rule specification
|
// Process each tag as an auth rule specification
|
||||||
cJSON* tag = NULL;
|
cJSON* tag = NULL;
|
||||||
cJSON_ArrayForEach(tag, tags_obj) {
|
cJSON_ArrayForEach(tag, tags_obj) {
|
||||||
if (!cJSON_IsArray(tag) || cJSON_GetArraySize(tag) < 3) {
|
tags_examined++;
|
||||||
|
|
||||||
|
printf("Examining tag #%d:\n", tags_examined);
|
||||||
|
char* tag_debug_str = cJSON_Print(tag);
|
||||||
|
if (tag_debug_str) {
|
||||||
|
printf(" Tag JSON: %s\n", tag_debug_str);
|
||||||
|
free(tag_debug_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cJSON_IsArray(tag)) {
|
||||||
|
printf(" SKIPPED: Not an array\n");
|
||||||
|
tags_skipped++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tag_size = cJSON_GetArraySize(tag);
|
||||||
|
printf(" Tag array size: %d\n", tag_size);
|
||||||
|
|
||||||
|
if (tag_size < 3) {
|
||||||
|
printf(" SKIPPED: Array size < 3 (need at least 3 elements for auth rules)\n");
|
||||||
|
tags_skipped++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2200,6 +2236,8 @@ int process_admin_auth_event(cJSON* event, char* error_message, size_t error_siz
|
|||||||
if (!cJSON_IsString(rule_type_obj) ||
|
if (!cJSON_IsString(rule_type_obj) ||
|
||||||
!cJSON_IsString(pattern_type_obj) ||
|
!cJSON_IsString(pattern_type_obj) ||
|
||||||
!cJSON_IsString(pattern_value_obj)) {
|
!cJSON_IsString(pattern_value_obj)) {
|
||||||
|
printf(" SKIPPED: One or more elements are not strings\n");
|
||||||
|
tags_skipped++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2207,18 +2245,42 @@ int process_admin_auth_event(cJSON* event, char* error_message, size_t error_siz
|
|||||||
const char* pattern_type = cJSON_GetStringValue(pattern_type_obj);
|
const char* pattern_type = cJSON_GetStringValue(pattern_type_obj);
|
||||||
const char* pattern_value = cJSON_GetStringValue(pattern_value_obj);
|
const char* pattern_value = cJSON_GetStringValue(pattern_value_obj);
|
||||||
|
|
||||||
|
printf(" Extracted rule: type='%s', pattern_type='%s', pattern_value='%s'\n",
|
||||||
|
rule_type, pattern_type, pattern_value);
|
||||||
|
|
||||||
|
// Map rule_type to correct action (FIX THE BUG HERE)
|
||||||
|
const char* mapped_action = "allow"; // default
|
||||||
|
if (strcmp(rule_type, "pubkey_blacklist") == 0 || strcmp(rule_type, "hash_blacklist") == 0) {
|
||||||
|
mapped_action = "deny";
|
||||||
|
} else if (strcmp(rule_type, "pubkey_whitelist") == 0) {
|
||||||
|
mapped_action = "allow";
|
||||||
|
}
|
||||||
|
printf(" Mapped action for rule_type '%s': '%s'\n", rule_type, mapped_action);
|
||||||
|
|
||||||
// Process the auth rule based on action
|
// Process the auth rule based on action
|
||||||
if (strcmp(action, "add") == 0) {
|
if (strcmp(action, "add") == 0) {
|
||||||
if (add_auth_rule_from_config(rule_type, pattern_type, pattern_value, "allow") == 0) {
|
printf(" Attempting to add rule to database...\n");
|
||||||
|
if (add_auth_rule_from_config(rule_type, pattern_type, pattern_value, mapped_action) == 0) {
|
||||||
|
printf(" SUCCESS: Rule added to database\n");
|
||||||
rules_processed++;
|
rules_processed++;
|
||||||
|
} else {
|
||||||
|
printf(" FAILED: Could not add rule to database\n");
|
||||||
}
|
}
|
||||||
} else if (strcmp(action, "remove") == 0) {
|
} else if (strcmp(action, "remove") == 0) {
|
||||||
|
printf(" Attempting to remove rule from database...\n");
|
||||||
if (remove_auth_rule_from_config(rule_type, pattern_type, pattern_value) == 0) {
|
if (remove_auth_rule_from_config(rule_type, pattern_type, pattern_value) == 0) {
|
||||||
|
printf(" SUCCESS: Rule removed from database\n");
|
||||||
rules_processed++;
|
rules_processed++;
|
||||||
|
} else {
|
||||||
|
printf(" FAILED: Could not remove rule from database\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("Processing summary: examined=%d, skipped=%d, processed=%d\n",
|
||||||
|
tags_examined, tags_skipped, rules_processed);
|
||||||
|
log_info("=== END SERVER-SIDE AUTH RULE EVENT DEBUG ===");
|
||||||
|
|
||||||
if (rules_processed > 0) {
|
if (rules_processed > 0) {
|
||||||
sqlite3_exec(g_db, "COMMIT", NULL, NULL, NULL);
|
sqlite3_exec(g_db, "COMMIT", NULL, NULL, NULL);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user