1 | var fs = require('fs-extra');
|
2 | var path = require('path');
|
3 | var extract = require('extract-zip');
|
4 | var inquirer = require('inquirer');
|
5 | var shell = require('shelljs');
|
6 | var Login = require('../util/login');
|
7 | var Domo = require('ryuu-client-beta');
|
8 | var log = require('../util/log');
|
9 | var evoke = require('../util/evoke');
|
10 | var constants = require('../util/constants');
|
11 |
|
12 | module.exports = function(program){
|
13 | program
|
14 | .command('download')
|
15 | .description('download a Custom App design')
|
16 | .option('-i, --design-id <id>', 'design id')
|
17 | .option('-d, --design-version <design-version>', 'design version')
|
18 | .action(function(args){
|
19 | var login = Login.getMostRecentLogin();
|
20 | Login.verifyLogin(login);
|
21 |
|
22 | var domo = new Domo(login.instance, login.refreshToken, constants.CLIENT_ID);
|
23 |
|
24 | var prompts = [];
|
25 |
|
26 | if (!args.designId) {
|
27 | prompts.push({
|
28 | type: 'input',
|
29 | message: 'design id',
|
30 | name: 'designId'
|
31 | });
|
32 | }
|
33 |
|
34 | if (!args.designVersion) {
|
35 | prompts.push({
|
36 | type: 'input',
|
37 | message: 'version',
|
38 | name: 'version',
|
39 | default: 'latest'
|
40 | });
|
41 | }
|
42 | inquirer.prompt(prompts, function(answers){
|
43 | answers.designId = args.designId || answers.designId;
|
44 | answers.version = args.designVersion || answers.version;
|
45 |
|
46 | domo.download(answers.designId, answers.version).then(function(req) {
|
47 | req.on('response', function(response){
|
48 | if (response.statusCode === 200) {
|
49 | var regexp = /filename="(.*)"/;
|
50 | var name = response.headers['content-disposition'].match(regexp)[1] || 'domoapp';
|
51 | } else {
|
52 | log.fail('Design not found. Make sure you have the correct design id.');
|
53 | }
|
54 |
|
55 | var writeStream = fs.createWriteStream('./'+name+'.zip', {flags: 'w+', mode: 0o666});
|
56 | req.pipe(writeStream);
|
57 |
|
58 | writeStream.on('finish', function(){
|
59 | var source = path.resolve('./'+name+'.zip');
|
60 | var target = path.resolve('./'+name);
|
61 |
|
62 | extract(source, {dir: target}, function(err, results) {
|
63 | if (!err){
|
64 | shell.chmod('-R', 'u+w', target);
|
65 | fs.remove(source);
|
66 | process.exit();
|
67 | }
|
68 | });
|
69 | });
|
70 | });
|
71 | })
|
72 | .catch(evoke(log.clientRequestFailed, 'Unable to download design ' + answers.designId));
|
73 | });
|
74 |
|
75 | });
|
76 | }
|