2015-07-20 00:09:47 -07:00
'use strict' ;
exports = module . exports = {
2020-03-18 17:13:41 -07:00
set ,
get ,
// owner only settings
setBackupConfig
2015-07-20 00:09:47 -07:00
} ;
var assert = require ( 'assert' ) ,
2019-02-09 18:08:10 -08:00
backups = require ( '../backups.js' ) ,
2019-10-25 15:58:11 -07:00
BoxError = require ( '../boxerror.js' ) ,
2018-10-12 17:04:04 -07:00
docker = require ( '../docker.js' ) ,
2019-10-25 15:58:11 -07:00
externalLdap = require ( '../externalldap.js' ) ,
2015-07-20 00:09:47 -07:00
HttpError = require ( 'connect-lastmile' ) . HttpError ,
HttpSuccess = require ( 'connect-lastmile' ) . HttpSuccess ,
2019-10-22 11:03:56 -07:00
settings = require ( '../settings.js' ) ;
2018-02-06 18:57:30 +01:00
function getAppAutoupdatePattern ( req , res , next ) {
settings . getAppAutoupdatePattern ( function ( error , pattern ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2018-02-06 18:57:30 +01:00
next ( new HttpSuccess ( 200 , { pattern : pattern } ) ) ;
} ) ;
}
function setAppAutoupdatePattern ( req , res , next ) {
assert . strictEqual ( typeof req . body , 'object' ) ;
if ( typeof req . body . pattern !== 'string' ) return next ( new HttpError ( 400 , 'pattern is required' ) ) ;
settings . setAppAutoupdatePattern ( req . body . pattern , function ( error ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2018-02-06 18:57:30 +01:00
2018-06-07 16:10:47 +02:00
next ( new HttpSuccess ( 200 , { } ) ) ;
2018-02-06 18:57:30 +01:00
} ) ;
}
function getBoxAutoupdatePattern ( req , res , next ) {
settings . getBoxAutoupdatePattern ( function ( error , pattern ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2015-07-20 00:09:47 -07:00
next ( new HttpSuccess ( 200 , { pattern : pattern } ) ) ;
} ) ;
}
2018-02-06 18:57:30 +01:00
function setBoxAutoupdatePattern ( req , res , next ) {
2015-07-20 00:09:47 -07:00
assert . strictEqual ( typeof req . body , 'object' ) ;
if ( typeof req . body . pattern !== 'string' ) return next ( new HttpError ( 400 , 'pattern is required' ) ) ;
2018-02-06 18:57:30 +01:00
settings . setBoxAutoupdatePattern ( req . body . pattern , function ( error ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2015-07-20 00:09:47 -07:00
2018-06-07 16:10:47 +02:00
next ( new HttpSuccess ( 200 , { } ) ) ;
2015-07-20 00:09:47 -07:00
} ) ;
}
2016-05-03 12:10:16 -07:00
function getTimeZone ( req , res , next ) {
settings . getTimeZone ( function ( error , tz ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2016-06-02 13:00:23 -07:00
2016-05-03 12:10:16 -07:00
next ( new HttpSuccess ( 200 , { timeZone : tz } ) ) ;
} ) ;
}
2016-06-02 13:36:47 -07:00
function setTimeZone ( req , res , next ) {
assert . strictEqual ( typeof req . body , 'object' ) ;
if ( typeof req . body . timeZone !== 'string' ) return next ( new HttpError ( 400 , 'timeZone is required' ) ) ;
settings . setTimeZone ( req . body . timeZone , function ( error ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2016-06-02 13:36:47 -07:00
2018-06-07 16:10:47 +02:00
next ( new HttpSuccess ( 200 , { } ) ) ;
2016-06-02 13:36:47 -07:00
} ) ;
}
2020-02-05 14:30:56 -08:00
function getSupportConfig ( req , res , next ) {
settings . getSupportConfig ( function ( error , supportConfig ) {
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
next ( new HttpSuccess ( 200 , supportConfig ) ) ;
} ) ;
}
2015-11-09 20:34:25 -08:00
function getBackupConfig ( req , res , next ) {
2019-07-26 07:25:40 -07:00
settings . getBackupConfig ( function ( error , backupConfig ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2015-11-09 20:34:25 -08:00
2019-07-26 07:25:40 -07:00
next ( new HttpSuccess ( 200 , backups . removePrivateFields ( backupConfig ) ) ) ;
2015-11-09 20:34:25 -08:00
} ) ;
}
function setBackupConfig ( req , res , next ) {
assert . strictEqual ( typeof req . body , 'object' ) ;
if ( typeof req . body . provider !== 'string' ) return next ( new HttpError ( 400 , 'provider is required' ) ) ;
2018-08-13 22:31:35 -07:00
if ( typeof req . body . intervalSecs !== 'number' ) return next ( new HttpError ( 400 , 'intervalSecs is required' ) ) ;
2020-05-12 10:31:51 -07:00
if ( 'password' in req . body && typeof req . body . password !== 'string' ) return next ( new HttpError ( 400 , 'password must be a string' ) ) ;
2018-03-20 19:18:48 -07:00
if ( 'syncConcurrency' in req . body ) {
if ( typeof req . body . syncConcurrency !== 'number' ) return next ( new HttpError ( 400 , 'syncConcurrency must be a positive integer' ) ) ;
if ( req . body . syncConcurrency < 1 ) return next ( new HttpError ( 400 , 'syncConcurrency must be a positive integer' ) ) ;
}
2017-09-25 23:49:49 -07:00
if ( typeof req . body . format !== 'string' ) return next ( new HttpError ( 400 , 'format must be a string' ) ) ;
2017-10-05 10:01:09 -07:00
if ( 'acceptSelfSignedCerts' in req . body && typeof req . body . acceptSelfSignedCerts !== 'boolean' ) return next ( new HttpError ( 400 , 'format must be a boolean' ) ) ;
2015-11-09 20:34:25 -08:00
2020-05-28 16:27:07 +02:00
if ( ! req . body . retentionPolicy || typeof req . body . retentionPolicy !== 'object' || Object . keys ( req . body . retentionPolicy ) === 0 ) return next ( new HttpError ( 400 , 'retentionPolicy is required' ) ) ;
2020-05-14 16:19:35 -07:00
2018-08-05 22:29:27 -07:00
// testing the backup using put/del takes a bit of time at times
req . clearTimeout ( ) ;
2015-11-09 20:34:25 -08:00
settings . setBackupConfig ( req . body , function ( error ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2015-11-09 20:34:25 -08:00
2018-06-07 16:10:47 +02:00
next ( new HttpSuccess ( 200 , { } ) ) ;
2015-11-09 20:34:25 -08:00
} ) ;
}
2018-07-25 13:06:38 -07:00
function getPlatformConfig ( req , res , next ) {
settings . getPlatformConfig ( function ( error , config ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2018-07-25 13:06:38 -07:00
next ( new HttpSuccess ( 200 , config ) ) ;
} ) ;
}
function setPlatformConfig ( req , res , next ) {
assert . strictEqual ( typeof req . body , 'object' ) ;
for ( let addon of [ 'mysql' , 'postgresql' , 'mail' , 'mongodb' ] ) {
if ( ! ( addon in req . body ) ) continue ;
if ( typeof req . body [ addon ] !== 'object' ) return next ( new HttpError ( 400 , 'addon config must be an object' ) ) ;
if ( typeof req . body [ addon ] . memory !== 'number' ) return next ( new HttpError ( 400 , 'memory must be a number' ) ) ;
if ( typeof req . body [ addon ] . memorySwap !== 'number' ) return next ( new HttpError ( 400 , 'memorySwap must be a number' ) ) ;
}
settings . setPlatformConfig ( req . body , function ( error ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2018-07-25 13:06:38 -07:00
next ( new HttpSuccess ( 200 , { } ) ) ;
} ) ;
}
2019-08-29 12:25:10 +02:00
function getExternalLdapConfig ( req , res , next ) {
settings . getExternalLdapConfig ( function ( error , config ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2019-08-29 12:25:10 +02:00
2019-10-25 15:58:11 -07:00
next ( new HttpSuccess ( 200 , externalLdap . removePrivateFields ( config ) ) ) ;
2019-08-29 12:25:10 +02:00
} ) ;
}
function setExternalLdapConfig ( req , res , next ) {
assert . strictEqual ( typeof req . body , 'object' ) ;
2019-10-25 15:40:22 -07:00
if ( ! req . body . provider || typeof req . body . provider !== 'string' ) return next ( new HttpError ( 400 , 'provider must be a string' ) ) ;
2019-10-25 15:47:55 -07:00
if ( 'url' in req . body && typeof req . body . url !== 'string' ) return next ( new HttpError ( 400 , 'url must be a string' ) ) ;
if ( 'baseDn' in req . body && typeof req . body . baseDn !== 'string' ) return next ( new HttpError ( 400 , 'baseDn must be a string' ) ) ;
if ( 'usernameField' in req . body && typeof req . body . usernameField !== 'string' ) return next ( new HttpError ( 400 , 'usernameField must be a string' ) ) ;
if ( 'filter' in req . body && typeof req . body . filter !== 'string' ) return next ( new HttpError ( 400 , 'filter must be a string' ) ) ;
if ( 'bindDn' in req . body && typeof req . body . bindDn !== 'string' ) return next ( new HttpError ( 400 , 'bindDn must be a non empty string' ) ) ;
2019-08-29 12:25:10 +02:00
if ( 'bindPassword' in req . body && typeof req . body . bindPassword !== 'string' ) return next ( new HttpError ( 400 , 'bindPassword must be a string' ) ) ;
settings . setExternalLdapConfig ( req . body , function ( error ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2019-08-29 12:25:10 +02:00
next ( new HttpSuccess ( 200 , { } ) ) ;
} ) ;
}
2018-10-31 16:02:51 +01:00
function getDynamicDnsConfig ( req , res , next ) {
settings . getDynamicDnsConfig ( function ( error , enabled ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2018-10-31 16:02:51 +01:00
next ( new HttpSuccess ( 200 , { enabled : enabled } ) ) ;
} ) ;
}
function setDynamicDnsConfig ( req , res , next ) {
assert . strictEqual ( typeof req . body , 'object' ) ;
if ( typeof req . body . enabled !== 'boolean' ) return next ( new HttpError ( 400 , 'enabled boolean is required' ) ) ;
settings . setDynamicDnsConfig ( req . body . enabled , function ( error ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2018-10-31 16:02:51 +01:00
next ( new HttpSuccess ( 200 , { } ) ) ;
} ) ;
}
2019-04-27 22:30:32 +02:00
function getUnstableAppsConfig ( req , res , next ) {
settings . getUnstableAppsConfig ( function ( error , enabled ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2019-04-27 22:30:32 +02:00
next ( new HttpSuccess ( 200 , { enabled : enabled } ) ) ;
} ) ;
}
function setUnstableAppsConfig ( req , res , next ) {
assert . strictEqual ( typeof req . body , 'object' ) ;
if ( typeof req . body . enabled !== 'boolean' ) return next ( new HttpError ( 400 , 'enabled boolean is required' ) ) ;
settings . setUnstableAppsConfig ( req . body . enabled , function ( error ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2019-04-27 22:30:32 +02:00
next ( new HttpSuccess ( 200 , { } ) ) ;
} ) ;
}
2018-10-31 16:02:51 +01:00
2019-10-22 22:07:44 -07:00
function getRegistryConfig ( req , res , next ) {
settings . getRegistryConfig ( function ( error , registryConfig ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2019-10-22 22:07:44 -07:00
next ( new HttpSuccess ( 200 , docker . removePrivateFields ( registryConfig ) ) ) ;
} ) ;
}
2018-10-12 17:04:04 -07:00
function setRegistryConfig ( req , res , next ) {
assert . strictEqual ( typeof req . body , 'object' ) ;
2019-10-22 22:07:44 -07:00
if ( typeof req . body . serverAddress !== 'string' ) return next ( new HttpError ( 400 , 'serverAddress is required' ) ) ;
2018-10-12 17:04:04 -07:00
if ( 'username' in req . body && typeof req . body . username !== 'string' ) return next ( new HttpError ( 400 , 'username is required' ) ) ;
2019-10-23 06:11:17 -07:00
if ( 'email' in req . body && typeof req . body . email !== 'string' ) return next ( new HttpError ( 400 , 'email is required' ) ) ;
2018-10-12 17:04:04 -07:00
if ( 'password' in req . body && typeof req . body . password !== 'string' ) return next ( new HttpError ( 400 , 'password is required' ) ) ;
2019-10-22 22:07:44 -07:00
settings . setRegistryConfig ( req . body , function ( error ) {
2019-10-24 18:05:14 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
2018-10-12 17:04:04 -07:00
next ( new HttpSuccess ( 200 ) ) ;
} ) ;
}
2019-01-25 16:33:22 -08:00
2019-10-29 20:08:45 -07:00
function getSysinfoConfig ( req , res , next ) {
2019-11-05 13:45:06 +01:00
settings . getSysinfoConfig ( function ( error , sysinfoConfig ) {
2019-10-29 20:08:45 -07:00
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
next ( new HttpSuccess ( 200 , sysinfoConfig ) ) ;
} ) ;
}
function setSysinfoConfig ( req , res , next ) {
assert . strictEqual ( typeof req . body , 'object' ) ;
if ( ! req . body . provider || typeof req . body . provider !== 'string' ) return next ( new HttpError ( 400 , 'provider is required' ) ) ;
settings . setSysinfoConfig ( req . body , function ( error ) {
if ( error ) return next ( BoxError . toHttpError ( error ) ) ;
next ( new HttpSuccess ( 200 , { } ) ) ;
} ) ;
}
2019-01-25 16:33:22 -08:00
function get ( req , res , next ) {
assert . strictEqual ( typeof req . params . setting , 'string' ) ;
switch ( req . params . setting ) {
case settings . DYNAMIC _DNS _KEY : return getDynamicDnsConfig ( req , res , next ) ;
case settings . BACKUP _CONFIG _KEY : return getBackupConfig ( req , res , next ) ;
case settings . PLATFORM _CONFIG _KEY : return getPlatformConfig ( req , res , next ) ;
2019-08-29 12:25:10 +02:00
case settings . EXTERNAL _LDAP _KEY : return getExternalLdapConfig ( req , res , next ) ;
2019-04-27 22:30:32 +02:00
case settings . UNSTABLE _APPS _KEY : return getUnstableAppsConfig ( req , res , next ) ;
2019-10-22 22:07:44 -07:00
case settings . REGISTRY _CONFIG _KEY : return getRegistryConfig ( req , res , next ) ;
2019-10-29 20:08:45 -07:00
case settings . SYSINFO _CONFIG _KEY : return getSysinfoConfig ( req , res , next ) ;
2019-01-25 16:33:22 -08:00
case settings . APP _AUTOUPDATE _PATTERN _KEY : return getAppAutoupdatePattern ( req , res , next ) ;
case settings . BOX _AUTOUPDATE _PATTERN _KEY : return getBoxAutoupdatePattern ( req , res , next ) ;
case settings . TIME _ZONE _KEY : return getTimeZone ( req , res , next ) ;
2020-02-05 14:30:56 -08:00
case settings . SUPPORT _CONFIG _KEY : return getSupportConfig ( req , res , next ) ;
2019-01-25 16:33:22 -08:00
default : return next ( new HttpError ( 404 , 'No such setting' ) ) ;
}
}
function set ( req , res , next ) {
assert . strictEqual ( typeof req . body , 'object' ) ;
switch ( req . params . setting ) {
case settings . DYNAMIC _DNS _KEY : return setDynamicDnsConfig ( req , res , next ) ;
case settings . PLATFORM _CONFIG _KEY : return setPlatformConfig ( req , res , next ) ;
2019-08-29 12:25:10 +02:00
case settings . EXTERNAL _LDAP _KEY : return setExternalLdapConfig ( req , res , next ) ;
2019-04-27 22:30:32 +02:00
case settings . UNSTABLE _APPS _KEY : return setUnstableAppsConfig ( req , res , next ) ;
2019-10-22 22:07:44 -07:00
case settings . REGISTRY _CONFIG _KEY : return setRegistryConfig ( req , res , next ) ;
2019-10-29 20:08:45 -07:00
case settings . SYSINFO _CONFIG _KEY : return setSysinfoConfig ( req , res , next ) ;
2019-01-25 16:33:22 -08:00
case settings . APP _AUTOUPDATE _PATTERN _KEY : return setAppAutoupdatePattern ( req , res , next ) ;
case settings . BOX _AUTOUPDATE _PATTERN _KEY : return setBoxAutoupdatePattern ( req , res , next ) ;
case settings . TIME _ZONE _KEY : return setTimeZone ( req , res , next ) ;
2019-01-25 14:57:07 -08:00
2019-01-25 16:33:22 -08:00
default : return next ( new HttpError ( 404 , 'No such setting' ) ) ;
}
}