Skip to content

Instantly share code, notes, and snippets.

@balasivagnanam
Last active November 5, 2015 09:36
Show Gist options
  • Save balasivagnanam/ec1f606f0cbdc0040608 to your computer and use it in GitHub Desktop.
Save balasivagnanam/ec1f606f0cbdc0040608 to your computer and use it in GitHub Desktop.
server.js used to create the db
var express = require('express');
var app = express();
var formidable = require('formidable');
var path = require('path');
var fs = require('fs');
var checkermain = require('./checkermain.js');
//var loki = require('lokijs');
var low = require('lowdb');
var _ = require('underscore');
var _contrib = require('underscore-contrib') // For getPath()
var _db = require('underscore.db')
//low._.mixin(_contrib);
//low._.mixin(_db);
app.get('/', function(req, res) {
res.sendFile('portal/standards.html' , { root : __dirname});
});
app.use(express.static('./portal/'));
// Optional any deep link calls should return index.html
app.use('/*', express.static('standards.html'));
app.get('/getCompliance/:filename', function(req, res) {
console.log("compliance api called");
console.log(req.params.filename);
var AdmZip = require('adm-zip');
var logpath;
var dbinstance = low('db.json');
dbinstance._.mixin(require('underscore-contrib'))
dbinstance._.mixin(require('underscore.db'))
var pagelevel =
{
"name": "page-name",
"description": "paris",
"components": []
};
var page = dbinstance('results').chain().insert(pagelevel).value();
// reading archives
var zip = new AdmZip("./project-files/" + req.params.filename);
var zipEntries = zip.getEntries(); // an array of ZipEntry records
var logpath = './portal/compliance-logs/' + req.params.filename + '.log';
console.log('logpath', logpath);
var read = require('fs').readFileSync;
zipEntries.forEach(function(zipEntry) {
console.log(zipEntry.toString()); // outputs zip entries information
console.log(zipEntry.entryName);
// var dbfilename = "projectName." + zipEntry.entryName + ".json";
// var db = new loki(dbfilename);
// var dbinstance = db.addCollection('components');
var readcont = zip.readAsText(zipEntry.entryName);
var html = readcont;
//checkermain.initvalues();
var logger = checkermain.getLoggerInstance(req.params.filename);
//console.log(html);
//disabled to avoid confusion and for testing
//var templateName = checkermain.getTemplateName(html, logger);
//var commonFileChecks = checkermain.getCommonFilesCheck(zipEntry, html, logger);
var componentChecks = checkermain.getComponentCheckResults(zipEntry, html, logger, dbinstance, page);
console.log('api ended');
//db.saveDatabase();
// dbinstance.save();
dbinstance.save("portal/compresults/db.json");
});
var split = require('split');
var ndjson = require('ndjson');
var jsonfile = require('jsonfile');
var dataStream = '[';
var readpath = './portal/compliance-logs/data' + '-' + req.params.filename + '.json';
var jsonOutput = '';
var i = 0;
fs.createReadStream(logpath)
.pipe(ndjson.parse())
.on('data', function (obj) {
if (i == 0){
i = i + 1;
console.log("i is 0");
dataStream += JSON.stringify(obj);
} else {
console.log("i is else");
var addingcommas = ',' + JSON.stringify(obj);
dataStream += addingcommas;
}
})
.on('error', function(error){
console.log("error here" , error);
})
.on('end', function(){
dataStream += ']';
// console.log('end function', dataStream);
// console.log(JSON.parse(dataStream));
jsonfile.writeFileSync(readpath, JSON.parse(dataStream));
})
console.log(dataStream);
return res.json(jsonOutput);
});
app.post('/api/uploadfiles', function(req, res) {
console.log("apicalled");
console.log(req.params);
var form = new formidable.IncomingForm();
form.parse(req, function (err, fields, files) {
var file = files.file;
var tempPath = file.path;
var targetPath = path.resolve('./project-files/' + file.name);
console.log(targetPath)
fs.rename(tempPath, targetPath, function (err) {
if (err) {
throw err
}
console.log(file.name + " upload complete for user:");
return res.json({path: targetPath});
})
});
});
app.get('/api/dbtesting', function(req, res) {
console.log("apicalled fbtest");
var db = new loki('project.json');
var project = db.addCollection('components');
project.insert({name:'overall', legs: 8});
project.insert({name:'tables', legs: 0});
project.insert({name:'zippy', legs: 2});
db.saveDatabase();
return res.send("hello");
});
app.listen(3001);
console.log('Listening on port 3001...');
// this has all the modules and the fucntions to be executed for each page type
var bunyan = require('bunyan');
var _ = require('lodash');
var read = require('fs').readFileSync;
var cheerio = require('cheerio');
module.exports = {
// checks for header rules
getCheckHeader: function(filename, passedhtml, log, dbinstance, page){
console.log("header checks");
var html = passedhtml;
var filename = "temp name";
var templateName;
var log = log;
var dbinstance = dbinstance;
var page = page;
console.log("entered check - header");
console.log("page id is", page.id);
log.info("check for MOM header");
$ = cheerio.load(html);
//check if the html has header tagName
var headerLength = $('body').find('header').length
console.log(headerLength);
if(headerLength == 0){
log.error("Standard MOM Header is missing. Please have it in all pages");
// dbinstance.insert( { component :'header',
// condition : "Standard MOM Header should be present",
// result : "Fail" ,
// remarks: "Missing Standard Header"
// });
dbinstance('results').chain().get(page.id).getPath('components').insert({component :'header',
condition : "Standard MOM Header should be present",
result : "Fail" ,
remarks: "Missing Standard Header"
}).value();
}
//check
var headerbodyLength = $('header').children().length;
console.log(headerbodyLength);
var headerbodyLengthInner = $('header div').children().length;
console.log(headerbodyLengthInner);
if((headerbodyLength > 1) || (headerbodyLengthInner != 3)) {
log.error("Standard MOM Header has more elements than the standard. Please Check for it");
dbinstance('results').chain().get(page.id).getPath('components').insert({component :'header',
condition : "Standard MOM Header should have only the defined elements",
result : "Fail" ,
remarks: "Standard MOM Header has more elements than the standard"
}).value();
}
console.log($('header').find('div a').attr('class'));
$('header div > a').each(function(){
console.log("enteredoutside");
if(($('header').find('div > a').attr('class') == 'mom-logo') || ($('header').find('div > a').attr('class') == 'gov-logo')){
console.log("entered once");
} else {
log.error("Standard MOM Header has extra classes for MOM logo and SG GOV logo");
dbinstance('results').chain().get(page.id).getPath('components').insert({component :'header',
condition : "Standard MOM Header should have only the defined logos",
result : "Fail" ,
remarks: "Standard MOM Header has extra classes for MOM logo and SG GOV logo"
}).value();
}
});
if($('header').find('nav').attr('class') == 'support-links'){
console.log("entered nav");
} else {
log.error("Standard MOM Header has extra classes for navigation");
dbinstance('results').chain().get(page.id).getPath('components').insert({component :'header',
condition : "Standard MOM Header should have only the defined Navigation",
result : "Fail" ,
remarks: "Standard MOM Header has extra classes for navigation"
}).value();
}
if($('header div nav').children().length != 3){
log.error("Standard MOM Header navigation has more elements than defined");
dbinstance('results').chain().get(page.id).getPath('components').insert({component :'header',
condition : "Standard MOM Header should have only the defined Navigation",
result : "Fail" ,
remarks: "Standard MOM Header navigation has more elements than defined"
}).value();
}
},
getCheckFooter: function(filename, passedhtml, log){
console.log("footer checks");
var html = passedhtml;
var filename = filename;
var templateName;
var log = log;
console.log("entered check - footer");
log.info("check for MOM footer");
$ = cheerio.load(html);
//check if the html has footer tagName
var footerLength = $('body').find('.module-footer').length
console.log(footerLength);
if(footerLength == 0){
log.error("Standard MOM footer is missing. Please have it in all pages");
}
//check if the html has footer copyrights tagName
if($('body').find('.module-footer').length == 0){
log.error("Standard MOM footer copyrights is missing. Please have it in all pages");
}
var footerbodyLength = $('.module-footer').children().length;
console.log(footerbodyLength);
var footerbodyLength = $('.module-footer div').children().length;
console.log(footerbodyLength);
if((footerbodyLength > 1) || (footerbodyLengthInner > 4)) {
log.error("Standard MOM footer has more elements than the standard. Please Check for it");
}
var copybodyLength = $('.module-copyright').children().length;
console.log(copybodyLength);
var copybodyLengthInner = $('.module-copyright div').children().length;
console.log(copybodyLength);
if((copybodyLength != 1) || (copybodyLengthInner != 2)) {
log.error("Standard MOM footer copyrights has more elements than the standard. Please Check for it");
}
if($('.module-footer').find('a').attr('class') == 'mom-logo-footer'){
console.log("entered nav");
} else {
log.error("Standard MOM Footer has extra classes or missing footer logo");
}
//console.log($('header').find('div a').attr('class'));
$('.module-footer nav').each(function(){
console.log("enteredoutside");
if(($('.module-footer nav').find('nav').attr('class') == 'nav-social') || ($('.module-footer nav').find('nav').attr('class') == 'nav-site-links')){
console.log("entered once");
} else {
log.error("Standard MOM footer has extra classes links in the bottom");
}
});
$('.module-copyright p').each(function(){
console.log("enteredoutside");
if(($('.module-copyright').find('p').attr('class') == 'text--copyright') || ($('.module-copyright').find('p').attr('class') == 'rate-mom')){
console.log("entered once");
} else {
log.error("Standard MOM footer has extra classes links in the bottom");
}
});
}
} //end of exports
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment