var execute = require('child_process').exec; var spawn = require('child_process').spawn; var prettyjson = require('prettyjson'); exports.index = function(req, res){ console.log("Client connected: " + req.ip); res.render('index', {title: 'Watcher'}); }; exports.servers = function(req, res){ console.log("Client " + req.ip + ": REQUEST server data..."); execute('p4 -z tag -p localhost:1666 -u jrobinson servers', function(error, stdout, stderr){ //CHANGE HARDCODED USERNAME/ADDRESS if(error){ res.send("ERROR: " + error); } var servers = {}; var currentID = ""; var currentServer; var lines = stdout.split('\n'); for(line in lines){ var key = (/\b\w*\b/).exec(lines[line]); if(key == null){ continue; } var value = lines[line].substring(key.index + key[0].length + 1); if(key == 'ServerID'){ currentServer = value; servers[currentServer] = { attr: {} }; } else{ servers[currentServer].attr[key[0]] = value; } } execute('p4 -z tag -p localhost:1666 -u jrobinson configure show allservers', function(error, stdout, stderr){ var lines = stdout.split('\n'); var server = ''; for(line in lines){ var key = (/\b\w*\b\w*/).exec(lines[line]); // Ignore empty lines. if(key == null || key == 'Type'){ continue; } if(key == 'ServerName'){ var server = lines[line].substring(key.index + key[0].length + 1); continue; } // switch (key){ // case null: // break; // case 'Type': // break; // case 'ServerName': // var server = lines[line].substring(key.index + key[0].length + 1); // break; // } if(server == 'any'){ continue; } if(key[0] == 'Name'){ var keyValue = lines[line].substring(key.index + key[0].length + 1); key = (/\b\w*\b/).exec(lines[line++]); var valValue = lines[line].substring(key.index + key[0].length + 1); servers[server].attr[keyValue] = valValue.trim(); } } for(server in servers){ if(!servers[server].attr.hasOwnProperty('P4TARGET')){ servers[server].attr.master = true; } } console.log('Client ' + req.ip + ': RESPONSE server data...'); //console.log(prettyjson.render(servers)); res.json(servers); }); }); }; exports.connect = function(req, res){ console.log("Client " + req.ip + ": logging in..."); console.log("\tAddress: " + req.body.address); console.log("\tUsername: " + req.body.username); var address = req.body.address, username = req.body.username, password = req.body.password; var commandArg = "p4 -u " + username + " -p " + address + " login"; /* * Expected cases: * - p4 login to invalid address * - p4 login w/ invalid user * - p4 login w/ pass; pass required * - p4 login w/ pass; pass not required * - p4 login w/o pass; pass required * - p4 login w/o pass; pass not required */ execute('p4 -u ' + username + ' -p ' + address + ' changes -m 1', function(error, stdout, stderr){ if(error){ console.log(stderr); var invalidAddr = /\.*Connect to server failed.*/; var invalidUser = /\.*User.*doesn't exist.*/; var invalidPass = /\.*password.*invalid or unset.*/; if(invalidAddr.exec(stderr)){ res.send('invAddr'); } if(invalidUser.exec(stderr)){ res.send('invUser'); } if(invalidPass.exec(stderr) && password == ""){ res.send('invPass'); } } if(password != ""){ commandArg = "echo " + password + " | " + commandArg; } execute(commandArg, function(error, stdout, stderr){ if(error){ //console.log('STDERR: ' + stderr); res.send('invPass'); }else{ //console.log('STDOUT: ' + stdout); res.send('valid'); } }); }); //res.redirect(303, '/'); }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#6 | 8378 | Joe Robinson |
- Server modal working. - Simplified backbone data fetching. - Log out of perforce now and not just empty session. - TODO: - Prettier/different icons for each server type. - Modal image and parent/child list. |
||
#5 | 8373 | Joe Robinson |
- Moved to d3 to handle image drawing (SVG). - Proper sessions (logging in/out) implemented. - TODO: Fix server modal style/formatting & populate with data. |
||
#4 | 8371 | Joe Robinson |
Implemented cookies/sessions (still need logout functionality). Cleaned up logging window; delete older messages so new ones do not break the page. |
||
#3 | 8367 | Joe Robinson |
Improve backbone data retrieval functionality (for building canvas nodes). Connect/login modal working almost as desired. Draw basic things on canvas. Preliminary implementation of Redis DB/cookie saving. |
||
#2 | 8362 | Joe Robinson |
Basic backbone functionality. Removed user routes. |
||
#1 | 8356 | Joe Robinson |
Refactored files, old service version can be deleted. Improved base service structure. |