示例#1
0
function do_delete(subcmd, opts, args, cb) {
    if (opts.help) {
        this.do_help('help', {}, [subcmd], cb);
        return;
    } else if (args.length !== 1) {
        cb(new errors.UsageError('incorrect number of args'));
        return;
    }

    var uuid = args[0];

    var MOCKCLOUD;
    vasync.waterfall([
        function (next) {
            common.createMockCloudClient(function (err, client) {
                MOCKCLOUD = client;
                next();
            });
        },
        function (next) {
            MOCKCLOUD.del('/servers/' + uuid, onDelete);
            function onDelete(err, req, res, info) {
                next(err);
            }
        }
    ], function (err) {
        cb(err);
    });
}
示例#2
0
ModelWaitlist.prototype.deleteAllTickets = function (callback) {
    var self = this;

    vasync.waterfall([
        function (wfcb) {
            ModelWaitlist.getMoray().deleteMany(
                buckets.waitlist_tickets.name,
                '(server_uuid=' + self.uuid + ')',
                function (delError) {
                    wfcb(delError);
                    return;
                });
        },
        function (wfcb) {
            ModelWaitlist.getMoray().deleteMany(
                buckets.waitlist_queues.name,
                '(server_uuid=' + self.uuid + ')',
                function (delError) {
                    wfcb(delError);
                    return;
                });
        }
    ],
    function (err) {
        callback(err);
    });
};
exports.getDeliverableUpdates = function (req, res, next) {
  this.log = log.child({ action: 'getDeliverableUpdates' }); 
  var self = this;
  async.waterfall([
    function(cb) { // authenticate with node API
      apiCommon.passport.authenticate('bearer', { session: false }, function(err, user) {
        if (err) { return cb(err); }
        if (!user) { return cb(null, null); }
        return cb(null, user);
      })(req, res, next);
    },
    function(user, cb) { // get data from DB
      if (user) {
        if (req.params.ids) {
          let fields = [req.params.ids];
          dbDeliverableUpdate.getDeliverableUpdatesWithIds(fields, function (err, result) {
            if (err) { 
              self.log.error(err, 'getDeliverableUpdatesWithIds');
              return cb(err); 
            }
            return cb(null, result);
          });
        } else if (req.params.quarter) {
          let fields = { quarter : req.params.quarter };
          dbDeliverableUpdate.getDeliverableUpdates(fields, function (err, result) {
            if (err) { 
              self.log.error(err, 'getDeliverableUpdates');
              return cb(err); 
            }
            return cb(null, result);
          });
        } 
      } else {
        self.log.warn('Not logged in');
        return cb(null, null);
      }
    },
    function(result, cb) { // format data for return
      let deliverableUpdates = { deliverableUpdates: [] };
      for (var i in result) {
        let deliverableUpdateD = result[i];
        let deliverableUpdateF = { id:                 deliverableUpdateD.id,
                                   updateDate:         deliverableUpdateD.updateDate,
                                   deliveryDate:       deliverableUpdateD.deliveryDate,
                                   status:             deliverableUpdateD.status,
                                   commentary:         deliverableUpdateD.commentary };
        deliverableUpdates.deliverableUpdates[i] = deliverableUpdateF;
      }
      return cb(null, deliverableUpdates);
    }
  ],
  function(err, result) {
    if (err) {
      self.log.error(err);
      return next(err);
    }
    res.send(200, result);
    next();
  });
};
示例#4
0
exports.getUser = function (req, res, next) {
  this.log = log.child({ action: 'getUser' }); 
  var self = this;
  async.waterfall([
    function(cb) { // get data from DB
      let userR = { user: {} };

      self.log.info({params: req.params});
      let fields = [ req.params.id ];
      dbUser.getUser(fields, function (err, result) {
        if (err) { 
          self.log.error(err, 'getUser');
          return cb(err); 
        }
        let userD  = result[0];
        self.log.info({user: userD});
        let userF = { id:   userD.id,
                      name: userD.name };
        userR.user = userF;
        return cb(null, userR);
      });
    },
  ],
  function(err, result) {
    if (err) {
      self.log.error(err);
      return next(err);
    }
    res.send(200, result);
    next();
  });
};
示例#5
0
test('commit upload: commit content md5 match', function (t) {
    var self = this;
    vasync.waterfall([
        function (callback) {
            self.createUpload(self.path, null, function (err) {
                if (ifErr(t, err, 'created upload')) {
                    callback(err);
                } else {
                    callback(null);
                }
            });
        },
        function (callback) {
            self.writeTestObject(self.uploadId, 0, function (err, res) {
                if (ifErr(t, err, 'uploaded part')) {
                    callback(err);
                } else {
                    t.ok(res);
                    t.checkResponse(res, 204);
                    callback(null, res.headers.etag);
                }
            });
        },
        function (etag, callback) {
            self.commitUpload(self.uploadId, [etag], function (err, res) {
                if (ifErr(t, err, 'commited upload')) {
                    callback(err);
                } else {
                    t.ok(res);
                    t.ok(res.headers);
                    t.ok(res.headers['computed-md5']);
                    if (res === undefined || res.headers == undefined) {
                        callback(new Error('commit upload missing res'));
                        return;
                    }
                    callback(null, res.headers['computed-md5']);
                }
            });
        },
        function (computedMd5, callback) {
            self.client.info(self.path, function (err, info) {
                if (ifErr(t, err, 'got object info')) {
                    callback(err);
                } else {
                    t.ok(info, 'failed to get object info');
                    if (info) {
                        var headers = info.headers || {};
                        t.equal(computedMd5, helper.TEXT_MD5);
                        t.equal(computedMd5, headers['content-md5']);
                    }
                    callback(null);
                }
            });
        }
    ], function () {
        t.end();
    });
});
    "releaseVersion": function releaseVersion(key, version, releaseDate, cb) {
      //convert date to a string in format YYYY-MM-DD
      var releaseDateStr =
        releaseDate.getFullYear() + "-" +
        ("" + (releaseDate.getMonth() + 1)).slice(-2) + "-" +
        ("0" + releaseDate.getDate()).slice(-2);

      vasync.waterfall([
        function getProjectVersions(callback) {
          oauthRest({
            "config": config,
            "query": "project/" + key + "/versions"
          }, callback);
        },
        function getIssuesUnresolvedCount(versions, callback) {
          var versionObj = _.find(versions, function matchVersion(v) {
            return v.name === version;
          });
          if (versionObj) {
            oauthRest({
              "config": config,
              "query": "version/" + versionObj.id + "/unresolvedIssueCount"
            }, function getVersionCallback(err, data) {
              data = data || {};
              versionObj.issuesUnresolvedCount = data.issuesUnresolvedCount;
              callback(err, versionObj);
            });
          } else {
            callback("Version " + version + " not found in project " + key);
          }
        },
        function releaseIfZeroIssuesUnresolved(versionObj, callback) {
          if (versionObj.issuesUnresolvedCount === 0) {
            oauthRest({
                "config": config,
                "query": "version/" + versionObj.id,
                "method": "put",
                "postData": {
                  "released": true,
                  "releaseDate": releaseDateStr
                }
              },
              function getVersionCallback(err) {
                if (!err) {
                  versionObj.released = true;
                  versionObj.releaseDate = releaseDateStr;
                }
                callback(err, versionObj);
              });
          } else {
            //Note: versionObj.released will remain false
            callback(null, versionObj);
          }
        }
      ], cb);
    },
