summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAnders Betts <anders.betts@gmail.com>2026-09-17 21:48:00 +0200
committerAnders Betts <anders.betts@gmail.com>2026-09-17 21:48:00 +0200
commit071b7e9b01e41d4048b1bbb3d9caaac4c8a526de (patch)
treeb0af0a71e0d9fff2ca166d6ca69167ff32cc2ccb /tests
parenta145684f0a556820a183db45d27e9b2dc715f056 (diff)
downloadbokf-5bca19518dc3cbbd303e66b152c70d8c4a7c8f7b.tar.gz
bokf-5bca19518dc3cbbd303e66b152c70d8c4a7c8f7b.zip
Add token login to bokfctl and enforce admin scope for tokensv0.1.3
- bokfctl: --token / BOKFD_TOKEN via client_token_login - tokens must carry the admin scope for admin commands (was bypassed) - docs: token-based snapshot for restic backups
Diffstat (limited to 'tests')
-rw-r--r--tests/test_core.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/test_core.c b/tests/test_core.c
index b2c828d..5960665 100644
--- a/tests/test_core.c
+++ b/tests/test_core.c
@@ -540,6 +540,12 @@ int main(void)
CHECK(db_exec(g_db, "DELETE FROM audit_log", &err) != 0);
free(err);
+ d = call(reqf("{\"v\":1,\"id\":\"27\",\"cmd\":\"backup.snapshot\","
+ "\"session\":\"%s\"}",
+ ro_session));
+ CHECK_STR(d, "error.code", "FORBIDDEN");
+ yyjson_doc_free(d);
+
d = call(reqf("{\"v\":1,\"id\":\"28\",\"cmd\":\"backup.snapshot\","
"\"session\":\"%s\"}",
g_session));
@@ -548,6 +554,30 @@ int main(void)
CHECK(jstr(d, "result.sha256") && strlen(jstr(d, "result.sha256")) == 64);
yyjson_doc_free(d);
+ d = call(reqf("{\"v\":1,\"id\":\"28b\",\"cmd\":\"token.create\","
+ "\"session\":\"%s\",\"org\":%d,\"args\":"
+ "{\"label\":\"backup\",\"scopes\":[\"admin\"]}}",
+ g_session, (int)org_id));
+ CHECK_OK(d);
+ char backup_token[128] = "";
+ snprintf(backup_token, sizeof backup_token, "%s", jstr(d, "result.token"));
+ yyjson_doc_free(d);
+
+ d = call(reqf("{\"v\":1,\"id\":\"28c\",\"cmd\":\"session.open\",\"args\":"
+ "{\"method\":\"token\",\"token\":\"%s\"}}",
+ backup_token));
+ CHECK_OK(d);
+ char backup_session[128] = "";
+ snprintf(backup_session, sizeof backup_session, "%s",
+ jstr(d, "result.session"));
+ yyjson_doc_free(d);
+
+ d = call(reqf("{\"v\":1,\"id\":\"28d\",\"cmd\":\"backup.snapshot\","
+ "\"session\":\"%s\",\"args\":{\"dest\":\"%s/snap-token.db\"}}",
+ backup_session, tmpdir));
+ CHECK_OK(d);
+ yyjson_doc_free(d);
+
d = call(reqf("{\"v\":1,\"id\":\"29\",\"cmd\":\"describe\","
"\"session\":\"%s\"}",
g_session));