UNPKG

@indra.ai/deva.security

Version:

The Security Deva the Security for Deva.space, Deva.cloud, and Deva.world.

364 lines (317 loc) 11.4 kB
"use strict"; // Copyright ©2000-2025 Quinn A Michaels; All rights reserved. // Legal Signature Required For Lawful Use. // Distributed under VLA:40899039373337698066 LICENSE.md export default { /************** method: security params: packet describe: The global security feature that installs with every agent ***************/ async security(packet) { const security = await this.methods.sign('security', 'default', packet); return security; }, /************** method: uid params: packet describe: Return a system id to the user from the Log Buddy. ***************/ async uid(packet) { return new Promise((resolve, reject) => { const uuid = packet.q.text ? true : false const id = this.uid(uuid); this.context('uid', packet.id.uid); this.feature('security', `uid:${id.uid}`); this.zone('security', `uid:${id.uid}`); this.belief('security', `uid:${id.uid}`) const {key,profile,prompt} = this.agent(); const showJSON = packet.q.meta.params[1] || false; const status = `${key}:uid:${id.uid}`; const text = [ `${this.box.begin}:${status}`, `uid: ${id.uid}`, `time: ${id.time}`, `date: ${id.date}`, `warning: ${id.warning}`, `license: ${id.license}`, `fingerprint: ${id.fingerprint}`, `copyright: ${id.copyright}`, `${this.box.end}:${status}`, ]; const data = { uid: id.uid, time: id.time, date: id.date, warning: id.warning, license: id.license, fingerprint: id.fingerprint, copyright: id.copyright, } if (showJSON) { text.push(`${this.box.begin}${key}:uid:json:${data.uid}`); text.push(JSON.stringify(data, null, 2)); text.push(`${this.box.end}${key}:uid:json:${data.uid}`); } this.question(`${this.askChr}feecting parse ${text.join('\n')}`, {vars:this.vars}).then(parsed => { this.belief('vedic', `uid:${packet.id.uid}`); this.action('resolve', `uid:${packet.id.uid}`); return resolve({ text: parsed.a.text, html: parsed.a.html, data, }); }).catch(err => { return this.err(err, packet, reject); }); }); }, async sign(packet) { const data = this.sign(packet); // Text data that is joined by line breaks and then trimmed. this.state('set', `${data.key}:${data.method}:text:${data.id.uid}`); // set state to text for output formatting. const text = [ `write: #${data.key}.${data.method}.${data.opts} ${data.text}`, '\n', `${this.box.begin}${data.method}:${data.id.uid}`, `sign: ${data.client.fullname} ${data.client.emojis}`, `uid: ${data.id.uid}`, `time: ${data.time}`, `expires: ${data.client.expires}`, `fingerprint: ${data.id.fingerprint}`, `name: ${data.client.name}`, `fullname: ${data.client.fullname}`, `company: ${data.client.company}`, `caseid: ${data.client.caseid}`, `agent: ${data.agent.sha256}`, `token: ${data.client.token}`, `warning: ${data.warning}`, `created: ${data.created}`, `copyright: ${data.copyright}`, `md5: ${data.md5}`, `sha256: ${data.sha256}`, `sha512: ${data.sha512}`, `${this.box.end}${data.method}:${data.id.uid}`, ].join('\n').trim(); // send the text data to #feecting to parse and return valid text, html, and data. this.action('parse', `${data.key}:${data.method}:parse:${data.id.uid}`); // action set to feecting parse const feecting = await this.question(`${this.askChr}feecting parse:${data.id.uid} ${text}`); // parse with feecting agent. this.action('return', `${data.key}:${data.method}:${data.id.uid}`); // set the state to return proxy return { text: feecting.a.text, html: feecting.a.html, data, } }, /************** method: md5, sha256, sha512 hash params: packet describe: Return system md5, sha256, sha512 hash from value. ***************/ async hash(packet) { const id = this.uid(); const {q} = packet; this.feature('security', `hash:${id.uid}`); const {global, personal} = this.security(); const agent = this.agent() const client = this.client(); this.zone('security', `hash:${id.uid}`); this.action('method', `hash:${id.uid}`); const {params} = q.meta; // set params from the meta information. this.state('set', `hash:algo:${id.uid}`); //set the meta state for the proxy const algo = params[1] || personal.hash || global.hash this.state('set', `hash:${id.uid}`); //set the meta state for the proxy const hash = this.hash(q.text, algo); const data = { id, algo, text: q.text, hash, }; const status = `${agent.key}:hash:${data.id.uid}`; const text = [ `${this.box.begin}:${status}`, `uid: ${data.id.uid}`, `algo: ${data.algo}`, `text: ${data.text}`, `hash: ${data.hash}`, `time: ${data.id.time}`, `date: ${data.id.date}`, `warning: ${data.id.warning}`, `license: ${data.id.license}`, `copyright: ${data.id.copyright}`, `${this.box.end}:${status}`, ].join('\n'); this.action('return', `hash:${data.id.uid}`); this.state('valid', `hash:${data.id.uid}`); this.intent('good', `hash:${data.id.uid}`); return { text, html: false, data, }; }, /************** method: encrypt params: packet describe: Return system md5 hash for the based deva. ***************/ async encrypt(packet) { const id = this.uid(); const {q} = packet; this.feature('security', `encrypt:${id.uid}`); const {global,personal} = this.security(); const agent = this.agent(); this.zone('security', `encrypt:${id.uid}`); this.action('encrypt', id.uid); this.state('set', `encrypt:data:${id.uid}`); // set state data const data = this.lib.encrypt(q.text, global.encrypt); data.id = id; this.action('hash', `encrypt:data:md5:${id.uid}`); // set action hash data.md5 = this.hash(data.encrypted, 'md5'); this.action('hash', `encrypt:data:sha256:${id.uid}`); // set action hash data.sha256 = this.hash(data.encrypted, 'sha256'); this.action('hash', `encrypt:data:sha512:${id.uid}`); // set action hash data.sha512 = this.hash(data.encrypted, 'sha512'); const status = `${agent.key}:encrypt:${id.uid}`; this.state('set', `encrypt:text:${id.uid}`) const text = [ `${this.box.begin}:${status}`, `uid: ${id.uid}`, `text: ${q.text}`, `iv: ${data.iv}`, `key: ${data.key}`, `encrypted: ${data.encrypted}`, `time: ${id.time}`, `date: ${id.date}`, `warning: ${id.warning}`, `copyright: ${id.copyright}`, `md5: ${data.md5}`, `sha256: ${data.sha256}`, `sha512: ${data.sha512}`, `${this.box.end}:${status}`, ].join('\n'); this.action('return', `encrypt:${id.uid}`); // set action return this.state('valid', `encrypt:${id.uid}`); // set action return this.intent('good', `encrypt:${id.uid}`); // set action return return { text, html: false, data, }; }, async decrypt(packet) { const id = this.uid(); const {q} = packet this.feature('security', `decrypt:${id.uid}`); this.zone('security', `decrypt:${id.uid}`); const {global,personal} = this.security(); this.state('set', `decrypt:agent:${id.uid}`); // set state set const agent = this.agent(); this.state('set', `decrypt:client:${id.uid}`); // set state set const client = this.client(); this.state('set', `decrypt:encrypt:${id.uid}`); // set state set const encrypt = { iv: q.meta.params[1], key: q.meta.params[2], encrypted: q.text, algorithm: global.encrypt.algorithm, } this.action('decrypt', id.uid); // set action hash const decrypt = this.lib.decrypt(encrypt); this.state('set', `decrypt:data:${id.uid}`); // set state set const data = { id, agent, decrypt, encrypt, }; this.action('hash', `decrypt:data:md5:${id.uid}`); // set action hash data.md5 = this.hash(decrypt, 'md5'); this.action('hash', `decrypt:data:sha256:${id.uid}`); // set action hash data.sha256 = this.hash(decrypt, 'sha256'); this.action('hash', `decrypt:data:sha512:${id.uid}`); // set action hash data.sha512 = this.hash(decrypt, 'sha512'); const status = `${agent.key}:decrypt:${data.id.uid}`; this.state('set', `decrypt:text:${id.uid}`); // set state set const text = [ `${this.box.begin}:${status}`, `uid: ${data.id.uid}`, `decrypted: ${data.decrypt}`, `time: ${data.id.time}`, `date: ${data.id.date}`, `warning: ${data.id.warning}`, `copyright: ${data.id.copyright}`, `md5: ${data.md5}`, `sha256: ${data.sha256}`, `sha512: ${data.sha512}`, `${this.box.end}${status}`, ].join('\n'); this.action('return', `decrypt:${id.uid}`); // set action return this.state('valid', `decrypt:${id.uid}`); // set action return this.intent('good', `decrypt:${id.uid}`); // set action return return { text, html: false, data, }; }, /************** method: date params: packet describe: Return system date for today. ***************/ async date(packet) { const id = this.uid(); const {params} = packet.q.meta; const {key} = this.agent(); this.zone('security', `date:${id.uid}`); this.feature('security', `date:${id.uid}`); this.action('method', `date:${id.uid}`); const format = params[1] ? params[1] : 'long'; const time = params[2] ? packet.q.meta.params[2] : false; this.state('set', `date:${id.uid}`); const date = this.lib.formatDate(Date.now(), format, time); const data = { id, date, } this.action('hash', `date:data:md5:${id.uid}`); // set action hash data.md5 = this.hash(date, 'md5'); this.action('hash', `date:data:sha256:${id.uid}`); // set action hash data.sha256 = this.hash(date, 'sha256'); this.action('hash', `date:data:sha512:${id.uid}`); // set action hash data.sha512 = this.hash(date, 'sha512'); const text = [ `${this.box.begin}:${key}:date:${data.id.uid}`, `date: ${data.date}`, `md5: ${data.md5}`, `sha256: ${data.sha256}`, `sha512: ${data.sha512}`, `${this.box.end}$:{key}:date:${data.id.uid}` ].join('\n'); this.action('return', `date:${id.uid}`); this.state('valid', `date:${id.uid}`); this.intent('good', `date:${id.uid}`); return { text, html: false, data, }; }, /************** method: time params: packet describe: Return system date for today. ***************/ time(packet) { const transport = packet.id; this.zone('security', `time:${transport}`); this.feature('security', `time:${transport}`); this.action('method', `time:${transport}`); this.state('get', `time:${transport}`); const theTime = Date.now(); this.state('return', `time:${transport}`); return Promise.resolve(theTime); }, }