示例#7
0
exports.putUser = function (req, res, next) {
  this.log = log.child({ action: 'putUser' }); 
  var self = this;
  async.waterfall([
    function(cb) { // authenticate with node API
      apiCommon.passport.authenticate('bearer', { session: false }, function(err, user) {
        if (err) { return cb(err); }
        if (!user) { return cb(null, null); }
        return cb(null, user);
      })(req, res, next);
    },
    function(user, cb) { // get existing user password
      if (user) {
        let fields = [ user.name ];
        dbUser.getUserPassword(fields, function (err, result) {
          if (err) { 
            self.log.error(err, 'getUser');
            return cb(err); 
          }
          return cb(null, result[0]);
        });
      } else {
        self.log.warn('Not logged in');
        return cb(null, null);
      }
    },
    function(user, cb) { // update DB
      if (req.params.user.newPassword1 !== req.params.user.newPassword2) {
        var error = new apiCommon.restify.WrongAcceptError("New passwords don't match");
        return cb(error, null);
      }
      if (req.params.user.newPassword1 === req.params.user.oldPassword) {
        var error = new apiCommon.restify.WrongAcceptError("New password can't be the same as old password");
        return cb(error, null);
      }
      let fields = [ { password:      req.params.user.newPassword1,
                       resetPassword: false },
                     req.params.id ];
      dbUser.putUser(fields, user, function (err, result) {
        if (err) { 
          self.log.error(err, 'putUser');
          return cb(err); 
        }
        return cb(null, null);
      });
    },
  ],
  function(err, result) {
    if (err) {
      return next(err);
    }
    req.params.user.id = req.params.id;
    res.send(200, {user: req.params.user});
    next();
  });
};
示例#8
0
test('copy a file into stopped container', function (tt) {
    var cliVer = process.env.DOCKER_CLI_VERSION;
    if (cliVer && semver.lt(cliVer, '1.8.0')) {
        tt.skip('Docker copy out not supported in client ' + cliVer);
        tt.end();
        return;
    }

    tt.plan(15);

    var fnbase = '/var/tmp';
    var fn = 'copy-in.test';

    var localfn = fnbase + '/' + fn;
    var remotefn = fnbase + '/' + fn;

    var hash;

    vasync.waterfall([
        function (next) {
            createCopyInFile(tt, localfn, function (err, sha1) {
                tt.ifErr(err, 'creating copy in file (stopped container)');
                hash = sha1;
                next();
            });
        },
        function (next) {
            stopContainer(tt, CONTAINER_NAME_NGINX2, function (err) {
                tt.ifErr(err, 'error stopping container');
                next();
            });
        },
        function (next) {
            copyFileIn(tt, localfn, remotefn, CONTAINER_NAME_NGINX2,
            function (err) {
                tt.ifErr(err, 'copying file in');
                next();
            });
        },
        function (next) {
            startContainer(tt, CONTAINER_NAME_NGINX2, function (err) {
                tt.ifErr(err, 'error stopping container');
                next();
            });
        },
        function (next) {
            checkFileCopiedIn(tt, remotefn, CONTAINER_NAME_NGINX2, hash,
            function (err) {
                tt.ifErr(err, 'checking file copied in');
                next();
            });
        }
    ], function (err) {
        tt.end();
    });
});
示例#9
0
	self.initAdm(opts, function () {
		adm = self.madm_adm;
		log = self.madm_log;

		vasync.waterfall(funcs, function (err) {
			if (err)
				fatal(err.message);
			self.finiAdm();
			callback();
		});
	});
