aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-05-15 20:39:12 +0200
committerdec05eba <dec05eba@protonmail.com>2020-08-18 23:25:46 +0200
commit585d084fd3a5da06e04a5c95e41733009799a20e (patch)
tree2e16376897c238f25029d3c2dfc8641094b255e7 /include
parente52be3a6b82025b6795b73d448381953821d18bb (diff)
Allow storing user without nodes
Diffstat (limited to 'include')
-rw-r--r--include/odhtdb/DataView.hpp1
-rw-r--r--include/odhtdb/Database.hpp5
-rw-r--r--include/odhtdb/DatabaseStorage.hpp15
3 files changed, 21 insertions, 0 deletions
diff --git a/include/odhtdb/DataView.hpp b/include/odhtdb/DataView.hpp
index 0ecf9fb..2f22d83 100644
--- a/include/odhtdb/DataView.hpp
+++ b/include/odhtdb/DataView.hpp
@@ -12,6 +12,7 @@ namespace odhtdb
DataView() : data(nullptr), size(0) {}
DataView(void *_data, usize _size) : data(_data), size(_size) {}
bool operator == (const DataView &other) const;
+ bool operator != (const DataView &other) const;
void *data;
usize size;
diff --git a/include/odhtdb/Database.hpp b/include/odhtdb/Database.hpp
index 43c1ad9..ca9369f 100644
--- a/include/odhtdb/Database.hpp
+++ b/include/odhtdb/Database.hpp
@@ -176,6 +176,11 @@ namespace odhtdb
ntp::NtpTimestamp getSyncedTimestampUtc() const;
+ bool doesStoredUserExist(const std::string &username) const;
+
+ // Throws SqlExecException if user with same name already exists
+ void storeUserWithoutNodes(const std::string &username, const std::string &password);
+
// Username has to be either unique or if it's the same as existing one, then password has to match.
// Node has to be unique for the user.
// Throws DatabaseStorageWrongPassword or SqlExecException on failure (if username is not unique in node).
diff --git a/include/odhtdb/DatabaseStorage.hpp b/include/odhtdb/DatabaseStorage.hpp
index 613f2e8..f03bd9e 100644
--- a/include/odhtdb/DatabaseStorage.hpp
+++ b/include/odhtdb/DatabaseStorage.hpp
@@ -58,6 +58,12 @@ namespace odhtdb
DatabaseStorageWrongPassword(const std::string &errMsg) : DatabaseStorageException(errMsg) {}
};
+ class DatabaseStorageNoSuchStoredUser : public DatabaseStorageException
+ {
+ public:
+ DatabaseStorageNoSuchStoredUser(const std::string &errMsg) : DatabaseStorageException(errMsg) {}
+ };
+
const int PASSWORD_SALT_LEN = 16;
const int HASHED_PASSWORD_LEN = 32;
@@ -111,6 +117,11 @@ namespace odhtdb
// Throws DatabaseStorageNotFound if user doesn't exist in node
u64 getUserActionCounter(const Hash &nodeHash, const Signature::PublicKey &userPublicKey) const;
+ bool doesStoredUserExist(const std::string &username) const;
+
+ // Throws SqlExecException if user with same name already exists
+ void storeUserWithoutNodes(const std::string &username, const std::string &password);
+
// Username has to be either unique or if it's the same as existing one, then password has to match.
// Node has to be unique for the user.
// Throws DatabaseStorageWrongPassword or SqlExecException on failure (if username is not unique in node).
@@ -118,6 +129,7 @@ namespace odhtdb
// Returns nodes, public key and private key of encrypted user.
// Throws DatabaseStorageWrongPassword if password for the stored user is wrong.
+ // Throws DatabaseStorageNoSuchStoredUser if user doesn't exist.
std::vector<NodeUserKeyPair> getStoredUserNodeDataDecrypted(const std::string &username, const std::string &password);
// Returns true and node decryption key if node exists and we have the decryption key,
@@ -148,6 +160,9 @@ namespace odhtdb
void setNodeAddDataDecrypted(i64 rowId);
void setNodeAddDataDecryptedData(i64 rowId, const DataView &decryptedData);
+
+ // Throws DatabaseStorageNoSuchStoredUser or DatabaseStorageWrongPassword
+ i64 getStoredUserId(const std::string &username, const DataView &hashedPassword);
private:
Database *database;
sqlite3 *sqliteDb;