diff options
Diffstat (limited to 'include/odhtdb/Database.hpp')
-rw-r--r-- | include/odhtdb/Database.hpp | 56 |
1 files changed, 32 insertions, 24 deletions
diff --git a/include/odhtdb/Database.hpp b/include/odhtdb/Database.hpp index 12c618b..1e4d470 100644 --- a/include/odhtdb/Database.hpp +++ b/include/odhtdb/Database.hpp @@ -55,14 +55,14 @@ namespace odhtdb const Hash *nodeHash; u64 timestamp; // In microseconds - const User *creatorUser; - std::string name; + const Signature::PublicKey *creatorPublicKey; + const DataView groupId; - DatabaseCreateNodeRequest(const Hash *_nodeHash, u64 _timestamp, const User *_creatorUser, std::string &&_name) : + DatabaseCreateNodeRequest(const Hash *_nodeHash, u64 _timestamp, const Signature::PublicKey *_creatorPublicKey, const DataView &_groupId) : nodeHash(_nodeHash), timestamp(_timestamp), - creatorUser(_creatorUser), - name(std::move(_name)) + creatorPublicKey(_creatorPublicKey), + groupId(_groupId) { } @@ -75,14 +75,14 @@ namespace odhtdb const Hash *nodeHash; const Hash *requestHash; u64 timestamp; // In microseconds - const User *creatorUser; + const Signature::PublicKey *creatorPublicKey; const DataView decryptedData; - DatabaseAddNodeRequest(const Hash *_nodeHash, const Hash *_requestHash, u64 _timestamp, const User *_creatorUser, const DataView &_decryptedData) : + DatabaseAddNodeRequest(const Hash *_nodeHash, const Hash *_requestHash, u64 _timestamp, const Signature::PublicKey *_creatorPublicKey, const DataView &_decryptedData) : nodeHash(_nodeHash), requestHash(_requestHash), timestamp(_timestamp), - creatorUser(_creatorUser), + creatorPublicKey(_creatorPublicKey), decryptedData(_decryptedData) { @@ -96,16 +96,16 @@ namespace odhtdb const Hash *nodeHash; const Hash *requestHash; u64 timestamp; // In microseconds - const User *creatorUser; - const User *userToAdd; - const Group *groupToAddUserTo; + const Signature::PublicKey *creatorPublicKey; + const Signature::PublicKey *userToAddPublicKey; + const DataView groupToAddUserTo; - DatabaseAddUserRequest(const Hash *_nodeHash, const Hash *_requestHash, u64 _timestamp, const User *_creatorUser, const User *_userToAdd, const Group *_groupToAddUserTo) : + DatabaseAddUserRequest(const Hash *_nodeHash, const Hash *_requestHash, u64 _timestamp, const Signature::PublicKey *_creatorPublicKey, const Signature::PublicKey *_userToAddPublicKey, const DataView &_groupToAddUserTo) : nodeHash(_nodeHash), requestHash(_requestHash), timestamp(_timestamp), - creatorUser(_creatorUser), - userToAdd(_userToAdd), + creatorPublicKey(_creatorPublicKey), + userToAddPublicKey(_userToAddPublicKey), groupToAddUserTo(_groupToAddUserTo) { @@ -115,7 +115,7 @@ namespace odhtdb class DatabaseCreateResponse { public: - DatabaseCreateResponse(LocalUser *nodeAdminUser, const std::shared_ptr<OwnedMemory> &key, const std::shared_ptr<Hash> &hash); + DatabaseCreateResponse(LocalUser *nodeAdminUser, std::shared_ptr<OwnedMemory> key, std::shared_ptr<Hash> hash); const LocalUser* getNodeAdminUser() const; // Size of encryption key is odhtdb::KEY_BYTE_SIZE (found in Encryption.hpp) @@ -144,32 +144,40 @@ namespace odhtdb reponseKeyInfoHash = other.reponseKeyInfoHash; } }; + + using CreateNodeCallbackFunc = std::function<void(const DatabaseCreateNodeRequest&)>; + using AddNodeCallbackFunc = std::function<void(const DatabaseAddNodeRequest&)>; + using AddUserCallbackFunc = std::function<void(const DatabaseAddUserRequest&)>; + + struct DatabaseCallbackFuncs + { + CreateNodeCallbackFunc createNodeCallbackFunc; + AddNodeCallbackFunc addNodeCallbackFunc; + AddUserCallbackFunc addUserCallbackFunc; + }; + class Database { DISABLE_COPY(Database) friend class DatabaseStorage; public: - Database(const char *bootstrapNodeAddr, u16 port, const boost::filesystem::path &storageDir); + Database(const char *bootstrapNodeAddr, u16 port, const boost::filesystem::path &storageDir, DatabaseCallbackFuncs callbackFuncs); ~Database(); // Safe to call multiple times with same node hash, will be ignored if the node is already beeing seeded void seed(const DatabaseNode &nodeToSeed); void stopSeeding(const Hash &nodeHash); + void loadNode(const Hash &nodeHash); // Throws DatabaseCreateException on failure. - std::unique_ptr<DatabaseCreateResponse> create(const std::string &ownerName, const std::string &nodeName); + std::unique_ptr<DatabaseCreateResponse> create(); // Throws DatabaseCreateException on failure. - std::unique_ptr<DatabaseCreateResponse> create(const std::string &ownerName, const Signature::KeyPair &keyPair, const std::string &nodeName); + std::unique_ptr<DatabaseCreateResponse> create(const Signature::KeyPair &creatorKeyPair); // Throws PermissionDeniedException if user @userToPerformActionWith is not allowed to add data to node void addData(const DatabaseNode &nodeInfo, const LocalUser *userToPerformActionWith, DataView dataToAdd); // Throws PermissionDeniedException if user @userToPerformActionWith is not allowed to add user @userToAdd to group @groupToAddUserTo - void addUser(const DatabaseNode &nodeInfo, const LocalUser *userToPerformActionWith, const std::string &userToAddName, const Signature::PublicKey &userToAddPublicKey, Group *groupToAddUserTo); - - void setOnCreateNodeCallback(std::function<void(const DatabaseCreateNodeRequest&)> callbackFunc); - void setOnAddNodeCallback(std::function<void(const DatabaseAddNodeRequest&)> callbackFunc); - void setOnAddUserCallback(std::function<void(const DatabaseAddUserRequest&)> callbackFunc); + void addUser(const DatabaseNode &nodeInfo, const LocalUser *userToPerformActionWith, const Signature::PublicKey &userToAddPublicKey, Group *groupToAddUserTo); - DatabaseStorage& getStorage(); ntp::NtpTimestamp getSyncedTimestampUtc() const; private: void deserializeCreateRequest(const std::shared_ptr<dht::Value> &value, const Hash &hash, const std::shared_ptr<OwnedMemory> encryptionKey); |