示例#10
0
    tt.test('docker build from alpine image (cross registry)', function (t) {
        var dockerImageId;
        var tarStream;

        vasync.waterfall([

            function createTar(next) {
                var fileAndContents = {
                    'Dockerfile': 'FROM ' + imageName + '\n'
                                + 'LABEL something=true\n'
                };
                tarStream = createTarStream(fileAndContents);
                next();
            },

            function buildContainer(next) {
                h.buildDockerContainer({
                    dockerClient: DOCKER_ALICE_HTTP,
                    params: {
                        'rm': 'true'  // Remove container after it's built.
                    },
                    test: t,
                    tarball: tarStream
                }, onbuild);

                function onbuild(err, result) {
                    t.ifErr(err, 'build should not error on post');
                    var output = result.body;

                    var hasSuccess = output.indexOf('Successfully built') >= 0;
                    t.ok(hasSuccess,
                        'output should contain: Successfully built');
                    if (hasSuccess) {
                        var reg = new RegExp('Successfully built (\\w+)');
                        dockerImageId = output.match(reg)[1];
                    } else {
                        t.fail('Output: ' + output);
                    }
                    next();
                }
            },

            function removeBuiltImage(next) {
                t.ok(dockerImageId, 'Got the docker image id');
                DOCKER_ALICE.del('/images/' + dockerImageId, next);
            }

        ], function allDone(err) {
            t.ifErr(err);
            t.end();
        });

    });
tape.test('client close actually closes sockets', function (t) {
    var server, nhandles, client;

    server = net.createServer(12345);

    vasync.waterfall([
        function startServer(callback) {
            server.listen(callback);
        },

        function createClient(callback) {
            nhandles = process._getActiveHandles().length;
            client = moray.createClient({
                'log': helper.createLogger(),
                'host': server.address().address,
                'port': server.address().port,
                'maxConnections': 1
            });
            client.on('connect', callback);
        },

        function closeClient(callback) {
            t.ok(nhandles < process._getActiveHandles().length,
                'handle count increased');
            client.on('close', function () {
                /*
                 * Sockets are destroyed in the context where this event is
                 * fired, but it may take another tick for them to disappear
                 * from the list of active handles.
                 */
                setImmediate(callback);
            });
            client.close();
        },

        function closeServer(callback) {
            t.equal(nhandles, process._getActiveHandles().length,
                'handle count decreased');
            server.on('close', function () {
                /* See above. */
                setImmediate(callback);
            });
            server.close();
        }
    ], function (err) {
        t.error(err);
        t.deepEqual([], process._getActiveHandles().filter(function (h) {
            return (h !== process.stderr && h !== process.stdout);
        }));
        t.end();
    });
});
示例#12
0
 function initializeFixtures(callback) {
     vasync.waterfall([
         function createDir(next) {
             cli.exec(sprintf('mkdir -p %s', directoryName),
             function (err, stdout, stderr) {
                 tt.ifErr(err, 'creating test directory');
                 tt.comment('created ' + directoryName);
                 next(err);
             });
         }
     ],
     function (err) {
         tt.ifErr(err);
         callback(err);
     });
 }
