-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtoken.h
75 lines (62 loc) · 2.39 KB
/
token.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#pragma once
#include "database.h"
#include "file.h"
#include <string>
#define TOKENS_DATABASE "data/tokens.db"
namespace token
{
inline SQLite::Database &get_database()
{
static auto &database = []() -> SQLite::Database &
{
static SQLite::Database database(file::get_data_root() + TOKENS_DATABASE,
SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE | SQLite::OPEN_FULLMUTEX);
database.exec("CREATE TABLE IF NOT EXISTS tokens("
"token TEXT PRIMARY KEY NOT NULL,"
"id TEXT NOT NULL,"
"creationtime INT NOT NULL)");
return database;
}();
return database;
}
inline std::string get_token_user(const std::string &token)
{
std::string result;
if (!database::exec_steps<std::string>(
get_database(), "SELECT id FROM tokens WHERE token=@token", { "@token", token },
[&](const SQLite::Statement &statement) { result = statement.getColumn(0).getString(); }))
return {};
return result;
}
inline bool add_user_token(const std::string &user_id, const std::string &token)
{
auto time = std::time(nullptr);
return database::exec<std::string, std::string, time_t>(
get_database(), "INSERT INTO tokens (token, id, creationtime) VALUES (@token, @id, @creationtime)",
{ "@token", token }, { "@id", user_id }, { "@creationtime", time });
}
inline bool does_token_exist(const std::string &token)
{
return database::exec_steps<std::string>(get_database(), "SELECT 1 FROM tokens WHERE token=@token",
{ "@token", token });
}
inline std::vector<std::string> get_user_tokens(const std::string &user_id)
{
std::vector<std::string> tokens;
if (!database::exec_steps<std::string>(
get_database(), "SELECT token FROM tokens WHERE id=@id ORDER BY creationtime", { "@id", user_id },
[&](const SQLite::Statement &statement) { tokens.push_back(statement.getColumn(0)); }))
return {};
return tokens;
}
inline bool erase_token(const std::string &token)
{
return database::exec<std::string>(get_database(), "DELETE FROM tokens WHERE token=@token",
{ "@token", token });
}
inline bool erase_all_user_tokens(const std::string &user_id)
{
return database::exec<std::string>(get_database(), "DELETE FROM tokens WHERE id=@user_id",
{ "@user_id", user_id });
}
}