added db_insert_user
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
#include "database.h"
|
||||
#include "sql.h"
|
||||
#include "user.h"
|
||||
|
||||
User *db_insert_user(const char *username, const char *email,
|
||||
const char *password, const char *group,
|
||||
bool *is_superuser) {
|
||||
pthread_mutex_lock(&db_mutex);
|
||||
if (!db) {
|
||||
fprintf(stderr, "Databse not initialized\n");
|
||||
return nullptr;
|
||||
}
|
||||
if (!username || !email || !password) {
|
||||
fprintf(stderr, "username, email, password connot be empty\n");
|
||||
return nullptr;
|
||||
}
|
||||
const char *sql = nullptr;
|
||||
sqlite3_stmt *stmt;
|
||||
int rc;
|
||||
if (!group || !is_superuser) {
|
||||
sql = INSERT_USER_USERNAME_EMAIL_PASSWORD_SQL;
|
||||
} else if (!group) {
|
||||
sql = INSERT_USER_USERNAME_EMAIL_PASSWORD_GROUP_SQL;
|
||||
} else {
|
||||
sql = INSERT_USER_FULL_SQL;
|
||||
}
|
||||
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot prepare statement: %s\n", sqlite3_errmsg(db));
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
sqlite3_bind_text(stmt, 1, username, -1, SQLITE_STATIC);
|
||||
sqlite3_bind_text(stmt, 2, email, -1, SQLITE_STATIC);
|
||||
sqlite3_bind_text(stmt, 3, password, -1, SQLITE_STATIC);
|
||||
|
||||
if (group) {
|
||||
sqlite3_bind_text(stmt, 4, group, -1, SQLITE_STATIC);
|
||||
}
|
||||
if (is_superuser) {
|
||||
sqlite3_bind_int(stmt, 5, is_superuser);
|
||||
}
|
||||
|
||||
rc = sqlite3_step(stmt);
|
||||
if (rc != SQLITE_DONE) {
|
||||
fprintf(stderr, "Execution failed: %s\n", sqlite3_errmsg(db));
|
||||
sqlite3_finalize(stmt);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int inserted_id = sqlite3_last_insert_rowid(db);
|
||||
|
||||
sqlite3_finalize(stmt);
|
||||
printf("User inserted successfully. ID: %d\n", inserted_id);
|
||||
pthread_mutex_unlock(&db_mutex);
|
||||
}
|
||||
@@ -1,13 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#define CREATE_TABLE_USERS \
|
||||
"create table if not exists users(" \
|
||||
"id integer primary key autoincrement," \
|
||||
"username text unique," \
|
||||
"email char(50) unique," \
|
||||
"password char(150) not null," \
|
||||
"user_group char(50) default 'users'," \
|
||||
"is_superuser boolean default false" \
|
||||
#define CREATE_TABLE_USERS \
|
||||
"create table if not exists users(" \
|
||||
"id integer primary key autoincrement," \
|
||||
"username text unique," \
|
||||
"email char(50) unique," \
|
||||
"password char(150) not null," \
|
||||
"user_group char(50) default 'users'," \
|
||||
"is_superuser boolean default false" \
|
||||
");"
|
||||
|
||||
#define INSERT_USER_SQL \
|
||||
@@ -16,4 +16,11 @@
|
||||
|
||||
#define SELECT_ALL_USERS_SQL "select * from users"
|
||||
#define SELECT_USER_BY_USERNAME_SQL "select * from users where username = ?"
|
||||
|
||||
#define INSERT_USER_USERNAME_EMAIL_PASSWORD_SQL \
|
||||
"insert into users (username, email, password) values (?, ?, ?)"
|
||||
#define INSERT_USER_USERNAME_EMAIL_PASSWORD_GROUP_SQL \
|
||||
"insert into users (username, email, password, user_group) values (?, ?, " \
|
||||
"?, ?)"
|
||||
#define INSERT_USER_FULL_SQL \
|
||||
"insert into users (username, email, password, user_group, is_superuser) " \
|
||||
"values (?, ?, ?, ?, ?)"
|
||||
|
||||
+5
-2
@@ -13,8 +13,8 @@ typedef struct User {
|
||||
bool is_superuser;
|
||||
} User;
|
||||
|
||||
User *new_user(int id, const char *username, const char *password, const char *email,
|
||||
const char *group, bool is_superuser);
|
||||
User *new_user(int id, const char *username, const char *password,
|
||||
const char *email, const char *group, bool is_superuser);
|
||||
|
||||
void free_user(User *user);
|
||||
|
||||
@@ -55,3 +55,6 @@ void verify_token(struct mg_connection *c, struct mg_http_message *hm);
|
||||
void db_get_users_from_file(const char *filename);
|
||||
char *db_get_all_users();
|
||||
User *db_get_user_by_username(const char *username);
|
||||
User *db_insert_user(const char *username, const char *email,
|
||||
const char *password, const char *group,
|
||||
bool *is_superuser);
|
||||
|
||||
Reference in New Issue
Block a user