-
Notifications
You must be signed in to change notification settings - Fork 38
/
jarvis.min.js
1 lines (1 loc) · 4.34 KB
/
jarvis.min.js
1
"use strict";const utils=require("@iobroker/adapter-core");const JarvisConverter=require("./lib/jarvis.converter.js");const JarvisServer=require("./lib/jarvis.server.js");let adapter;let jarvis;function startAdapter(e){adapter=new utils.Adapter({...e||{},systemConfig:true,name:"jarvis"});adapter.on("ready",function(){const e=[];const t=new JarvisConverter(adapter);e.push(t.run());if(adapter.config.init!==true){e.push(new Promise(r=>{adapter.getForeignObject("system.adapter.web.0",(e,a)=>{adapter.log.debug("Web Configuration: "+JSON.stringify(a.native));adapter.getForeignObject("system.adapter."+adapter.namespace,(e,t)=>{if(e||!t||!t.native){adapter.setState("info.connection",false,true);return adapter.terminate("Error system.adapter."+adapter.namespace+" not found!",11)}t.native={init:true,socketHost:"",socketPort:8400+adapter.instance,socketSecure:a&&a.native&&a.native.secure!==undefined?a.native.secure:false,webProtocol:a&&a.native&&a.native.secure===true?"https":"http",certPublic:a&&a.native&&a.native.certPublic!==undefined?a.native.certPublic:"",certPrivate:a&&a.native&&a.native.certPrivate!==undefined?a.native.certPrivate:"",certChained:a&&a.native&&a.native.certChained!==undefined?a.native.certChained:"",authentication:a&&a.native&&a.native.auth===true?"group":"none",authenticationGroup:["system.group.administrator","system.group.user"],authenticationConfiguration:"group",authenticationConfigurationGroup:["system.group.administrator"]};adapter.log.debug("Write default config to jarvis: "+JSON.stringify(t.native));adapter.setForeignObject(t._id,t);r()})})}))}else{e.push(Promise.resolve(null))}if(adapter.config.socketSecure&&adapter.config.certPublic&&adapter.config.certPrivate){e.push(new Promise(r=>{adapter.getCertificates(adapter.config.certPublic,adapter.config.certPrivate,adapter.config.certChained,(e,t,a)=>{r(t)})}))}else if(adapter.config.init===true&&adapter.config.socketSecure&&(!adapter.config.certPublic||!adapter.config.certPrivate)){adapter.log.error("Secure connection is enabled, but no certificates have been selected! Thus, fallback to insecure connection!");e.push(new Promise(a=>{adapter.getForeignObject("system.adapter."+adapter.namespace,(e,t)=>{if(e||!t||!t.native){adapter.setState("info.connection",false,true);return adapter.terminate("Error system.adapter."+adapter.namespace+" not found!",11)}t.native={...t.native,socketSecure:false};adapter.log.debug("Reverted configuration due to incorrect secure connection settings: "+JSON.stringify(t.native));adapter.setForeignObject(t._id,t);a(null)})}))}else{e.push(Promise.resolve(null))}e.push(new Promise(a=>{adapter.getForeignObject("system.config",(e,t)=>a(t&&t.native&&t.native.secret||null))}));Promise.all(e).then(e=>{jarvis=new JarvisServer(adapter,{...adapter.config,port:adapter.config.socketPort,certificates:e[2],encryptionKey:e[3]});jarvis.init().loadBackups().listen().startServer();if(false){jarvis.proxy()}jarvis.on("CLIENT_LIST",e=>{adapter.setState("clients.connected",JSON.stringify(e,null,3),true)});adapter.setState("info.connection",true,true)}).catch(e=>{adapter.log.error("Error opening web socket: "+e.message)})});adapter.on("message",function(i){adapter.log.debug("Got message: "+JSON.stringify(i));if(i.command==="get-users"){Promise.allSettled([jarvis.getUsers(),jarvis.getGroups()]).then(e=>{const t=e[0].value;const a=e[1].value;adapter.sendTo(i.from,i.command,{users:t,groups:a},i.callback)})}else if(i.command==="get-hashed-token"&&i.message){}else if(i.command==="get-pro-status"){adapter.log.debug("Get pro data...");adapter.getForeignObject("system.meta.uuid",(e,n)=>{adapter.getState("info.pro",(e,t)=>{const a=t.val&&JSON.parse(t.val);const r={licence:t.val,licenceSignature:a&&a.signature,adapterInstance:adapter.instance,ioBrokerId:n.native.uuid};adapter.sendTo(i.from,i.command,r,i.callback)})})}else if(i.command==="get-backups"&&i.message&&i.message.id){const e="jarvis."+adapter.instance+"."+i.message.id;adapter.sendTo(i.from,i.command,jarvis.getBackupList(e),i.callback)}else if(i.command==="restore"&&i.message&&i.message.id&&i.message.date){const e="jarvis."+adapter.instance+"."+i.message.id;jarvis.restore(e,i.message.date)}});adapter.on("unload",function(t){try{adapter.log.info("Adapter stopped und unloaded.");adapter.setState("info.connection",false,true);jarvis.close();t()}catch(e){t()}});return adapter}if(module&&module.parent){module.exports=startAdapter}else{startAdapter()}