aboutsummaryrefslogtreecommitdiff
path: root/include/odhtdb/Database.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/odhtdb/Database.hpp')
-rw-r--r--include/odhtdb/Database.hpp56
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);