[KeyManager] Update Key after saving in key manager.
authorTomasz Marciniak <t.marciniak@samsung.com>
Fri, 3 Jul 2015 13:45:36 +0000 (15:45 +0200)
committerPawel Andruszkiewicz <p.andruszkie@samsung.com>
Tue, 7 Jul 2015 06:49:10 +0000 (15:49 +0900)
[Verification] Code compiles without errors.

Change-Id: I23c11fee44cb95a747294b95d96a853547e79a01
Signed-off-by: Tomasz Marciniak <t.marciniak@samsung.com>
src/keymanager/keymanager_api.js
src/keymanager/keymanager_instance.cc

index 5d46e95..0fa50e1 100755 (executable)
@@ -95,25 +95,50 @@ function updateInternalData(internal, data) {
 }
 
 function Key(name, password, extractable, keyType, rawKey) {
+  var _internal = {
+    name: converter.toString(name),
+    password: (password ? converter.toString(password) : null),
+    extractable: !!extractable,  // make sure it is boolean
+    keyType: (KeyType.hasOwnProperty(keyType) ? keyType : KeyType.KEY_NONE),
+    rawKey: (rawKey ? converter.toString(rawKey) : '')
+  };
+
   Object.defineProperties(this, {
     name: {
-      value: converter.toString(name),
+      get: function () { return _internal.name; },
+      set: function () {},
       enumerable: true
     },
     password: {
-      value: password ? converter.toString(password) : null,
+      get: function () { return _internal.password; },
+      set: function (value) {
+        if (value instanceof InternalData) {
+          _internal.password = value.password;
+        }
+      },
       enumerable: true
     },
     extractable: {
-      value: !!extractable,//make sure it is boolean
+      get: function () { return _internal.extractable; },
+      set: function () {},
       enumerable: true
     },
     keyType: {
-      value: KeyType.hasOwnProperty(keyType) ? keyType : KeyType.KEY_NONE,
+      get: function () { return _internal.keyType; },
+      set: function (value) {
+        if (value instanceof InternalData && KeyType.hasOwnProperty(value.keyType)) {
+          _internal.keyType = value.keyType;
+        }
+      },
       enumerable: true
     },
     rawKey: {
-      value: converter.toString(rawKey),
+      get: function () { return _internal.rawKey; },
+      set: function (value) {
+        if (value instanceof InternalData) {
+          _internal.rawKey = value.rawKey;
+        }
+      },
       enumerable: true
     }
   });
@@ -140,6 +165,8 @@ Key.prototype.save = function() {
     }
   ]);
 
+  var that = this;
+
   native.call('KeyManager_saveKey', {
     key: this,
     rawKey: stripPemString(args.rawKey)
@@ -149,6 +176,7 @@ Key.prototype.save = function() {
         args.errorCallback(native.getErrorObject(msg));
       }
     } else {
+      updateInternalData(that, {rawKey: stripPemString(args.rawKey), keyType: msg.keyType});
       native.callIfPossible(args.successCallback);
     }
   });
index 6dcb648..d94c80f 100755 (executable)
@@ -360,6 +360,16 @@ void KeyManagerInstance::SaveKey(const picojson::value& args,
       }
       common::tools::ReportError(result, &response->get<picojson::object>());
     } else {
+      //as key_type is determined inside key manager during storing keys
+      //we have to get saved key and check key_type again.
+      ckmc_key_s * saved_key = nullptr;
+      ret = ckmc_get_key(alias.c_str(), pass.c_str(), &saved_key);
+      if (CKMC_ERROR_NONE == ret) {
+        picojson::object& obj = response->get<picojson::object>();
+        obj["keyType"] = picojson::value(KeyTypeToString(saved_key->key_type));
+        ckmc_key_free(saved_key);
+      }
+
       common::tools::ReportSuccess(response->get<picojson::object>());
     }