blob: 6826ed43524dafb040aeaf471a092553694704b7 (
plain)
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
|
#pragma once
#include <QString>
// TODO: tests
// - empty fields
// - too long fields (use arrays instead of QByteArray?)
// - try to break salt/hash fields
// TODO: make all public fields private
class User
{
public:
/*!
* \brief User - create user with given `login` and `password`. `salt` and
* `passwordHash` will be generated and stored instead of real `password`.
* Will *not* be committed to db automatically.
* \param login - max len is 32
* \param password - max len is 32
*/
explicit User(const QString &login, const QString &password);
public:
/*!
* \brief getDbId - check if user with corresponding `link` exists in db
* and return db id if any
* \return id on success, 0 otherwise
*/
int getDbId();
/*!
* \brief createInDb - create user in db
* \return new user id on success, 0 otherwise
*/
int createInDb();
/*!
* \brief getOrInsertDbId - get existing user id or try to create a new
* user and get its id
* \return existing or new user id on success, 0 otherwise
*/
int getOrInsertDbId();
bool verifyPassword(const QString &password);
public:
int id{0};
QString login;
QByteArray salt;
QByteArray passwordHash;
private:
QByteArray hashPassword(const QString &password);
};
|