Merge pull request #150 from JsSucks/plugin-permissions
Initial plugin permissions
This commit is contained in:
commit
ecf7f872cb
|
@ -208,7 +208,8 @@ export default class {
|
|||
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))
|
||||
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 SocketProxy } from './socketproxy';
|
||||
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 Vendor from './vendor';
|
||||
import { ClientLogger as Logger } from 'common';
|
||||
import { Events } from 'modules';
|
||||
import { Events, Permissions } from 'modules';
|
||||
import { Modals } from 'ui';
|
||||
|
||||
export default class extends ContentManager {
|
||||
|
||||
|
@ -47,7 +48,19 @@ export default class extends ContentManager {
|
|||
static get refreshPlugins() { return this.refreshContent }
|
||||
|
||||
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 = [];
|
||||
if (dependencies) {
|
||||
for (const [key, value] of Object.entries(dependencies)) {
|
||||
|
|
|
@ -6,3 +6,4 @@
|
|||
@import './basic-modal.scss';
|
||||
@import './error-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 ErrorModal from './components/bd/modals/ErrorModal.vue';
|
||||
import SettingsModal from './components/bd/modals/SettingsModal.vue';
|
||||
import PermissionModal from './components/bd/modals/PermissionModal.vue';
|
||||
|
||||
export default class {
|
||||
|
||||
|
@ -81,6 +82,16 @@ export default class {
|
|||
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) {
|
||||
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