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"));
 }