2014-03-13 06:29:33 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
var
|
|
|
|
_ = require('_'),
|
|
|
|
ko = require('ko'),
|
2014-08-25 23:49:01 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
Utils = require('Common/Utils'),
|
2014-08-21 23:08:34 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
PgpStore = require('Stores/User/Pgp'),
|
2014-08-25 15:10:51 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
kn = require('Knoin/Knoin'),
|
|
|
|
AbstractView = require('Knoin/AbstractView');
|
2014-08-21 23:08:34 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
/**
|
|
|
|
* @constructor
|
|
|
|
* @extends AbstractView
|
|
|
|
*/
|
|
|
|
function AddOpenPgpKeyPopupView()
|
|
|
|
{
|
|
|
|
AbstractView.call(this, 'Popups', 'PopupsAddOpenPgpKey');
|
2014-08-21 23:08:34 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
this.key = ko.observable('');
|
|
|
|
this.key.error = ko.observable(false);
|
|
|
|
this.key.focus = ko.observable(false);
|
2014-08-25 15:10:51 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
this.key.subscribe(function() {
|
|
|
|
this.key.error(false);
|
|
|
|
}, this);
|
|
|
|
|
|
|
|
this.addOpenPgpKeyCommand = Utils.createCommand(this, function() {
|
|
|
|
|
|
|
|
var
|
|
|
|
count = 30,
|
|
|
|
match = null,
|
|
|
|
key = Utils.trim(this.key()),
|
|
|
|
reg = /[\-]{3,6}BEGIN[\s]PGP[\s](PRIVATE|PUBLIC)[\s]KEY[\s]BLOCK[\-]{3,6}[\s\S]+?[\-]{3,6}END[\s]PGP[\s](PRIVATE|PUBLIC)[\s]KEY[\s]BLOCK[\-]{3,6}/gi,
|
|
|
|
openpgpKeyring = PgpStore.openpgpKeyring,
|
|
|
|
done = false;
|
|
|
|
|
|
|
|
if (/[\n]/.test(key))
|
|
|
|
{
|
|
|
|
key = key.replace(/[\r]+/g, '').replace(/[\n]{2,}/g, '\n\n');
|
|
|
|
}
|
|
|
|
|
|
|
|
this.key.error('' === key);
|
|
|
|
|
|
|
|
if (!openpgpKeyring || this.key.error())
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
do
|
|
|
|
{
|
|
|
|
match = reg.exec(key);
|
2016-07-13 04:23:08 +08:00
|
|
|
if (match && 0 < count)
|
2014-04-27 00:09:38 +08:00
|
|
|
{
|
2016-06-30 08:02:45 +08:00
|
|
|
if (match[0] && match[1] && match[2] && match[1] === match[2])
|
2014-04-27 00:09:38 +08:00
|
|
|
{
|
2016-06-30 08:02:45 +08:00
|
|
|
if ('PRIVATE' === match[1])
|
2014-08-21 23:08:34 +08:00
|
|
|
{
|
2016-06-30 08:02:45 +08:00
|
|
|
openpgpKeyring.privateKeys.importKey(match[0]);
|
|
|
|
}
|
|
|
|
else if ('PUBLIC' === match[1])
|
|
|
|
{
|
|
|
|
openpgpKeyring.publicKeys.importKey(match[0]);
|
2014-08-21 23:08:34 +08:00
|
|
|
}
|
2014-04-27 00:09:38 +08:00
|
|
|
}
|
2014-08-21 23:08:34 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
count -= 1;
|
2016-07-13 04:23:08 +08:00
|
|
|
done = false;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
done = true;
|
2014-04-27 00:09:38 +08:00
|
|
|
}
|
2016-06-30 08:02:45 +08:00
|
|
|
}
|
2016-07-13 04:23:08 +08:00
|
|
|
while (!done);
|
2014-03-13 06:29:33 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
openpgpKeyring.store();
|
2014-07-12 02:57:22 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
require('App/User').default.reloadOpenPgpKeys();
|
|
|
|
Utils.delegateRun(this, 'cancelCommand');
|
2014-03-13 06:29:33 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
return true;
|
|
|
|
});
|
2014-08-21 23:08:34 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
kn.constructorEnd(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
kn.extendAsViewModel(['View/Popup/AddOpenPgpKey', 'PopupsAddOpenPgpKeyViewModel'], AddOpenPgpKeyPopupView);
|
|
|
|
_.extend(AddOpenPgpKeyPopupView.prototype, AbstractView.prototype);
|
2014-03-13 06:29:33 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
AddOpenPgpKeyPopupView.prototype.clearPopup = function()
|
|
|
|
{
|
|
|
|
this.key('');
|
|
|
|
this.key.error(false);
|
|
|
|
};
|
2014-03-13 06:29:33 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
AddOpenPgpKeyPopupView.prototype.onShow = function()
|
|
|
|
{
|
|
|
|
this.clearPopup();
|
|
|
|
};
|
2014-03-13 06:29:33 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
AddOpenPgpKeyPopupView.prototype.onShowWithDelay = function()
|
|
|
|
{
|
|
|
|
this.key.focus(true);
|
|
|
|
};
|
2014-03-13 06:29:33 +08:00
|
|
|
|
2016-06-30 08:02:45 +08:00
|
|
|
module.exports = AddOpenPgpKeyPopupView;
|