Initial plugin permissions
This commit is contained in:
parent
4f451e3822
commit
deaa680aae
|
@ -211,7 +211,8 @@ export default class {
|
||||||
mainPath
|
mainPath
|
||||||
};
|
};
|
||||||
|
|
||||||
const content = await this.loadContent(paths, configs, readConfig.info, readConfig.main, readConfig.dependencies);
|
const content = await this.loadContent(paths, configs, readConfig.info, readConfig.main, readConfig.dependencies, readConfig.permissions);
|
||||||
|
if (!content) return null;
|
||||||
if (!reload && this.getContentById(content.id))
|
if (!reload && this.getContentById(content.id))
|
||||||
throw {message: `A ${this.contentType} with the ID ${content.id} already exists.`};
|
throw {message: `A ${this.contentType} with the ID ${content.id} already exists.`};
|
||||||
|
|
||||||
|
|
|
@ -11,3 +11,4 @@ export { default as ModuleManager } from './modulemanager';
|
||||||
export { default as EventListener } from './eventlistener';
|
export { default as EventListener } from './eventlistener';
|
||||||
export { default as SocketProxy } from './socketproxy';
|
export { default as SocketProxy } from './socketproxy';
|
||||||
export { default as EventHook } from './eventhook';
|
export { default as EventHook } from './eventhook';
|
||||||
|
export { default as Permissions } from './permissionmanager';
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
/**
|
||||||
|
* BetterDiscord Permission Manager
|
||||||
|
* Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
|
||||||
|
* All rights reserved.
|
||||||
|
* https://betterdiscord.net
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const PermissionMap = {
|
||||||
|
IDENTIFY: {
|
||||||
|
HEADER: 'Access your account information',
|
||||||
|
BODY: 'Allows :NAME: to read your account information(excluding user token)'
|
||||||
|
},
|
||||||
|
READ_MESSAGES: {
|
||||||
|
HEADER: 'Read all messages',
|
||||||
|
BODY: 'Allows :NAME: to read all messages accessible through your Discord account'
|
||||||
|
},
|
||||||
|
SEND_MESSAGES: {
|
||||||
|
HEADER: 'Send messages',
|
||||||
|
BODY: 'Allows :NAME: to send messages on your behalf'
|
||||||
|
},
|
||||||
|
DELETE_MESSAGES: {
|
||||||
|
HEADER: 'Delete messages',
|
||||||
|
BODY: 'Allows :NAME: to delete messages on your behalf'
|
||||||
|
},
|
||||||
|
EDIT_MESSAGES: {
|
||||||
|
HEADER: 'Edit messages',
|
||||||
|
BODY: 'Allows :NAME: to edit messages on your behalf'
|
||||||
|
},
|
||||||
|
JOIN_SERVERS: {
|
||||||
|
HEADER: 'Join servers for you',
|
||||||
|
BODY: 'Allows :NAME: to join servers on your behalf'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class {
|
||||||
|
|
||||||
|
static permissionText(permission) {
|
||||||
|
return PermissionMap[permission];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -14,7 +14,8 @@ import Plugin from './plugin';
|
||||||
import PluginApi from './pluginapi';
|
import PluginApi from './pluginapi';
|
||||||
import Vendor from './vendor';
|
import Vendor from './vendor';
|
||||||
import { ClientLogger as Logger } from 'common';
|
import { ClientLogger as Logger } from 'common';
|
||||||
import { Events } from 'modules';
|
import { Events, Permissions } from 'modules';
|
||||||
|
import { Modals } from 'ui';
|
||||||
|
|
||||||
export default class extends ContentManager {
|
export default class extends ContentManager {
|
||||||
|
|
||||||
|
@ -47,7 +48,19 @@ export default class extends ContentManager {
|
||||||
static get refreshPlugins() { return this.refreshContent }
|
static get refreshPlugins() { return this.refreshContent }
|
||||||
|
|
||||||
static get loadContent() { return this.loadPlugin }
|
static get loadContent() { return this.loadPlugin }
|
||||||
static async loadPlugin(paths, configs, info, main, dependencies) {
|
static async loadPlugin(paths, configs, info, main, dependencies, permissions) {
|
||||||
|
|
||||||
|
if (permissions && permissions.length > 0) {
|
||||||
|
for (let perm of permissions) {
|
||||||
|
console.log(`Permission: ${Permissions.permissionText(perm).HEADER} - ${Permissions.permissionText(perm).BODY}`);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const allowed = await Modals.permissions(`${info.name} wants to:`, info.name, permissions).promise;
|
||||||
|
} catch (err) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const deps = [];
|
const deps = [];
|
||||||
if (dependencies) {
|
if (dependencies) {
|
||||||
for (const [key, value] of Object.entries(dependencies)) {
|
for (const [key, value] of Object.entries(dependencies)) {
|
||||||
|
|
|
@ -6,3 +6,4 @@
|
||||||
@import './basic-modal.scss';
|
@import './basic-modal.scss';
|
||||||
@import './error-modal.scss';
|
@import './error-modal.scss';
|
||||||
@import './settings-modal.scss';
|
@import './settings-modal.scss';
|
||||||
|
@import './permission-modal.scss';
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
.bd-perm-scope {
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.bd-perm-allow {
|
||||||
|
display: flex;
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
.bd-perm-check {
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
background: hsla(0,0%,100%,.2);
|
||||||
|
border-radius: 18px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
height: 36px;
|
||||||
|
margin-right: 20px;
|
||||||
|
margin-top: 14px;
|
||||||
|
padding: 2px;
|
||||||
|
width: 36px;
|
||||||
|
|
||||||
|
.bd-perm-check-inner {
|
||||||
|
background-color: #43b581;
|
||||||
|
border: 2px solid #35383c;
|
||||||
|
border-radius: 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
height: 32px;
|
||||||
|
width: 32px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bd-perm-inner {
|
||||||
|
display: flex;
|
||||||
|
flex: 1;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
min-height: 45px;
|
||||||
|
padding: 13px 0;
|
||||||
|
border-bottom: 1px solid hsla(0,0%,100%,.1);
|
||||||
|
|
||||||
|
.bd-perm-name {
|
||||||
|
color: #fff;
|
||||||
|
font-size: 17px;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bd-perm-desc {
|
||||||
|
color: hsla(0,0%,100%,.2);
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
/**
|
||||||
|
* BetterDiscord Permission Modal Component
|
||||||
|
* Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
|
||||||
|
* All rights reserved.
|
||||||
|
* https://betterdiscord.net
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<Modal :class="['bd-modal-basic', {'bd-modal-out': modal.closing}]" :headerText="modal.title" :close="modal.close">
|
||||||
|
<div slot="body" class="bd-modal-basic-body">
|
||||||
|
<div v-for="(perm, i) in permissions" :key="`perm-${i}`" class="bd-perm-scope">
|
||||||
|
<div class="bd-perm-allow">
|
||||||
|
<div class="bd-perm-check">
|
||||||
|
<div class="bd-perm-check-inner"></div>
|
||||||
|
</div>
|
||||||
|
<div class="bd-perm-inner">
|
||||||
|
<div class="bd-perm-name">{{perm.HEADER}}</div>
|
||||||
|
<div class="bd-perm-desc">{{perm.BODY}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div slot="footer" class="bd-modal-controls">
|
||||||
|
<div class="bd-flex-grow"></div>
|
||||||
|
<div class="bd-button" @click="modal.close">Cancel</div>
|
||||||
|
<div class="bd-button bd-ok" @click="() => { modal.confirm(); modal.close(); }">Authorize</div>
|
||||||
|
</div>
|
||||||
|
</Modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Imports
|
||||||
|
import { Modal } from '../../common';
|
||||||
|
import { Permissions } from 'modules';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return { permissions: [] }
|
||||||
|
},
|
||||||
|
props: ['modal'],
|
||||||
|
components: {
|
||||||
|
Modal
|
||||||
|
},
|
||||||
|
beforeMount() {
|
||||||
|
this.permissions = this.modal.perms.map(perm => {
|
||||||
|
const getPerm = Permissions.permissionText(perm);
|
||||||
|
getPerm.BODY = getPerm.BODY.replace(':NAME:', this.modal.name);
|
||||||
|
return getPerm;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -14,6 +14,7 @@ import BasicModal from './components/bd/modals/BasicModal.vue';
|
||||||
import ConfirmModal from './components/bd/modals/ConfirmModal.vue';
|
import ConfirmModal from './components/bd/modals/ConfirmModal.vue';
|
||||||
import ErrorModal from './components/bd/modals/ErrorModal.vue';
|
import ErrorModal from './components/bd/modals/ErrorModal.vue';
|
||||||
import SettingsModal from './components/bd/modals/SettingsModal.vue';
|
import SettingsModal from './components/bd/modals/SettingsModal.vue';
|
||||||
|
import PermissionModal from './components/bd/modals/PermissionModal.vue';
|
||||||
|
|
||||||
export default class {
|
export default class {
|
||||||
|
|
||||||
|
@ -81,6 +82,16 @@ export default class {
|
||||||
return modal;
|
return modal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static permissions(title, name, perms) {
|
||||||
|
const modal = { title,name, perms };
|
||||||
|
modal.promise = new Promise((resolve, reject) => {
|
||||||
|
modal.confirm = () => resolve(true);
|
||||||
|
modal.beforeClose = () => reject();
|
||||||
|
this.add(modal, PermissionModal);
|
||||||
|
});
|
||||||
|
return modal;
|
||||||
|
}
|
||||||
|
|
||||||
static error(event) {
|
static error(event) {
|
||||||
return this.add({ event }, ErrorModal);
|
return this.add({ event }, ErrorModal);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"info": {
|
||||||
|
"id": "permission-test",
|
||||||
|
"name": "Permission Test",
|
||||||
|
"authors": [ "Jiiks" ],
|
||||||
|
"version": 1.0,
|
||||||
|
"description": "Permission Test Description"
|
||||||
|
},
|
||||||
|
"main": "index.js",
|
||||||
|
"type": "plugin",
|
||||||
|
"permissions": [
|
||||||
|
"READ_MESSAGES",
|
||||||
|
"SEND_MESSAGES"
|
||||||
|
],
|
||||||
|
"defaultConfig": []
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
module.exports = (Plugin, Api, Vendor) => {
|
||||||
|
|
||||||
|
return class extends Plugin {
|
||||||
|
onStart() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
onStop() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue