Skip to content

Commit

Permalink
domain: add favourite domain sub commands
Browse files Browse the repository at this point in the history
  • Loading branch information
Julien Tanguy authored and hsablonniere committed Aug 20, 2020
1 parent 51fa3b5 commit 9320f9c
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 4 deletions.
13 changes: 12 additions & 1 deletion bin/clever.js
Original file line number Diff line number Diff line change
Expand Up @@ -477,10 +477,21 @@ function run () {
description: 'Remove a domain name from a Clever Cloud application',
args: [args.fqdn],
}, domain('rm'));
const domainSetFavouriteCommand = cliparse.command('set', {
description: 'Set the favourite domain for a Clever Cloud application',
args: [args.fqdn],
}, domain('setFavourite'));
const domainUnsetFavouriteCommand = cliparse.command('unset', {
description: 'Unset the favourite domain for a Clever Cloud application',
}, domain('unsetFavourite'));
const domainFavouriteCommands = cliparse.command('favourite', {
description: 'Manage Clever Cloud application favourite domain name',
commands: [domainSetFavouriteCommand, domainUnsetFavouriteCommand],
}, domain('getFavourite'));
const domainCommands = cliparse.command('domain', {
description: 'Manage Clever Cloud application domain names',
options: [opts.alias],
commands: [domainCreateCommand, domainRemoveCommand],
commands: [domainCreateCommand, domainFavouriteCommands, domainRemoveCommand],
}, domain('list'));

// DRAIN COMMANDS
Expand Down
62 changes: 59 additions & 3 deletions src/commands/domain.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,41 @@

const AppConfig = require('../models/app_configuration.js');
const Logger = require('../logger.js');
const { get: getApp, addDomain, removeDomain } = require('@clevercloud/client/cjs/api/application.js');
const {
get: getApp,
addDomain,
getFavouriteDomain: getFavouriteDomainWithError,
markFavouriteDomain,
unmarkFavouriteDomain,
removeDomain,
} = require('@clevercloud/client/cjs/api/application.js');
const { sendToApi } = require('../models/send-to-api.js');

function getFavouriteDomain ({ ownerId, appId }) {
return getFavouriteDomainWithError({ id: ownerId, appId })
.then(sendToApi)
.then(({ fqdn }) => fqdn)
.catch((error) => {
if (error.id === 4021) {
// No favourite vhost
return null;
}
throw error;
});
}

async function list (params) {
const { alias } = params.options;
const { ownerId, appId } = await AppConfig.getAppDetails({ alias });

const app = await getApp({ id: ownerId, appId }).then(sendToApi);
return app.vhosts.forEach(({ fqdn }) => Logger.println(fqdn));
const favouriteDomain = await getFavouriteDomain({ ownerId, appId });
return app.vhosts.forEach(({ fqdn }) => {
const prefix = (fqdn === favouriteDomain)
? '* '
: ' ';
Logger.println(prefix + fqdn);
});
}

async function add (params) {
Expand All @@ -23,6 +49,36 @@ async function add (params) {
Logger.println('Your domain has been successfully saved');
}

async function getFavourite (params) {
const { alias } = params.options;
const { ownerId, appId } = await AppConfig.getAppDetails({ alias });

const favouriteDomain = await getFavouriteDomain({ ownerId, appId });

if (favouriteDomain == null) {
return Logger.println('No favourite domain set');
}

return Logger.println(favouriteDomain);
}

async function setFavourite (params) {
const [fqdn] = params.args;
const { alias } = params.options;
const { ownerId, appId } = await AppConfig.getAppDetails({ alias });

await markFavouriteDomain({ id: ownerId, appId }, { fqdn }).then(sendToApi);
Logger.println('Your favourite domain has been successfully set');
}

async function unsetFavourite (params) {
const { alias } = params.options;
const { ownerId, appId } = await AppConfig.getAppDetails({ alias });

await unmarkFavouriteDomain({ id: ownerId, appId }).then(sendToApi);
Logger.println('Favourite domain has been successfully unset');
}

async function rm (params) {
const [fqdn] = params.args;
const { alias } = params.options;
Expand All @@ -33,4 +89,4 @@ async function rm (params) {
Logger.println('Your domain has been successfully removed');
}

module.exports = { list, add, rm };
module.exports = { list, add, getFavourite, setFavourite, unsetFavourite, rm };

0 comments on commit 9320f9c

Please sign in to comment.