added db_insert_user
This commit is contained in:
1 parent
4f67cf11bd
commit
33e8bed178
3 files changed
+77
-11
No files matched your search
@@ -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
|
#pragma once
|
||||||
|
|
||||||
#define CREATE_TABLE_USERS \
|
#define CREATE_TABLE_USERS \
|
||||||
"create table if not exists users(" \
|
"create table if not exists users(" \
|
||||||
"id integer primary key autoincrement," \
|
"id integer primary key autoincrement," \
|
||||||
"username text unique," \
|
"username text unique," \
|
||||||
"email char(50) unique," \
|
"email char(50) unique," \
|
||||||
"password char(150) not null," \
|
"password char(150) not null," \
|
||||||
"user_group char(50) default 'users'," \
|
"user_group char(50) default 'users'," \
|
||||||
"is_superuser boolean default false" \
|
"is_superuser boolean default false" \
|
||||||
");"
|
");"
|
||||||
|
|
||||||
#define INSERT_USER_SQL \
|
#define INSERT_USER_SQL \
|
||||||
@@ -16,4 +16,11 @@
|
|||||||
|
|
||||||
#define SELECT_ALL_USERS_SQL "select * from users"
|
#define SELECT_ALL_USERS_SQL "select * from users"
|
||||||
#define SELECT_USER_BY_USERNAME_SQL "select * from users where username = ?"
|
#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;
|
bool is_superuser;
|
||||||
} User;
|
} User;
|
||||||
|
|
||||||
User *new_user(int id, const char *username, const char *password, const char *email,
|
User *new_user(int id, const char *username, const char *password,
|
||||||
const char *group, bool is_superuser);
|
const char *email, const char *group, bool is_superuser);
|
||||||
|
|
||||||
void free_user(User *user);
|
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);
|
void db_get_users_from_file(const char *filename);
|
||||||
char *db_get_all_users();
|
char *db_get_all_users();
|
||||||
User *db_get_user_by_username(const char *username);
|
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