Adding Group Manager
Change-Id: I033c9a71d052b6346c1be33004deb9d5d9b359e1
Refs: #3015
diff --git a/src/group-manager-db.cpp b/src/group-manager-db.cpp
index 7a955b5..ec0473d 100644
--- a/src/group-manager-db.cpp
+++ b/src/group-manager-db.cpp
@@ -20,6 +20,7 @@
*/
#include "group-manager-db.hpp"
+#include "algo/rsa.hpp"
#include <sqlite3.h>
#include <boost/filesystem.hpp>
@@ -46,7 +47,8 @@
" member_id INTEGER PRIMARY KEY, \n"
" schedule_id INTEGER NOT NULL, \n"
" member_name BLOB NOT NULL, \n"
- " member_cert BLOB NOT NULL, \n"
+ " key_name BLOB NOT NULL, \n"
+ " pubkey BLOB NOT NULL, \n"
" FOREIGN KEY(schedule_id) \n"
" REFERENCES schedules(schedule_id) \n"
" ON DELETE CASCADE \n"
@@ -155,21 +157,24 @@
return result;
}
-std::map<Name, Data>
+std::map<Name, Buffer>
GroupManagerDB::getScheduleMembers(const std::string& name) const
{
- std::map<Name, Data> result;
+ std::map<Name, Buffer> result;
Sqlite3Statement statement(m_impl->m_database,
- "SELECT member_name, member_cert\
+ "SELECT key_name, pubkey\
FROM members JOIN schedules\
ON members.schedule_id=schedules.schedule_id\
WHERE schedule_name=?");
statement.bind(1, name, SQLITE_TRANSIENT);
-
result.clear();
+
+ const uint8_t* keyBytes = nullptr;
while (statement.step() == SQLITE_ROW) {
- result.insert(std::pair<Name, Data>(Name(statement.getBlock(0)),
- Data(statement.getBlock(1))));
+ keyBytes = statement.getBlob(1);
+ const int& keyBytesSize = statement.getSize(1);
+ result.insert(std::pair<Name, Buffer>(Name(statement.getBlock(0)),
+ Buffer(keyBytes, keyBytesSize)));
}
return result;
}
@@ -248,22 +253,6 @@
return result;
}
-Data
-GroupManagerDB::getMemberCert(const Name& identity) const
-{
- Sqlite3Statement statement(m_impl->m_database,
- "SELECT member_cert FROM members WHERE member_name=?");
- statement.bind(1, identity.wireEncode(), SQLITE_TRANSIENT);
- Data result;
- if (statement.step() == SQLITE_ROW) {
- result.wireDecode(statement.getBlock(0));
- }
- else {
- BOOST_THROW_EXCEPTION(Error("Cannot get the result from database"));
- }
- return result;
-}
-
std::string
GroupManagerDB::getMemberSchedule(const Name& identity) const
{
@@ -285,21 +274,24 @@
}
void
-GroupManagerDB::addMember(const std::string& scheduleName, const Data& certificate)
+GroupManagerDB::addMember(const std::string& scheduleName, const Name& keyName,
+ const Buffer& key)
{
int scheduleId = m_impl->getScheduleId(scheduleName);
if (scheduleId == -1)
BOOST_THROW_EXCEPTION(Error("The schedule dose not exist"));
- IdentityCertificate cert(certificate);
- Name memberName = cert.getPublicKeyName().getPrefix(-1);
+ // need to be changed in the future
+ Name memberName = keyName.getPrefix(-1);
Sqlite3Statement statement(m_impl->m_database,
- "INSERT INTO members(schedule_id, member_name, member_cert)\
- values (?, ?, ?)");
+ "INSERT INTO members(schedule_id, member_name, key_name, pubkey)\
+ values (?, ?, ?, ?)");
statement.bind(1, scheduleId);
statement.bind(2, memberName.wireEncode(), SQLITE_TRANSIENT);
- statement.bind(3, certificate.wireEncode(), SQLITE_TRANSIENT);
+ statement.bind(3, keyName.wireEncode(), SQLITE_TRANSIENT);
+ statement.bind(4, key.buf(), key.size(), SQLITE_TRANSIENT);
+
if (statement.step() != SQLITE_DONE)
BOOST_THROW_EXCEPTION(Error("Cannot add the member to database"));
}