Functional E2EE submitting
This commit is contained in:
parent
3c83dbe0ff
commit
3d4204f080
|
@ -8,8 +8,9 @@
|
|||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import { Settings } from 'modules';
|
||||
import BuiltinModule from './BuiltinModule';
|
||||
import { WebpackModules, ReactComponents, MonkeyPatch, Patcher } from 'modules';
|
||||
import { WebpackModules, ReactComponents, MonkeyPatch, Patcher, DiscordApi } from 'modules';
|
||||
import { VueInjector, Reflection } from 'ui';
|
||||
import E2EEComponent from './E2EEComponent.vue';
|
||||
import aes256 from 'aes256';
|
||||
|
@ -20,10 +21,32 @@ export default new class E2EE extends BuiltinModule {
|
|||
return ['security', 'default', 'e2ee'];
|
||||
}
|
||||
|
||||
get master() {
|
||||
return 'temporarymasterkey';
|
||||
}
|
||||
|
||||
get database() {
|
||||
return Settings.getSet('security').settings.find(s => s.id === 'e2eedb').settings[0].value;
|
||||
}
|
||||
|
||||
encrypt(key, content, prefix = '$:') {
|
||||
return prefix + aes256.encrypt(key, content);
|
||||
}
|
||||
|
||||
decrypt(key, content, prefix = '$:') {
|
||||
return aes256.decrypt(key, content.substr(2));
|
||||
}
|
||||
|
||||
getKey(channelId) {
|
||||
const haveKey = this.database.find(kvp => kvp.value.key === channelId);
|
||||
if (!haveKey) return null;
|
||||
return haveKey.value.value;
|
||||
}
|
||||
|
||||
async enabled(e) {
|
||||
const ctaComponent = await ReactComponents.getComponent('ChannelTextArea');
|
||||
MonkeyPatch('BD:E2EE', ctaComponent.component.prototype).after('render', this.render);
|
||||
MonkeyPatch('BD:E2EE', ctaComponent.component.prototype).before('handleSubmit', this.handleSubmit);
|
||||
MonkeyPatch('BD:E2EE', ctaComponent.component.prototype).before('handleSubmit', this.handleSubmit.bind(this));
|
||||
}
|
||||
|
||||
render(component, args, retVal) {
|
||||
|
@ -34,7 +57,9 @@ export default new class E2EE extends BuiltinModule {
|
|||
}
|
||||
|
||||
handleSubmit(component, args, retVal) {
|
||||
component.props.value = aes256.encrypt('randomkey', component.props.value);
|
||||
const key = this.getKey(DiscordApi.currentChannel.id);
|
||||
if (!key) return;
|
||||
component.props.value = this.encrypt(this.decrypt(this.master, key), component.props.value);
|
||||
}
|
||||
|
||||
disabled(e) {
|
||||
|
|
|
@ -12,17 +12,17 @@
|
|||
<div class="bd-e2eeTaContainer">
|
||||
<template v-if="error">
|
||||
<div class="bd-e2eeTaBtn bd-e2eeLock bd-error">
|
||||
<MiLock v-tooltip="'E2EE ERROR!'" />
|
||||
<MiLock v-tooltip="error" />
|
||||
</div>
|
||||
</template>
|
||||
<template v-else-if="state === 'loading'">
|
||||
<div class="bd-e2eeTaBtn bd-e2eeLock bd-warn">
|
||||
<MiLock v-tooltip="'E2EE is loading'" />
|
||||
<MiLock v-tooltip="'Loading'" />
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="bd-e2eeTaBtn bd-e2eeLock bd-ok">
|
||||
<MiLock v-tooltip="'E2EE Ready!'" />
|
||||
<MiLock v-tooltip="'Ready!'" />
|
||||
</div>
|
||||
</template>
|
||||
<div class="bd-taDivider"></div>
|
||||
|
@ -30,6 +30,8 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { E2EE } from 'builtin';
|
||||
import { DiscordApi } from 'modules';
|
||||
import { MiLock } from '../ui/components/common/MaterialIcon';
|
||||
export default {
|
||||
components: { MiLock },
|
||||
|
@ -39,6 +41,19 @@
|
|||
error: null
|
||||
};
|
||||
},
|
||||
methods: {}
|
||||
methods: {},
|
||||
mounted() {
|
||||
if (!E2EE.master) {
|
||||
this.error = 'No master key set!';
|
||||
return;
|
||||
}
|
||||
const haveKey = E2EE.getKey(DiscordApi.currentChannel.id);
|
||||
if (!haveKey) {
|
||||
this.error = 'No key for channel!';
|
||||
return;
|
||||
}
|
||||
this.state = 'OK';
|
||||
this.error = null;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -3,3 +3,4 @@ export { default as ReactDevtoolsModule } from './ReactDevtoolsModule';
|
|||
export { default as VueDevtoolsModule } from './VueDevToolsModule';
|
||||
export { default as TrackingProtection } from './TrackingProtection';
|
||||
export { default as BuiltinManager } from './Manager';
|
||||
export { default as E2EE } from './E2EE';
|
||||
|
|
Loading…
Reference in New Issue