示例#13
0
    tt.test('docker build from alpine image (same registry)', function (t) {
        var tarStream;

        vasync.waterfall([

            function createTar(next) {
                var fileAndContents = {
                    'Dockerfile': 'FROM ' + imageName + '\n'
                                + 'LABEL something=true\n'
                };
                tarStream = createTarStream(fileAndContents);
                next();
            },

            function buildContainer(next) {
                h.buildDockerContainer({
                    dockerClient: DOCKER_ALICE_HTTP,
                    params: {
                        't': newTagName,
                        'rm': 'true'  // Remove container after it's built.
                    },
                    test: t,
                    tarball: tarStream
                }, onbuild);

                function onbuild(err, result) {
                    t.ifErr(err, 'build should not error on post');
                    var msg = result.body;

                    var hasSuccess = msg.indexOf('Successfully built') >= 0;
                    t.ok(hasSuccess, 'output contains Successfully built');

                    // Delete the built image.
                    if (hasSuccess) {
                        DOCKER_ALICE.del('/images/' + escape(newTagName), next);
                    } else {
                        next();
                    }
                }
            }

        ], function allDone(err) {
            t.ifErr(err);
            t.end();
        });

    });
示例#14
0
    tt.test('docker create', function (t) {
        t.plan(10);

        var uuid;

        vasync.waterfall([
            function (next) {
                // Create VMAPI client
                h.createVmapiClient(function (err, client) {
                    t.error(err);
                    vmapi = client;
                    next(err);
                });
            },
            function (next) {
                // Create Docker client
                h.createDockerRemoteClient(function (err, client) {
                    docker = client;
                    next(err);
                });
            },
            function (next) {
                h.createDockerContainer({
                    vmapiClient: vmapi,
                    dockerClient: docker,
                    test: t
                }, oncreate);

                function oncreate(err, result) {
                    t.error(err);
                    uuid = result.vm.uuid;
                    next();
                }
            },
            function (next) {
                // Cheat
                exec('vmadm destroy ' + uuid, function (err, stdout, stderr) {
                    t.error(err, 'vmadm destroy should succeed');
                    next(err);
                });
            }
        ], function (err) {
            t.error(err);
            t.end();
        });
    });
