cloudron 4.12.7 → 4.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,8 +15,6 @@ var superagent = require('superagent'),
15
15
  exit = helper.exit,
16
16
  manifestFormat = require('cloudron-manifestformat');
17
17
 
18
- require('colors');
19
-
20
18
  exports = module.exports = {
21
19
  login: login,
22
20
  logout: logout,
@@ -67,7 +65,7 @@ function superagentEnd(requestFactory, callback) {
67
65
  function authenticate(options, callback) {
68
66
  if (!options.hideBanner) {
69
67
  const webDomain = config.appStoreOrigin().replace('https://api.', '');
70
- console.log(`${webDomain} login`.bold + ` (If you do not have one, sign up at https://${webDomain}/console.html#/register)`);
68
+ console.log(`${webDomain} login` + ` (If you do not have one, sign up at https://${webDomain}/console.html#/register)`);
71
69
  }
72
70
 
73
71
  var email = options.email || readlineSync.question('Email: ', {});
@@ -79,7 +77,7 @@ function authenticate(options, callback) {
79
77
  if (error && !error.response) exit(error);
80
78
 
81
79
  if (result.statusCode === 401 && result.body.message.indexOf('TOTP') !== -1) {
82
- if (result.body.message === 'TOTP token missing') console.log('A 2FA TOTP Token is required for this account.'.red);
80
+ if (result.body.message === 'TOTP token missing') console.log('A 2FA TOTP Token is required for this account.');
83
81
 
84
82
  options.totpToken = readlineSync.question('2FA token: ', {});
85
83
  options.email = email;
@@ -90,7 +88,7 @@ function authenticate(options, callback) {
90
88
  }
91
89
 
92
90
  if (result.statusCode !== 200) {
93
- console.log('Login failed.'.red);
91
+ console.log('Login failed.');
94
92
 
95
93
  options.hideBanner = true;
96
94
  options.email = '';
@@ -101,7 +99,7 @@ function authenticate(options, callback) {
101
99
 
102
100
  config.setAppStoreToken(result.body.accessToken);
103
101
 
104
- console.log('Login successful.'.green);
102
+ console.log('Login successful.');
105
103
 
106
104
  if (typeof callback === 'function') callback();
107
105
  });
@@ -113,7 +111,7 @@ function login(options) {
113
111
 
114
112
  function logout() {
115
113
  config.setAppStoreToken(null);
116
- console.log('Done.'.green);
114
+ console.log('Done.');
117
115
  }
118
116
 
119
117
  function info(options) {
@@ -123,16 +121,16 @@ function info(options) {
123
121
  superagentEnd(function () {
124
122
  return superagent.get(createUrl('/api/v1/developers/apps/' + id + '/versions/' + version)).query({ accessToken: config.appStoreToken() });
125
123
  }, function (error, result) {
126
- if (error && !error.response) exit(util.format('Failed to list apps: %s', error.message.red));
124
+ if (error && !error.response) exit(util.format('Failed to list apps: %s', error.message));
127
125
  if (result.statusCode !== 200) exit(util.format('Failed to list apps: %s message: %s', result.statusCode, result.text));
128
126
 
129
127
  var manifest = result.body.manifest;
130
- console.log('id: %s', manifest.id.bold);
131
- console.log('title: %s', manifest.title.bold);
132
- console.log('tagline: %s', manifest.tagline.bold);
133
- console.log('description: %s', manifest.description.bold);
134
- console.log('website: %s', manifest.website.bold);
135
- console.log('contactEmail: %s', manifest.contactEmail.bold);
128
+ console.log('id: %s', manifest.id);
129
+ console.log('title: %s', manifest.title);
130
+ console.log('tagline: %s', manifest.tagline);
131
+ console.log('description: %s', manifest.description);
132
+ console.log('website: %s', manifest.website);
133
+ console.log('contactEmail: %s', manifest.contactEmail);
136
134
  });
137
135
  });
138
136
  }
@@ -146,7 +144,7 @@ function listVersions(options) {
146
144
  superagentEnd(function () {
147
145
  return superagent.get(createUrl('/api/v1/developers/apps/' + id + '/versions')).query({ accessToken: config.appStoreToken() });
148
146
  }, function (error, result) {
149
- if (error && !error.response) exit(util.format('Failed to list versions: %s', error.message.red));
147
+ if (error && !error.response) exit(util.format('Failed to list versions: %s', error.message));
150
148
  if (result.statusCode === 404) exit('This app is not listed in appstore');
151
149
  if (result.statusCode !== 200) exit(util.format('Failed to list versions: %s message: %s', result.statusCode, result.text));
152
150
 
@@ -183,13 +181,13 @@ function addApp(manifest, baseDir, callback) {
183
181
  .query({ accessToken: config.appStoreToken() })
184
182
  .send({ id: manifest.id });
185
183
  }, function (error, result) {
186
- if (error && !error.response) return exit(util.format('Failed to create app: %s', error.message.red));
184
+ if (error && !error.response) return exit(util.format('Failed to create app: %s', error.message));
187
185
  if (result.statusCode !== 201 && result.statusCode !== 409) {
188
186
  return exit(util.format('Failed to create app: %s message: %s', result.statusCode, result.text));
189
187
  }
190
188
 
191
189
  if (result.statusCode === 201) {
192
- console.log('New application added to the appstore with id %s.'.green, manifest.id);
190
+ console.log('New application added to the appstore with id %s.', manifest.id);
193
191
  }
194
192
 
195
193
  callback();
@@ -263,7 +261,7 @@ function addVersion(manifest, baseDir, callback) {
263
261
  }, function (error, result) {
264
262
  if (error && !error.response) return callback(new Error(util.format('Failed to publish version: %s', error.message)));
265
263
  if (result.statusCode === 409) return callback('This version already exists. Use --force to overwrite.');
266
- if (result.statusCode !== 204) return callback(new Error(util.format('Failed to publish version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message.red : result.text)));
264
+ if (result.statusCode !== 204) return callback(new Error(util.format('Failed to publish version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text)));
267
265
 
268
266
  callback();
269
267
  });
@@ -312,7 +310,7 @@ function updateVersion(manifest, baseDir, callback) {
312
310
  }, function (error, result) {
313
311
  if (error && !error.response) return callback(new Error(util.format('Failed to publish version: %s', error.message)));
314
312
  if (result.statusCode !== 204) {
315
- return callback(new Error(util.format('Failed to publish version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message.red : result.text)));
313
+ return callback(new Error(util.format('Failed to publish version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text)));
316
314
  }
317
315
 
318
316
  callback();
@@ -324,7 +322,7 @@ function delVersion(manifest, force) {
324
322
  assert(typeof force === 'boolean');
325
323
 
326
324
  if (!force) {
327
- console.log('This will delete the version %s of app %s from the appstore!'.red, manifest.version.bold, manifest.id.bold);
325
+ console.log('This will delete the version %s of app %s from the appstore!', manifest.version, manifest.id);
328
326
  var reallyDelete = readlineSync.question(util.format('Really do this? [y/N]: '), {});
329
327
  if (reallyDelete.toUpperCase() !== 'Y') exit();
330
328
  }
@@ -332,10 +330,10 @@ function delVersion(manifest, force) {
332
330
  superagentEnd(function () {
333
331
  return superagent.del(createUrl('/api/v1/developers/apps/' + manifest.id + '/versions/' + manifest.version)).query({ accessToken: config.appStoreToken() });
334
332
  }, function (error, result) {
335
- if (error && !error.response) return exit(util.format('Failed to unpublish version: %s', error.message.red));
336
- if (result.statusCode !== 204) exit(util.format('Failed to unpublish version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message.red : result.text));
333
+ if (error && !error.response) return exit(util.format('Failed to unpublish version: %s', error.message));
334
+ if (result.statusCode !== 204) exit(util.format('Failed to unpublish version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
337
335
 
338
- console.log('version unpublished.'.green);
336
+ console.log('version unpublished.');
339
337
  });
340
338
  }
341
339
 
@@ -348,10 +346,10 @@ function revokeVersion(appstoreId, version) {
348
346
  .query({ accessToken: config.appStoreToken() })
349
347
  .send({ });
350
348
  }, function (error, result) {
351
- if (error && !error.response) return exit(util.format('Failed to revoke version: %s', error.message.red));
352
- if (result.statusCode !== 200) exit(util.format('Failed to revoke version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message.red : result.text));
349
+ if (error && !error.response) return exit(util.format('Failed to revoke version: %s', error.message));
350
+ if (result.statusCode !== 200) exit(util.format('Failed to revoke version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
353
351
 
354
- console.log('version revoked.'.green);
352
+ console.log('version revoked.');
355
353
  });
356
354
  }
357
355
 
@@ -364,10 +362,10 @@ function approveVersion(appstoreId, version) {
364
362
  .query({ accessToken: config.appStoreToken() })
365
363
  .send({ });
366
364
  }, function (error, result) {
367
- if (error && !error.response) return exit(util.format('Failed to approve version: %s', error.message.red));
368
- if (result.statusCode !== 200) exit(util.format('Failed to approve version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message.red : result.text));
365
+ if (error && !error.response) return exit(util.format('Failed to approve version: %s', error.message));
366
+ if (result.statusCode !== 200) exit(util.format('Failed to approve version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
369
367
 
370
- console.log('Approved.'.green);
368
+ console.log('Approved.');
371
369
  console.log('');
372
370
  });
373
371
  }
@@ -378,7 +376,7 @@ function delApp(appId, force) {
378
376
  assert(typeof force === 'boolean');
379
377
 
380
378
  if (!force) {
381
- console.log('This will delete app %s from the appstore!'.red, appId.bold);
379
+ console.log('This will delete app %s from the appstore!', appId);
382
380
  var reallyDelete = readlineSync.question(util.format('Really do this? [y/N]: '), {});
383
381
  if (reallyDelete.toUpperCase() !== 'Y') exit();
384
382
  }
@@ -386,10 +384,10 @@ function delApp(appId, force) {
386
384
  superagentEnd(function () {
387
385
  return superagent.del(createUrl('/api/v1/developers/apps/' + appId)).query({ accessToken: config.appStoreToken() });
388
386
  }, function (error, result) {
389
- if (error && !error.response) return exit(util.format('Failed to unpublish app: %s', error.message.red));
390
- if (result.statusCode !== 204) exit(util.format('Failed to unpublish app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message.red : result.text));
387
+ if (error && !error.response) return exit(util.format('Failed to unpublish app: %s', error.message));
388
+ if (result.statusCode !== 204) exit(util.format('Failed to unpublish app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
391
389
 
392
- console.log('App unpublished.'.green);
390
+ console.log('App unpublished.');
393
391
  });
394
392
  }
395
393
 
@@ -402,14 +400,14 @@ function submitAppForReview(manifest, callback) {
402
400
  .query({ accessToken: config.appStoreToken() })
403
401
  .send({ });
404
402
  }, function (error, result) {
405
- if (error && !error.response) exit(util.format('Failed to submit app for review: %s', error.message.red));
403
+ if (error && !error.response) exit(util.format('Failed to submit app for review: %s', error.message));
406
404
  if (result.statusCode === 404) {
407
- console.log('No version %s found. Please use %s first.', manifest.version.bold, 'cloudron appstore upload'.cyan);
408
- exit('Failed to submit app for review.'.red);
405
+ console.log('No version %s found. Please use %s first.', manifest.version, 'cloudron appstore upload');
406
+ exit('Failed to submit app for review.');
409
407
  }
410
- if (result.statusCode !== 200) return exit(util.format('Failed to submit app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message.red : result.text));
408
+ if (result.statusCode !== 200) return exit(util.format('Failed to submit app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
411
409
 
412
- console.log('App submitted for review.'.green);
410
+ console.log('App submitted for review.');
413
411
  console.log('You will receive an email when approved.');
414
412
 
415
413
  callback();
@@ -520,8 +518,8 @@ function listPublishedApps(options) {
520
518
  .query({ accessToken: config.appStoreToken() })
521
519
  .send({ });
522
520
  }, function (error, result) {
523
- if (error && !error.response) return exit(util.format('Failed to get list of published apps: %s', error.message.red));
524
- if (result.statusCode !== 200) return exit(util.format('Failed to get list of published apps (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message.red : result.text));
521
+ if (error && !error.response) return exit(util.format('Failed to get list of published apps: %s', error.message));
522
+ if (result.statusCode !== 200) return exit(util.format('Failed to get list of published apps (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
525
523
 
526
524
  if (result.body.apps.length === 0) return console.log('No apps published.');
527
525
 
@@ -43,7 +43,7 @@ function authenticateBuildService(options, callback) {
43
43
 
44
44
  var buildServiceConfig = config.getBuildServiceConfig();
45
45
 
46
- if (!options.hideBanner) console.log('Build Service login'.bold + ` (${buildServiceConfig.url}):`);
46
+ if (!options.hideBanner) console.log('Build Service login' + ` (${buildServiceConfig.url}):`);
47
47
 
48
48
  var username = options.username || readlineSync.question('Username: ', {});
49
49
  var password = options.password || readlineSync.question('Password: ', { noEchoBack: true });
@@ -56,7 +56,7 @@ function authenticateBuildService(options, callback) {
56
56
  if (error && !error.response) exit(error);
57
57
 
58
58
  if (result.statusCode !== 200 && result.statusCode !== 201) {
59
- console.log('Login failed.'.red);
59
+ console.log('Login failed.');
60
60
 
61
61
  options.hideBanner = true;
62
62
  options.username = '';
@@ -68,7 +68,7 @@ function authenticateBuildService(options, callback) {
68
68
  buildServiceConfig.token = result.body.accessToken;
69
69
  config.setBuildServiceConfig(buildServiceConfig);
70
70
 
71
- console.log('Login successful.'.green);
71
+ console.log('Login successful.');
72
72
 
73
73
  if (typeof callback === 'function') callback();
74
74
  });
@@ -120,11 +120,11 @@ function followBuildLog(buildId, raw, callback) {
120
120
  if (data.stream) { // build log
121
121
  process.stdout.write(data.stream);
122
122
  } else if (data.message) {
123
- console.log(data.message.yellow.bold);
123
+ console.log(data.message);
124
124
  } else if (data.errorDetail) {
125
- console.log(data.errorDetail.message ? data.errorDetail.message.red.bold : data.errorDetail);
125
+ console.log(data.errorDetail.message ? data.errorDetail.message : data.errorDetail);
126
126
  } else if (typeof data.error === 'string') {
127
- console.log(data.error.red.bold);
127
+ console.log(data.error);
128
128
  } else if (data.error) {
129
129
  console.error(data.error);
130
130
  }
@@ -188,16 +188,16 @@ function buildLocal(manifest, sourceDir, appConfig, options) {
188
188
 
189
189
  if (options.push) {
190
190
  console.log();
191
- console.log(`Pushing ${dockerImage}`.bold);
191
+ console.log(`Pushing ${dockerImage}`);
192
192
 
193
193
  safe.child_process.execSync(`docker push ${dockerImage}`, { stdio: 'inherit' });
194
- if (safe.error) exit('Failed to push image (are you logged in? if not, use "docker login")'.red);
194
+ if (safe.error) exit('Failed to push image (are you logged in? if not, use "docker login")');
195
195
  }
196
196
 
197
197
  let result = safe.child_process.execSync(`docker inspect --format="{{index .RepoDigests 0}}" ${dockerImage}`, { encoding: 'utf8' });
198
- if (safe.error) exit('Failed to inspect image'.red);
198
+ if (safe.error) exit('Failed to inspect image');
199
199
  let match = /.*@sha256:(.*)/.exec(result.trim());
200
- if (!match) exit('Failed to detect sha256'.red);
200
+ if (!match) exit('Failed to detect sha256');
201
201
 
202
202
  appConfig.dockerImage = `${dockerImage}`;
203
203
  appConfig.dockerImageSha256 = match[1]; // stash this separately for now
@@ -205,7 +205,7 @@ function buildLocal(manifest, sourceDir, appConfig, options) {
205
205
  }
206
206
 
207
207
  function buildRemote(manifest, sourceDir, appConfig, options) {
208
- console.log('Using build service', config.getBuildServiceConfig().url.cyan);
208
+ console.log('Using build service', config.getBuildServiceConfig().url);
209
209
 
210
210
  let tag;
211
211
  if (options.tag) {
@@ -219,7 +219,7 @@ function buildRemote(manifest, sourceDir, appConfig, options) {
219
219
 
220
220
  const dockerImage = `${appConfig.repository}:${tag}`;
221
221
 
222
- console.log('Building %s', dockerImage.bold);
222
+ console.log('Building %s', dockerImage);
223
223
 
224
224
  var sourceArchiveFilePath = path.join(os.tmpdir(), path.basename(sourceDir) + '.tar.gz');
225
225
  var dockerignoreFilePath = path.join(sourceDir, '.dockerignore');
@@ -259,9 +259,9 @@ function buildRemote(manifest, sourceDir, appConfig, options) {
259
259
  .field('buildArgs', JSON.stringify(buildArgsObject))
260
260
  .attach('sourceArchive', sourceArchiveFilePath);
261
261
  }, function (error, result) {
262
- if (error && !error.response) return exit(util.format('Failed to build app: %s', error.message.red));
263
- if (result.statusCode === 413) exit('Failed to build app. The app source is too large.\nPlease adjust your .dockerignore file to only include neccessary files.'.red);
264
- if (result.statusCode !== 201) exit(util.format('Failed to build app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message.red : result.text));
262
+ if (error && !error.response) return exit(util.format('Failed to build app: %s', error.message));
263
+ if (result.statusCode === 413) exit('Failed to build app. The app source is too large.\nPlease adjust your .dockerignore file to only include neccessary files.');
264
+ if (result.statusCode !== 201) exit(util.format('Failed to build app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
265
265
 
266
266
  var buildId = result.body.id;
267
267
 
@@ -273,16 +273,16 @@ function buildRemote(manifest, sourceDir, appConfig, options) {
273
273
  return superagent.get(`${buildServiceConfig.url}/api/v1/builds/${buildId}`)
274
274
  .query({ accessToken: buildServiceConfig.token });
275
275
  }, function (error, result) {
276
- if (error && !error.response) return exit(util.format('Failed to build app: %s', error.message.red));
277
- if (result.statusCode !== 200) exit(util.format('Failed to build app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message.red : result.text));
278
- if (result.body.status !== 'success') exit('Failed to build app. See log output above.'.red);
276
+ if (error && !error.response) return exit(util.format('Failed to build app: %s', error.message));
277
+ if (result.statusCode !== 200) exit(util.format('Failed to build app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
278
+ if (result.body.status !== 'success') exit('Failed to build app. See log output above.');
279
279
 
280
280
  appConfig.dockerImage = dockerImage;
281
281
  // appConfig.dockerImageSha256 = match[1]; // stash this separately for now
282
282
  config.setAppConfig(sourceDir, appConfig);
283
283
 
284
- console.log(dockerImage.bold);
285
- console.log('\nBuild successful'.green);
284
+ console.log(dockerImage);
285
+ console.log('\nBuild successful');
286
286
 
287
287
  exit();
288
288
  });
@@ -299,7 +299,7 @@ function build(options) {
299
299
  if (!manifestFilePath) return exit('No CloudronManifest.json found');
300
300
 
301
301
  const result = manifestFormat.parseFile(manifestFilePath);
302
- if (result.error) return exit('Error in CloudronManifest.json: ' + result.error.message.red);
302
+ if (result.error) return exit('Error in CloudronManifest.json: ' + result.error.message);
303
303
 
304
304
  let manifest = result.manifest;
305
305
  const sourceDir = path.dirname(manifestFilePath);
@@ -336,7 +336,7 @@ function build(options) {
336
336
  if (typeof options.setRepository === 'string') {
337
337
  repository = options.setRepository;
338
338
  } else {
339
- repository = readlineSync.question(`Enter repository (e.g registry/username/${manifest.id || path.basename(sourceDir)}): `, {});
339
+ repository = readlineSync.question(`Enter docker repository (e.g registry/username/${manifest.id || path.basename(sourceDir)}): `, {});
340
340
  if (!repository) exit('No repository provided');
341
341
  console.log();
342
342
  }
package/src/completion.js CHANGED
@@ -5,8 +5,6 @@
5
5
  var helper = require('./helper.js'),
6
6
  util = require('util');
7
7
 
8
- require('colors');
9
-
10
8
  exports = module.exports = function (options) {
11
9
  var completion = '';
12
10
 
package/src/helper.js CHANGED
@@ -14,8 +14,8 @@ exports = module.exports = {
14
14
  };
15
15
 
16
16
  function exit(error) {
17
- if (error instanceof Error) console.log(error.message.red);
18
- else if (error) console.log(util.format.apply(null, Array.prototype.slice.call(arguments)).red);
17
+ if (error instanceof Error) console.log(error.message);
18
+ else if (error) console.log(util.format.apply(null, Array.prototype.slice.call(arguments)));
19
19
 
20
20
  process.exit(error ? 1 : 0);
21
21
  }
@@ -1,3 +1,3 @@
1
- FROM cloudron/base:3.0.0@sha256:455c70428723e3a823198c57472785437eb6eab082e79b3ff04ea584faf46e92
1
+ FROM cloudron/base:3.1.0@sha256:eb2ab9c7d361acda2f3ef2d8388154bc48f1651b5013fe6de4beea003018e427
2
2
 
3
3
  EXPOSE <%- httpPort %>