#include "app-bundle.h"
#include "engine/ecryptfs-engine.h"
#include "key-manager/key-manager.h"
+#include <klay/dbus/variant.h>
+#include <klay/dbus/connection.h>
#include "rmi/external-encryption.h"
launchpad.launch("org.tizen.ode-gui", bundle);
}
+void externalCallback(dbus::Variant parameters)
+{
+ INFO("SD Card State Changed");
+ int intparams[6];
+ char* strparams[7];
+
+ parameters.get("(issssssisibii)",
+ &intparams[0], // block type: 0 - scsi, 1 : mmc
+ &strparams[0], // devnode
+ &strparams[1], // syspath
+ &strparams[2], // usage
+ &strparams[3], // fs type
+ &strparams[4], // fs version
+ &strparams[5], // fs uuid enc
+ &intparams[1], // readonly: 0 - rw, 1 - ro
+ &strparams[6], // mount point
+ &intparams[2], // state: 0 - unmount, 1 - mount
+ &intparams[3], // primary: 0 - flase, 1 - true
+ &intparams[4], // flags: 1 - unmounted 2 - broken filesystem 4 - no filesystem 8 - not supported 16 - readonly
+ &intparams[5]); // strage id
+ if(intparams[2] == 0) {
+ INFO("Unmounted!!!");
+ }
+ else {
+ INFO("Mounted!!!");
+ // TODO
+ // Password Popup
+ std::string pw = "tizen";
+ KeyManager::data pwData(pw.begin(), pw.end());
+ engine.mount(keyManager.getDEK(pwData));
+ }
+}
+
+void externalAddEventReceiver()
+{
+ dbus::Connection &systemDBus = dbus::Connection::getSystem();
+ dbus::Connection::SubscriptionId id;
+
+ id = systemDBus.subscribeSignal("",
+ "org.tizen.system.storage.BlockManager",
+ "DeviceChanged",
+ "/Org/Tizen/System/Storage/Block/Manager",
+ externalCallback);
+ INFO("Event ID: " + std::to_string(id));
+}
+
+void externalCheckMount()
+{
+ INFO("EcryptfsEncrypt");
+ if (!engine.isMountpointMounted(EXTERNAL_STORAGE_PATH)) {
+ INFO("SD Card not inserted!");
+ }
+ else {
+ INFO("SD Card inserted!");
+ if (engine.checkEncryptMetaData(ORIG_META_FILE_PATH) == 0) {
+ INFO("SD Card encrypted!");
+ if (engine.isEcryptfsMountpointMounted(EXTERNAL_STORAGE_PATH) == 0) {
+ INFO("Already Ecryptfs Mounted");
+ }
+ else {
+ std::string pw = "tizen";
+ KeyManager::data pwData(pw.begin(), pw.end());
+ engine.mount(keyManager.getDEK(pwData));
+ }
+ }
+ else {
+ INFO("SD Card not encrypted!");
+ }
+ }
+}
+
}
ExternalEncryption::ExternalEncryption(ODEControlContext& ctx) :
context.registerParametricMethod(this, "", (int)(ExternalEncryption::decrypt)(std::string));
context.registerParametricMethod(this, "", (int)(ExternalEncryption::changePassword)(std::string, std::string));
context.registerNonparametricMethod(this, "", (int)(ExternalEncryption::getState));
+
+ externalAddEventReceiver();
+ externalCheckMount();
}