示例#15
0
exports.getDeliverableUpdate = function (req, res, next) {
  this.log = log.child({ action: 'getDeliverableUpdate' }); 
  var self = this;
  async.waterfall([
    function(cb) { // authenticate with node API
      apiCommon.passport.authenticate('bearer', { session: false }, function(err, user) {
        if (err) { return cb(err); }
        if (!user) { return cb(null, null); }
        return cb(null, user);
      })(req, res, next);
    },
    function(user, cb) { // get data from DB
      let deliverableUpdate = { deliverableUpdate: {} };
      if (user) {
        let fields = [ req.params.id ];
        dbDeliverableUpdate.getDeliverableUpdate(fields, function (err, result) {
          if (err) { 
            self.log.error(err, 'getDeliverableUpdate');
            return cb(err); 
          }
          let deliverableUpdateD  = result[0];
          let deliverableUpdateF = { id:                 deliverableUpdateD.id,
                                     updateDate:         deliverableUpdateD.updateDate,
                                     deliveryDate:       deliverableUpdateD.deliveryDate,
                                     status:             deliverableUpdateD.status,
                                     commentary:         deliverableUpdateD.commentary };
          deliverableUpdate.deliverableUpdate = deliverableUpdateF;
          return cb(null, deliverableUpdate);
        });
      } else {
        self.log.warn('Not logged in');
        return cb(null, deliverableUpdate);
      }
    },
  ],
  function(err, result) {
    if (err) {
      self.log.error(err);
      return next(err);
    }
    res.send(200, result);
    next();
  });
};
示例#16
0
MockAgent.prototype.start = function () {
    var self = this;

    vasync.waterfall([
        function (next) {
            self.loadSDCConfig(next);
        },
        function (next) {
            self.loadState(next);
        },
        function (next) {
            self.monitorMockCNs();
            next();
        },
        function (next) {
            self.startHttpServer(next);
        }
    ], function (err) {
    });
};
示例#17
0
exports.putDeliverableUpdate = function (req, res, next) {
  this.log = log.child({ action: 'putDeliverableUpdate' }); 
  var self = this;
  async.waterfall([
    function(cb) { // authenticate with node API
      apiCommon.passport.authenticate('bearer', { session: false }, function(err, user) {
        if (err) { return cb(err); }
        if (!user) { return cb(null, null); }
        return cb(null, user);
      })(req, res, next);
    },
    function(user, cb) { // update DB
      if (user) {
        // get just the date portion
        req.params.deliverableUpdate.updateDate   = moment(req.params.deliverableUpdate.updateDate).format('YYYY-MM-DD');
        req.params.deliverableUpdate.deliveryDate = moment(req.params.deliverableUpdate.deliveryDate).format('YYYY-MM-DD');
        let fields = [ req.params.deliverableUpdate,
                       req.params.id ];
        dbDeliverableUpdate.putDeliverableUpdate(fields, user, function (err, result) {
          if (err) { 
            self.log.error(err, 'putDeliverableUpdate');
            return cb(err); 
          }
          return cb(null, null);
        });
      } else {
        self.log.warn('Not logged in');
        return cb(null, null);
      }
    },
  ],
  function(err, result) {
    if (err) {
      self.log.error(err);
      return next(err);
    }
    req.params.deliverableUpdate.id = req.params.id;
    res.send(200, {deliverableUpdate: req.params.deliverableUpdate});
    next();
  });
};
示例#18
0
function del_blog_post(req, res){
    var post_id = req.query.id;    
    var selector = {};
    var options = {};
    var col;
    console.log("Request coming in to delete the Blog post %s", post_id);
    vasync.waterfall([function f1(callback) {
        selector[post_attr.ID] = post_id;
        col = blogdb.collection('blog_post');
        col.deleteOne(selector, options, function(err, result) {
            if (err) 
                callback(err);
            else
                callback();
        });
    }, function f2(callback) {
    // Delete all the comments associated with the post_id
        console.log("Deleting comments releated to post %s", post_id);
        selector = {};
        selector[comm_attr.POST_ID] = post_id;
        col = blogdb.collection('comments');
        col.deleteMany(selector, options, function(err, result) {
            if (err)
                callback(err);
            else
                callback();
        });
    }], function(err, result) {
        if (err) {
            res.write(JSON.stringify({success: false, error: ui_err_msg.MSG_DEL_ERR}));
            res.end();
            console.log(err);
            return;
        } else {
            res.write(JSON.stringify({success:true, data: ui_msg.MSG_DELETE}, null, " "));
            console.log(result);
            res.end();
        }
    });
}
示例#19
0
    tt.test('docker build from alpine image (cross registry)', function (t) {
        var tarStream;

        vasync.waterfall([

            function createTar(next) {
                var fileAndContents = {
                    'Dockerfile': 'FROM ' + imageName + '\n'
                                + 'LABEL something=true\n'
                };
                tarStream = createTarStream(fileAndContents);
                next();
            },

            function buildContainer(next) {
                h.buildDockerContainer({
                    dockerClient: DOCKER_ALICE_HTTP,
                    params: {
                        'rm': 'true'  // Remove container after it's built.
                    },
                    test: t,
                    tarball: tarStream
                }, onbuild);

                function onbuild(err, result) {
                    t.ifErr(err, 'build should not error on post');
                    var msg = result.body;
                    t.ok(msg.indexOf('different registries') >= 0,
                        'expected a "different registries" error message');
                    next();
                }
            }

        ], function allDone(err) {
            t.ifErr(err);
            t.end();
        });

    });
