123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- const fs = require('fs');
- const error = require('../lib/error');
- const settingModel = require('../models/setting');
- const internalNginx = require('./nginx');
- const internalSetting = {
- /**
- * @param {Access} access
- * @param {Object} data
- * @param {String} data.id
- * @return {Promise}
- */
- update: (access, data) => {
- return access.can('settings:update', data.id)
- .then((/*access_data*/) => {
- return internalSetting.get(access, {id: data.id});
- })
- .then((row) => {
- if (row.id !== data.id) {
- // Sanity check that something crazy hasn't happened
- throw new error.InternalValidationError('Setting could not be updated, IDs do not match: ' + row.id + ' !== ' + data.id);
- }
- return settingModel
- .query()
- .where({id: data.id})
- .patch(data);
- })
- .then(() => {
- return internalSetting.get(access, {
- id: data.id
- });
- })
- .then((row) => {
- if (row.id === 'default-site') {
- // write the html if we need to
- if (row.value === 'html') {
- fs.writeFileSync('/data/nginx/default_www/index.html', row.meta.html, {encoding: 'utf8'});
- }
- // Configure nginx
- return internalNginx.deleteConfig('default')
- .then(() => {
- return internalNginx.generateConfig('default', row);
- })
- .then(() => {
- return internalNginx.test();
- })
- .then(() => {
- return internalNginx.reload();
- })
- .then(() => {
- return row;
- })
- .catch((/*err*/) => {
- internalNginx.deleteConfig('default')
- .then(() => {
- return internalNginx.test();
- })
- .then(() => {
- return internalNginx.reload();
- })
- .then(() => {
- // I'm being slack here I know..
- throw new error.ValidationError('Could not reconfigure Nginx. Please check logs.');
- });
- });
- } else {
- return row;
- }
- });
- },
- /**
- * @param {Access} access
- * @param {Object} data
- * @param {String} data.id
- * @return {Promise}
- */
- get: (access, data) => {
- return access.can('settings:get', data.id)
- .then(() => {
- return settingModel
- .query()
- .where('id', data.id)
- .first();
- })
- .then((row) => {
- if (row) {
- return row;
- } else {
- throw new error.ItemNotFoundError(data.id);
- }
- });
- },
- /**
- * This will only count the settings
- *
- * @param {Access} access
- * @returns {*}
- */
- getCount: (access) => {
- return access.can('settings:list')
- .then(() => {
- return settingModel
- .query()
- .count('id as count')
- .first();
- })
- .then((row) => {
- return parseInt(row.count, 10);
- });
- },
- /**
- * All settings
- *
- * @param {Access} access
- * @returns {Promise}
- */
- getAll: (access) => {
- return access.can('settings:list')
- .then(() => {
- return settingModel
- .query()
- .orderBy('description', 'ASC');
- });
- }
- };
- module.exports = internalSetting;
|