Files
mattermostest/src/main/PermissionManager.js
2017-12-05 00:59:54 +09:00

74 lines
1.7 KiB
JavaScript

const fs = require('fs');
const utils = require('../utils/util');
const PERMISSION_GRANTED = 'granted';
const PERMISSION_DENIED = 'denied';
class PermissionManager {
constructor(file, trustedURLs = []) {
this.file = file;
this.setTrustedURLs(trustedURLs);
if (fs.existsSync(file)) {
try {
this.permissions = JSON.parse(fs.readFileSync(this.file, 'utf-8'));
} catch (err) {
console.error(err);
this.permissions = {};
}
} else {
this.permissions = {};
}
}
writeFileSync() {
fs.writeFileSync(this.file, JSON.stringify(this.permissions, null, ' '));
}
grant(origin, permission) {
if (!this.permissions[origin]) {
this.permissions[origin] = {};
}
this.permissions[origin][permission] = PERMISSION_GRANTED;
this.writeFileSync();
}
deny(origin, permission) {
if (!this.permissions[origin]) {
this.permissions[origin] = {};
}
this.permissions[origin][permission] = PERMISSION_DENIED;
this.writeFileSync();
}
clear(origin, permission) {
delete this.permissions[origin][permission];
}
isGranted(origin, permission) {
if (this.trustedOrigins[origin] === true) {
return true;
}
if (this.permissions[origin]) {
return this.permissions[origin][permission] === PERMISSION_GRANTED;
}
return false;
}
isDenied(origin, permission) {
if (this.permissions[origin]) {
return this.permissions[origin][permission] === PERMISSION_DENIED;
}
return false;
}
setTrustedURLs(trustedURLs) {
this.trustedOrigins = {};
for (const url of trustedURLs) {
const origin = utils.getDomain(url);
this.trustedOrigins[origin] = true;
}
}
}
module.exports = PermissionManager;