示例#20
0
test('copy a file out of stopped container', function (tt) {
    tt.plan(9);

    var fnbase = '/var/tmp';
    var fn = 'copyout.test';

    var remotefn = fnbase + '/' + fn;

    var hash;

    vasync.waterfall([
        function (next) {
            createCopyOutFile(tt, remotefn, CONTAINER_NAME_NGINX2,
            function (err, sha1) {
                tt.ifErr(err, 'creating copy out file');
                hash = sha1;
                next();
            });
        },
        function (next) {
            stopContainer(tt, CONTAINER_NAME_NGINX2,
            function (err) {
                tt.ifErr(err, 'stopping copy out container');
                next();
            });
        },
        function (next) {
            copyFileOut(tt, remotefn, fn, CONTAINER_NAME_NGINX2,
            function (err, sha1) {
                tt.ifErr(err, 'copying file out');
                tt.equal(sha1, hash);
                next();
            });
        }
    ], function (err) {
        tt.end();
    });
});
示例#21
0
function MockAgentLoadSDCConfig(callback) {
    var self = this;
    vasync.waterfall([
        function (cb) {
            getMetadata('sdc:dns_domain', function (e, val) {
                if (!e) {
                    self.sdc_config.dns_domain = val;
                }
                cb(e);
            });
        }, function (cb) {
            getMetadata('sdc:datacenter_name', function (e, val) {
                if (!e) {
                    log.info('datacenter = %s', val);
                    self.sdc_config.datacenter_name = val;
                }
                cb(e);
            });
        }
    ], function (err) {
        callback(err);
    });
};
示例#22
0
function listContainers(opts, callback) {
    var dockerClient = opts.dockerClient;
    var t = opts.test;
    var containers;

    vasync.waterfall([
        function (next) {
            // Post create request
            dockerClient.get(
                '/v1.16/containers/json'
                + (opts.all ? '?all=1' : ''), onget);
            function onget(err, res, req, body) {
                t.error(err);
                containers = body;
                next(err);
            }
        }
    ],
    function (err) {
        t.error(err);
        callback(err, containers);
    });
}
示例#23
0
test('copy a file out of running container', function (tt) {
    tt.plan(7);
    var fnbase = '/var/tmp';
    var fn = 'copyout.test';

    var remotefn = fnbase + '/' + fn;

    var hash;

    vasync.waterfall([
        function (next) {
            createCopyOutFile(tt, remotefn, CONTAINER_NAME_NGINX,
            function (err, sha1) {
                tt.ifErr(err, 'creating copy out file');
                hash = sha1;
                tt.comment('hash was ' + hash);
                next();
            });
        },
        function (next) {
            copyFileOut(tt, remotefn, fn, CONTAINER_NAME_NGINX,
            function (err) {
                tt.ifErr(err, 'copying file out');
                next();
            });
        },
        function (next) {
            checkFileCopiedOut(tt, remotefn, hash, CONTAINER_NAME_NGINX,
            function (err) {
                tt.ifErr(err, 'copying file out');
                next();
            });
        }
    ], function (err) {
        tt.end();
    });
});
 PartnerAccountUserMapping.findAccount = function findAccount(token, next) {
   var Account = PartnerAccountUserMapping.app.models.PartnerAccount;
   vasync.waterfall([
     function getMapping(cb) {
       PartnerAccountUserMapping.find({"where": {"userModelId": token.userId}}, cb);
     },
     function getAccounts(result, cb) {
       if (result.length === 1) {
         Account.find({"where": {"id": result[0].partnerAccountId}}, cb);
       } else {
         cb(null, []);
       }
     }
   ], function end(err, result){
     if (err) {
       return next(err);
     }
     debug('> findAccount processed successfully');
     if (result.length === 1) {
       return next(err, [result]);
     }
     return next(err, result);
   });
 };
示例#25
0
exports.archiveDeliverableUpdate = function (req, res, next) {
  this.log = log.child({ action: 'archiveDeliverableUpdate' }); 
  var self = this;
  async.waterfall([
    function(cb) { // authenticate with node API
      apiCommon.passport.authenticate('bearer', { session: false }, function(err, user) {
        if (err) { return cb(err); }
        if (!user) { return cb(null, null); }
        return cb(null, user);
      })(req, res, next);
    },
    function(user, cb) { // update DB
      if (user) {
        let fields = [ req.params.id ];
        dbDeliverableUpdate.archiveDeliverableUpdate(fields, user, function (err, result) {
          if (err) { 
            self.log.error(err, 'archiveDeliverableUpdate');
            return cb(err); 
          }
          return cb(null, null);
        });
      } else {
        self.log.warn('Not logged in');
        return cb(null, null);
      }
    },
  ],
  function(err, result) {
    if (err) {
      self.log.error(err);
      return next(err);
    }
    res.send(200, {});
    next();
  });
};
 "deleteVersion": function deleteVersion(key, version, cb) {
   vasync.waterfall([
     function getProjectVersions(callback) {
       oauthRest({
         "config": config,
         "query": "project/" + key + "/versions"
       }, callback);
     },
     function getVersionAndDelete(versions, callback) {
       var versionObj = _.find(versions, function matchVersion(v) {
         return v.name === version;
       });
       if (versionObj) {
         oauthRest({
           "config": config,
           "query": "version/" + versionObj.id,
           "method": "delete"
         }, callback);
       } else {
         callback("Version " + version + " not found in project " + key);
       }
     }
   ], cb);
 },
