summaryrefslogtreecommitdiff
path: root/src/cmd_users.c
diff options
context:
space:
mode:
authorAnders Betts <anders.betts@gmail.com>2026-09-20 21:55:04 +0200
committerAnders Betts <anders.betts@gmail.com>2026-09-20 22:02:57 +0200
commitceff3d26732a7fde2f66df0270269d3bebcfabf7 (patch)
tree4ad6677617cae9de4aa4b5b42352a7a8cf29a3e9 /src/cmd_users.c
parent10a535ace098144980d0ffd1593f6384c39cc221 (diff)
downloadbokf-ceff3d26732a7fde2f66df0270269d3bebcfabf7.tar.gz
bokf-ceff3d26732a7fde2f66df0270269d3bebcfabf7.zip
commands: shared DB-error helpers
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'src/cmd_users.c')
-rw-r--r--src/cmd_users.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/cmd_users.c b/src/cmd_users.c
index f327c13..7fae2cc 100644
--- a/src/cmd_users.c
+++ b/src/cmd_users.c
@@ -57,7 +57,7 @@ static yyjson_mut_val *h_user_list(struct req *r)
"SELECT id,username,display_name,is_admin,created_at,disabled_at"
" FROM users ORDER BY id",
-1, &st, NULL) != SQLITE_OK)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
while (sqlite3_step(st) == SQLITE_ROW) {
yyjson_mut_val *o = yyjson_mut_arr_add_obj(r->rdoc, items);
yyjson_mut_obj_add_int(r->rdoc, o, "id", sqlite3_column_int64(st, 0));
@@ -138,7 +138,7 @@ static yyjson_mut_val *h_token_create(struct req *r)
"created_at,expires_at) VALUES(?1,?2,?3,?4,?5,?6,?7)",
-1, &st, NULL) != SQLITE_OK) {
free(token);
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
}
sqlite3_bind_int64(st, 1, r->org_id);
sqlite3_bind_int64(st, 2, r->sess->user_id);
@@ -146,15 +146,12 @@ static yyjson_mut_val *h_token_create(struct req *r)
sqlite3_bind_blob(st, 4, th, 32, SQLITE_TRANSIENT);
sqlite3_bind_text(st, 5, scopes, -1, SQLITE_TRANSIENT);
sqlite3_bind_text(st, 6, ts, -1, SQLITE_TRANSIENT);
- if (expires_at)
- sqlite3_bind_text(st, 7, expires_at, -1, SQLITE_TRANSIENT);
- else
- sqlite3_bind_null(st, 7);
+ bind_text_or_null(st, 7, expires_at);
int rc = sqlite3_step(st);
sqlite3_finalize(st);
if (rc != SQLITE_DONE) {
free(token);
- return fail(r, "INTERNAL", sqlite3_errmsg(r->db));
+ return db_sqlite_error(r);
}
int64_t token_id = db_last_id(r->db);
char *reqjson = audit_args_json(r->args);
@@ -184,7 +181,7 @@ static yyjson_mut_val *h_token_list(struct req *r)
"revoked_at FROM api_tokens WHERE org_id=?1 AND user_id=?2"
" ORDER BY id",
-1, &st, NULL) != SQLITE_OK)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
sqlite3_bind_int64(st, 1, r->org_id);
sqlite3_bind_int64(st, 2, r->sess->user_id);
while (sqlite3_step(st) == SQLITE_ROW) {
@@ -234,7 +231,7 @@ static yyjson_mut_val *h_token_revoke(struct req *r)
: "UPDATE api_tokens SET revoked_at=?1 WHERE id=?2 AND org_id=?3"
" AND user_id=?4",
-1, &st, NULL) != SQLITE_OK)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
sqlite3_bind_text(st, 1, ts, -1, SQLITE_TRANSIENT);
sqlite3_bind_int64(st, 2, id);
sqlite3_bind_int64(st, 3, r->org_id);
@@ -243,7 +240,7 @@ static yyjson_mut_val *h_token_revoke(struct req *r)
int rc = sqlite3_step(st);
sqlite3_finalize(st);
if (rc != SQLITE_DONE)
- return fail(r, "INTERNAL", sqlite3_errmsg(r->db));
+ return db_sqlite_error(r);
if (sqlite3_changes(r->db) == 0)
return fail(r, "NOT_FOUND", "token not found");
audit_append(r->db, r->org_id, r->sess->user_id, id, "token.revoke", "{}",