Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions components/devices/class.interface.js
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,18 @@ module.exports = class Interface {

}

["close", "end", "error"].forEach((event) => {
stream.on(event, (...args) => {
socket.emit(event, ...args);
});
});

stream.once("destroy", () => {
writable.destory();
readable.destroy();
socket.destory();
});

stream.once("close", () => {

// feedback
Expand All @@ -236,9 +248,11 @@ module.exports = class Interface {
// on what instance is the error thrown?

// destroy everything
socket.destroy();
readable.destroy();
writable.destroy();
//socket.destroy();
//readable.destroy();
//writable.destroy();
//socket.end();
//socket.emit("close");

});

Expand All @@ -250,6 +264,7 @@ module.exports = class Interface {

process.nextTick(() => {

//socket.emit("connect")?
socket.emit("open");

writable.pipe(stream);
Expand Down
7 changes: 6 additions & 1 deletion components/endpoints/class.command.js
Original file line number Diff line number Diff line change
Expand Up @@ -329,11 +329,16 @@ module.exports = class Command {

if (abort) {
timer(abort, false);
return;
}

try {
params = params.map((obj) => {

if (this.params.length === 0) {
return;
}

let param = this.params.find((param) => {
return param.key === obj.key;
});
Expand All @@ -347,7 +352,7 @@ module.exports = class Command {
});
} catch (err) {

logger.warn(err, `Passed params to command "${this.name}" are invalid`, params);
logger.warn(err, `Passed params on endpoint to command "${this.name}" (${this._id}) are invalid`, params);

timer(err, false);
return;
Expand Down
15 changes: 15 additions & 0 deletions components/store/class.store.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,21 @@ module.exports = class Store extends Item {
//item: Joi.string().allow(null).default(null),
uuid: Joi.string().default(() => {
return uuid.v4();
}).custom((value) => {

if (process.env.NODE_ENV === "development") {

let { logger } = Store.scope;

let msg = `Property .uuid is deprecated and will be removed in furhter version.\r\n`;
msg += `Use the .labels array instead as custom fields for identifing items.`;

logger.warn(msg);

}

return value;

})
});
}
Expand Down
4 changes: 2 additions & 2 deletions components/vault/class.secret.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ class Secret {
encrypt(text) {

if (!text) {
let err = new RangeError(`Value need to be set before encrypting, got: ${text}!`);
let err = new RangeError(`Value for secret "${this.name}" needs to be set before encrypting, got: ${text}!`);
err.field = this.key;
throw err;
}
Expand All @@ -122,7 +122,7 @@ class Secret {
decrypt() {

if (!this.value) {
let err = new RangeError(`Value need to be set before decrypting, got: ${this.value}!`);
let err = new RangeError(`Value for secret "${this.name}" needs to be set before decrypting, got: ${this.value}!`);
err.field = this.key;
throw err;
}
Expand Down
41 changes: 37 additions & 4 deletions components/vault/class.vault.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,22 @@ module.exports = class Vault extends Item {
return String(new mongodb.ObjectId());
}),
name: Joi.string().required(),
identifier: Joi.string().required(), // TODO: remove
identifier: Joi.string().allow(null).default(null).custom((value) => {

if (process.env.NODE_ENV === "development") {

let { logger } = Vault.scope;

let msg = `Property .identifier is deprecated and will be removed in furhter version.\r\n`;
msg += `Use the .labels array instead as custom fields for identifing items.`;

logger.warn(msg);

}

return value;

}), // TODO: remove
description: Joi.string().allow(null).default(null),
secrets: Joi.array().items(Secret.schema()).default([])
});
Expand Down Expand Up @@ -137,9 +152,27 @@ module.exports = class Vault extends Item {
* @returns {Object} Key = Secret key property, Value = decrypted value
*/
decrypt() {
return this.secrets.reduce((prev, cur) => {
prev[cur.key] = cur.decrypt();
return prev;
return this.secrets.reduce((obj, secret) => {

try {

// try to decrypt secret
// this can fail when no vaule is set
// e.g. default value = null,
// see https://github.com/OpenHausIO/backend/issues/568
obj[secret.key] = secret.decrypt();

} catch (err) {

let { logger } = Vault.scope;
logger.warn(err, `Could not decrypt secret "${secret.name}"`);

obj[secret.key] = null;

}

return obj;

}, {});
}

Expand Down
7 changes: 5 additions & 2 deletions helper/request.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ const promisify = require("./promisify.js");
*/
function perform(uri, options, cb) {

if(!options && !cb){
if (!options && !cb) {
options = {};
cb = () => {};
cb = () => { };
}

let { protocol } = new url.URL(uri);
Expand Down Expand Up @@ -69,6 +69,9 @@ function perform(uri, options, cb) {


request.on("error", (err) => {
//console.log("Logger in helper/request", err);
// this event listener does fire, but cb(err) call does nothing
// why in the first place does a 1:1 forwarding of events end in a abort error?
cb(err);
});

Expand Down
9 changes: 8 additions & 1 deletion routes/router.api.devices.js
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,14 @@ module.exports = (app, router) => {
// no clue why closed, cleanup anyway
// TODO: check code and decide if error or success closing
//stream.emit("close"); // desotroy() emit close event(!|?)
stream.destroy();
if (code === 1005 || code === 1000) {
console.log("end normaly");
stream.end();
//stream.emit("end");
} else {
//console.log("End destory");
stream.destroy();
}

}
});
Expand Down