示例#27
0
文件: common.js 项目: joyent/manatee
function replacefile(opts, callback) {
    mod_assert.object(opts, 'opts');
    mod_assert.string(opts.src, 'opts.src');
    mod_assert.string(opts.dst, 'opts.dst');
    mod_assert.func(callback, 'callback');

    mod_vasync.waterfall([ function (next) {
        /*
         * Unlink the destination file.
         */
        mod_fs.unlink(opts.dst, function (err) {
            if (err) {
                if (err.code === 'ENOENT') {
                    /*
                     * The file did not exist already.
                     */
                    next();
                    return;
                }

                next(new VE(err, 'unlink destination file'));
                return;
            }

            next();
        });

    }, function (next) {
        /*
         * Read source file.
         */
        mod_fs.readFile(opts.src, { encoding: null }, function (err, data) {
            if (err) {
                next(new VE(err, 'read source file'));
                return;
            }

            next(null, data);
        });

    }, function (data, next) {
        mod_assert.ok(Buffer.isBuffer(data), 'data (Buffer)');
        mod_assert.func(next, 'next');

        /*
         * Write destination file.
         */
        var mode = parseInt('0644', 8);
        mod_fs.writeFile(opts.dst, data, { mode: mode, flag: 'wx' },
          function (err) {
            if (err) {
                next(new VE(err, 'write destination file'));
                return;
            }

            next();
        });

    } ], function (err) {
        if (err) {
            callback(new VE(err, 'replace file "%s" with contents of "%s"',
              opts.dst, opts.src));
            return;
        }

        callback();
    });
}
示例#28
0
vasync.waterfall([
    function _createConfig(callback) {
        var config = {};

        assert.func(callback, 'callback');

        // This first function exists because the first function in the
        // waterfall is "special" in that it doesn't get a first arg. So all we
        // do here is create the config the other functions will add to.
        callback(null, config);
    },
    loadConfig,
    loadSdcConfig,
    loadSysinfo
], function _waterfallComplete(err, config) {
    var vmagent;

    assert.ifError(err, 'Failed to load configuration');
    assert.object(config, 'config');
    assert.uuid(config.server_uuid, 'config.server_uuid');
    assert.string(config.vmapi_url, 'config.vmapi_url');
    assert.optionalNumber(config.periodic_interval);
    assert.ok(!config.log, 'config.log must not be set');

    logger.info({config: config}, 'loaded vm-agent configuration');

    // Pass along our logger
    config.log = logger;

    // Start the agent with our fresh config
    vmagent = new VmAgent(config);
    vmagent.start();
});
    this.login = function f_auth_login($user, $pw, $autoLogin) {
        $autoLogin = $autoLogin || false;
        
        log.info('LOGIN TRY: ' + $user + ' from ' + libs.SFFM.getIP($requestState.request));

        var defer = q.defer();
        async.waterfall([
        
            function ($cb) {
                _getIDFromUser($user).done(function ($id) {
                    
                    $user = $id;
                    $cb();
                }, function ($e) {
                        
                    if ($e === SHPS_ERROR_NO_ROWS) {

                        _getIDFromMail($user).done(function ($id) {
                                                
                            $user = $id;
                            $cb();                
                        }, $cb);
                    }
                    else {
                        
                        $cb($e);
                    }
                });
            },
            function ($cb) {
                
                /* ASVS V2 2.20 VERTICAL PROTECTION */
                _delayBruteforce($user).done(function () {
                        
                    $cb();
                }, $cb);
            },
            function ($cb) {
                
                /* ASVS V2 2.20 HORIZONTAL PROTECTION */
                _delayBruteforce($pw).done(function () {
                
                    $cb();
                }, $cb);
            },
            function ($cb) {

                libs.sql.newSQL('usermanagement', $requestState).done(function ($sql) {
                
                    $cb(null, $sql);
                }, $cb);
            },
            function ($sql, $cb) {
                
                var alt = '';
                if ($autoLogin && libs.SFFM.isHTTPS($requestState.request)) {
                    
                    alt = $requestState.COOKIE.getCookie(SHPS_COOKIE_AUTOLOGINTOKEN) || '0';
                }
                
                var tblU = $sql.openTable('user');
                $sql.query()
                    .get(tblU.col('*'))
                    .fulfilling()
                    .or(function ($sqb) {
                    
                        return $sqb.eq(tblU.col('ID'), $user);
                    }, function ($sqb) {
                    
                        return $sqb.eq(tblU.col('autoLoginToken'), alt);
                    })
                    .execute()
                    .done(function ($rows) {
                    
                    $sql.free();
                    if ($rows.length <= 0) {
                        
                        $cb(new Error(SHPS_ERROR_NO_ROWS, false));
                    }
                    else {
                        
                        var ur = $rows[0];
                        if ($rows.length > 1) {
                            
                            var i = 0;
                            var l = $rows.length;
                            while (i < l) {
                                
                                if ($rows[i].autoLoginToken === alt) {
                                    
                                    ur = $rows[i];
                                    break;
                                }
                                
                                i++;
                            }
                        }
                        
                        // ASVS V2 3.16
                        var lastSID = _isLoggedInFromDBRecord(ur);
                        if (lastSID !== false && lastSID !== _session.toString()) {
                            
                            _session.closeSession(lastSID);
                        }
                        
                        if (alt !== '' && alt === ur.autoLoginToken/* && check IP range */) {
                            
                            var newToken = _session.genNewSID();
                            $requestState.COOKIE.setCookie(SHPS_COOKIE_AUTOLOGINTOKEN, newToken, $requestState.config.securityConfig.autoLoginTimeout.value, true);
                            
                            libs.sql.newSQL('usermanagement', $requestState).done(function ($sql) {
                                                    
                                $sql.openTable('user').update({
                                    
                                    autoLoginToken: newToken,
                                    lastIP: libs.SFFM.getIP($requestState.request),
                                    lastActivity: Date.now() / 1000
                                })
                                .eq(tblU.col('ID'), ur.ID)
                                .execute()
                                .done($sql.free, $sql.free);
                            });
                            
                            $cb(null, true);
                            return;
                        }
                        
                        if (ur.isLocked) {

                            $cb(null, false);
                            return;
                        }

                        _checkPassword($user, $pw, ur.password, ur.salt).done(function ($cpR) {
                            
                            if ($cpR) {
                                
                                $requestState.SESSION = oa($requestState.SESSION, ur);
                                
                                var newToken = _session.genNewSID();
                                $requestState.COOKIE.setCookie(SHPS_COOKIE_AUTOLOGINTOKEN, newToken, $requestState.config.securityConfig.autoLoginTimeout.value, true);
                                
                                libs.sql.newSQL('usermanagement', $requestState).done(function ($sql) {
                                    
                                    $sql.openTable('user').update({
                                        
                                        autoLoginToken: newToken,
                                        lastIP: libs.SFFM.getIP($requestState.request),
                                        lastActivity: Date.now() / 1000
                                    })
                                    .eq(tblU.col('ID'), ur.ID)
                                    .execute()
                                    .done($sql.free, $sql.free);

                                });
                            }
                            
                            $cb(null, $cpR);             
                        }, $cb);
                    }
                }, $cb);
            },
        ], function ($err, $res) {
            
            if ($err) {

                defer.reject(new Error($err));
            }
            else {

                defer.resolve($res);
            }
            
        });
        
        return defer.promise;
    };
