|
|
@ -27,7 +27,7 @@ const BlockStore = require("../storage/block");
|
|
|
|
author of the block, since we assume that the block will have been
|
|
|
|
author of the block, since we assume that the block will have been
|
|
|
|
encrypted with xsalsa20-poly1305 which is authenticated.
|
|
|
|
encrypted with xsalsa20-poly1305 which is authenticated.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
var validateLoginBlock = function (Env, publicKey, signature, block, _cb) { // FIXME BLOCKS
|
|
|
|
Block.validateLoginBlock = function (Env, publicKey, signature, block, _cb) {
|
|
|
|
var cb = Util.once(Util.mkAsync(_cb));
|
|
|
|
var cb = Util.once(Util.mkAsync(_cb));
|
|
|
|
|
|
|
|
|
|
|
|
// convert the public key to a Uint8Array and validate it
|
|
|
|
// convert the public key to a Uint8Array and validate it
|
|
|
@ -67,7 +67,7 @@ var validateLoginBlock = function (Env, publicKey, signature, block, _cb) { // F
|
|
|
|
// call back with (err) if unsuccessful
|
|
|
|
// call back with (err) if unsuccessful
|
|
|
|
if (!verified) { return void cb("E_COULD_NOT_VERIFY"); }
|
|
|
|
if (!verified) { return void cb("E_COULD_NOT_VERIFY"); }
|
|
|
|
|
|
|
|
|
|
|
|
return void cb(null, u8_block);
|
|
|
|
return void cb(null, block);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
Block.validateAncestorProof = function (Env, proof, _cb) {
|
|
|
|
Block.validateAncestorProof = function (Env, proof, _cb) {
|
|
|
@ -135,20 +135,26 @@ Block.writeLoginBlock = function (Env, safeKey, msg, _cb) {
|
|
|
|
previousKey = provenKey;
|
|
|
|
previousKey = provenKey;
|
|
|
|
}));
|
|
|
|
}));
|
|
|
|
}).nThen(function (w) {
|
|
|
|
}).nThen(function (w) {
|
|
|
|
validateLoginBlock(Env, publicKey, signature, block, w(function (e, _validatedBlock) {
|
|
|
|
Env.validateLoginBlock(publicKey, signature, block, w(function (e, _validatedBlock) {
|
|
|
|
if (e) {
|
|
|
|
if (e) {
|
|
|
|
w.abort();
|
|
|
|
w.abort();
|
|
|
|
return void cb(e);
|
|
|
|
return void cb(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!(_validatedBlock instanceof Uint8Array)) {
|
|
|
|
if (typeof(_validatedBlock) !== 'string') {
|
|
|
|
w.abort();
|
|
|
|
w.abort();
|
|
|
|
return void cb('E_INVALID_BLOCK');
|
|
|
|
return void cb('E_INVALID_BLOCK_RETURNED');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
validatedBlock = _validatedBlock;
|
|
|
|
validatedBlock = _validatedBlock;
|
|
|
|
}));
|
|
|
|
}));
|
|
|
|
}).nThen(function () {
|
|
|
|
}).nThen(function () {
|
|
|
|
BlockStore.write(Env, publicKey, Buffer.from(validatedBlock), function (err) {
|
|
|
|
var buffer;
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
buffer = Buffer.from(Nacl.util.decodeBase64(validatedBlock));
|
|
|
|
|
|
|
|
} catch (err) {
|
|
|
|
|
|
|
|
return void cb('E_BLOCK_DESERIALIZATION');
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
BlockStore.write(Env, publicKey, buffer, function (err) {
|
|
|
|
Env.Log.info('BLOCK_WRITE_BY_OWNER', {
|
|
|
|
Env.Log.info('BLOCK_WRITE_BY_OWNER', {
|
|
|
|
safeKey: safeKey,
|
|
|
|
safeKey: safeKey,
|
|
|
|
blockId: publicKey,
|
|
|
|
blockId: publicKey,
|
|
|
@ -185,7 +191,7 @@ Block.removeLoginBlock = function (Env, safeKey, msg, _cb) {
|
|
|
|
return void cb("INCORRECT_KEY");
|
|
|
|
return void cb("INCORRECT_KEY");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}).nThen(function () {
|
|
|
|
}).nThen(function () {
|
|
|
|
validateLoginBlock(Env, publicKey, signature, DELETE_BLOCK, function (e /*::, validatedBlock */) {
|
|
|
|
Env.validateLoginBlock(publicKey, signature, DELETE_BLOCK, function (e) {
|
|
|
|
if (e) { return void cb(e); }
|
|
|
|
if (e) { return void cb(e); }
|
|
|
|
BlockStore.archive(Env, publicKey, function (err) {
|
|
|
|
BlockStore.archive(Env, publicKey, function (err) {
|
|
|
|
Env.Log.info('ARCHIVAL_BLOCK_BY_OWNER_RPC', {
|
|
|
|
Env.Log.info('ARCHIVAL_BLOCK_BY_OWNER_RPC', {
|
|
|
|