| 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;
 
 
  |