summaryrefslogtreecommitdiff
path: root/src/user.h
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);
};