#pragma once #include // 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); };