示例#30
0
    tt.test('docker build own alpine image', function (t) {
        var dockerImageId = null;
        var tarStream;

        vasync.waterfall([

            function createTar(next) {
                var fileAndContents = {
                    'Dockerfile': 'FROM ' + imageName1 + '\n'
                                + 'LABEL sdcdockertest_conflict=yes\n'
                };
                tarStream = createTarStream(fileAndContents);
                next();
            },

            function buildContainer(next) {
                h.buildDockerContainer({
                    dockerClient: DOCKER_ALICE_HTTP,
                    params: {
                        'rm': 'true'  // Remove container after it's built.
                    },
                    test: t,
                    tarball: tarStream
                }, onbuild);

                function onbuild(err, result) {
                    t.ifError(err, 'built successfully');
                    next(err, result);
                }
            },

            function checkResults(result, next) {
                if (!result || !result.body) {
                    next(new Error('build generated no output!?'));
                    return;
                }

                var output = result.body;
                var hasSuccess = output.indexOf('Successfully built') >= 0;
                t.ok(hasSuccess, 'output should contain: Successfully built');

                if (hasSuccess) {
                    var reg = new RegExp('Successfully built (\\w+)');
                    dockerImageId = output.match(reg)[1];
                } else {
                    t.fail('Output: ' + output);
                }

                next();
            },

            function removeBuiltImage(next) {
                t.ok(dockerImageId, 'got the built docker image id');
                DOCKER_ALICE.del('/images/' + dockerImageId, next);
            }

        ], function allDone(err) {
            t.ifErr(err);
            t.end();
        });

    });