Subversion Repositories RepoView

Rev

Rev 3 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

/* $Id: sqlite.c 1 2024-08-20 19:18:25Z nishi $ */

#include "rv_db.h"

#include "../../config.h"

#include "rv_util.h"

#include <sqlite3.h>

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

sqlite3* sql;

void rv_init_db(void){
        int ret;
        ret = sqlite3_open(DB_ROOT "/db.sqlite3", &sql);
        if(ret != SQLITE_OK){
                rv_error_http();
                printf("SQLite3 database error\n");
                exit(1);
        }
        char* err;
        ret = sqlite3_exec(
                sql,
                "create table if not exists users(user text, password text)",
                NULL,
                NULL,
                &err
        );
        if(ret != SQLITE_OK){
                sqlite3_free(err);
                rv_error_http();
                printf("SQLite3 database error\n");
                exit(1);
        }
        ret = sqlite3_exec(
                sql,
                "create table if not exists tokens(user text, token text)",
                NULL,
                NULL,
                &err
        );
        if(ret != SQLITE_OK){
                sqlite3_free(err);
                rv_error_http();
                printf("SQLite3 database error\n");
                exit(1);
        }
}

void rv_close_db(void){
        sqlite3_close(sql);
}

int count = 0;

int sqlcount(void* param, int ncol, char** row, char** col){
        count = ncol;
        fprintf(stderr, "%d\n", ncol);
        return 0;
}

bool rv_has_user(const char* username){
        char* err;
        char cbuf[2];
        cbuf[1] = 0;
        char* query = rv_strdup("select * from users where user = '");
        int i;
        for(i = 0; username[i] != 0; i++){
                if(username[i] == '\''){
                        cbuf[0] = username[i];
                        char* tmp = query;
                        tmp = rv_strcat(tmp, cbuf);
                        free(tmp);
                        cbuf[0] = username[i];
                        tmp = query;
                        query = rv_strcat(tmp, cbuf);
                        free(tmp);
                }else{
                        cbuf[0] = username[i];
                        char* tmp = query;
                        query = rv_strcat(tmp, cbuf);
                        free(tmp);
                }
        }
        char* tmp = query;
        query = rv_strcat(tmp, "'");
        free(tmp);
        int ret;
        fprintf(stderr, "%s\n", query);
        ret = sqlite3_exec(
                sql,
                query,
                sqlcount,
                NULL,
                &err
        );
        free(query);
        if(ret != SQLITE_OK){
                sqlite3_free(err);
        }
        return count > 0;
}