Skip to content

Commit

Permalink
Added assignment-1
Browse files Browse the repository at this point in the history
  • Loading branch information
sahil-ramagiri authored Dec 17, 2018
1 parent d90cb1f commit ea117d2
Show file tree
Hide file tree
Showing 4 changed files with 194 additions and 0 deletions.
30 changes: 30 additions & 0 deletions assignment-1/config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Create and export configuration variables
*
*/

// Container for all environments
const environments = {};

// Staging (default) environment
environments.staging = {
'httpPort' : 3000,
'httpsPort' : 3001,
'envName' : 'staging'
};

// Production environment
environments.production = {
'httpPort' : 5000,
'httpsPort' : 5001,
'envName' : 'production'
};

// Determine which environment was passed as a command-line argument
const currentEnvironment = typeof(process.env.NODE_ENV) == 'string' ? process.env.NODE_ENV.toLowerCase() : '';

// Check that the current environment is one of the environments above, if not default to staging
const environmentToExport = typeof(environments[currentEnvironment]) == 'object' ? environments[currentEnvironment] : environments.staging;

// Export the module
module.exports = environmentToExport;
24 changes: 24 additions & 0 deletions assignment-1/https/cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIID+DCCAuCgAwIBAgIJAJMvBZ7km7moMA0GCSqGSIb3DQEBCwUAMIGQMQswCQYD
VQQGEwJVUzETMBEGA1UECAwKY2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5j
aXNjbzEPMA0GA1UECgwGcGlycGxlMQ8wDQYDVQQLDAZwaXJwbGUxEjAQBgNVBAMM
CWxvY2FsaG9zdDEeMBwGCSqGSIb3DQEJARYPb3BxcnNAZ21haWwuY29tMB4XDTE4
MTIwODExNDczN1oXDTI4MTIwNTExNDczN1owgZAxCzAJBgNVBAYTAlVTMRMwEQYD
VQQIDApjYWxpZm9ybmlhMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMQ8wDQYDVQQK
DAZwaXJwbGUxDzANBgNVBAsMBnBpcnBsZTESMBAGA1UEAwwJbG9jYWxob3N0MR4w
HAYJKoZIhvcNAQkBFg9vcHFyc0BnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQD10Q1Syh8vUVN+ELL20UyqFTo4iqNXsYCmocWDrlHTJkO4
xNkLOJprlSdxQkDoWpKIcvY9dQJHbSu81qIy13nrZ57NuEEcfpyyYpG93cVHhJk3
O1JMgGUmY2heXHeeU4+TGwOB9Wykz9cj0uosF6B8iKb/5kNKOMvnUoASk6YHmjZ7
YHtfVsxcLtJnx7Oc44v42WVnomUv03wfGdJn+Dq9PwF+9yXajg0i2himop/Uo9wz
YjW1pYIGab/uAxU6ikv06scZhH8l88bWH8LRgT3xEbeyqhcOUdYtGP+jAJlMK+dx
9kszxLZB2zQr9ooSSVGI3VSgIWR1FEZNfgCP6+vFAgMBAAGjUzBRMB0GA1UdDgQW
BBS75wHPs+gRWepdqzyivsD67g+bJDAfBgNVHSMEGDAWgBS75wHPs+gRWepdqzyi
vsD67g+bJDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCmISx9
/WHZsC22vIDo6mNJUKeMqHp2qVGz16sGmCW2388z/xVWhM/ODxjgcg/IBvDMfXtM
spLt/voykTyk59qMM+QgTgjsfd3aSUB6hEaFIJxHevI9A0G5NJFFlyUsq6hY5ugx
n+LuOPTyLBrnK+W7ICxtYm3PTA+TlqUI1klbknhpaj4JQaXBAKPC4IGzA9qag3ii
wC2vdsB+mSwSNuhU8ku9eadDskGM3DBkNac8FSym7fzuZEMvzzGN9aPUI6RegLDb
RfMBJ2EjN3aMpsP7aG4WfY23MEYfZZhEF6JEakyBYFa0vtlJvVVoxgNSMnPO9iHW
3zRy2K4Ebxjg6Icq
-----END CERTIFICATE-----
28 changes: 28 additions & 0 deletions assignment-1/https/key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD10Q1Syh8vUVN+
ELL20UyqFTo4iqNXsYCmocWDrlHTJkO4xNkLOJprlSdxQkDoWpKIcvY9dQJHbSu8
1qIy13nrZ57NuEEcfpyyYpG93cVHhJk3O1JMgGUmY2heXHeeU4+TGwOB9Wykz9cj
0uosF6B8iKb/5kNKOMvnUoASk6YHmjZ7YHtfVsxcLtJnx7Oc44v42WVnomUv03wf
GdJn+Dq9PwF+9yXajg0i2himop/Uo9wzYjW1pYIGab/uAxU6ikv06scZhH8l88bW
H8LRgT3xEbeyqhcOUdYtGP+jAJlMK+dx9kszxLZB2zQr9ooSSVGI3VSgIWR1FEZN
fgCP6+vFAgMBAAECggEBAIwAqsPyVlyOxyzPuf4VKsLcIDK/01RIxmshS+s5x2Sp
MHz1sGBRtrF7W+GHyIwNudN5FoHeOJQRu41r+SlXzBqlA69LN9pQylJXDYbD3m5j
ORhZ8v+bSQDaMUE9DOvhz64K/q5v55bewTuoDrNaKY+EDQlGTiDhxFBVjpgF+9Pr
hUbQ0FDtic0qGEheXcmKtPCggEYoBIdXyPvaftigPg7IJeeXMMISSp9p6X9vIvuu
gHiSr4HM7TIDK2H5u5XjNfvEa0b0u5G1QKQ9ZlhSGyYuUiHJRb/sVYFSlo3eQPzP
QwEs9y+4RovX8a7/fbS4kC6nl8eAvObZJkXueU8S1kECgYEA/FIsr4IDpPgiohbo
1cOG3QsL/v2HP4vBnTz6vyPfwLMmqi7J0XdROfnw5EXHN741BlcSQejCO52OlIBG
/Kt2NRmSrjn3gzw5vyzmokCwqIHRtC9Ue8O/e3wniVWXnbJZQYzFX3Uze6on/sIg
1uzZraGIEv4Nrd+35gTBvmW32UkCgYEA+WaZUlj8AUC2oEHKiXZ8lfDvA6JNcUfc
s43HfM9657MdQsDTvdzRVXWc1f8M9pLyDQzj0iKywFHWJ0O5x+DTgrhugOg4Q61d
x+Tu0X080HhxrkZk2W9Knk31+dFSHFmHlwlq9/mp6ujqN4v7Y6QjU5UWanmKLxqJ
5SOuQjWIWp0CgYEApEsZf5onp1ZOrr4+E1qCSRG1WO5aD11/z1Nybdz9B6tfRLa8
gKCxig+d8/Ufd8NpIVy2raXSOyEnQriYAFPg30hsgveJm7EuZLXm4sU+giotkqay
2velidFYqQrLc0o65fy0U6irwh0Ud8SNv4RvZKhmQv+bhpjCVIrKYKA46skCgYB0
9j/rVZ4BvGapa5FfvDibXR3Kl4A4IxqG/nPSvb8HEIIlfycOQJPPv1OpLG7Y6Hsp
0aS6NNmdxgNn8KQc7/xhrrrsK3vPiWuUxnGVv2UY45N0xsCfFElrSmaUHS2j6/zh
wWHwH58ncsn8+OIRjbWfiii0EIHUq16GHqCnnlFvJQKBgC4erKAQyLf2a9zVpKhs
T4WcPYvu76PSHrNF2d+LqnEqnSZDEYuB/olIWYzkUgN1/E11gxwo+CGiP71JrtlL
uJrinuDOSvEVv8H8ZKTuOMXRVD4PSpC0wMMJR6uPH1ce8+KHyzcLzcV+6OoiZDLu
z3U9pX/nq0yUlLGYKaHSUczC
-----END PRIVATE KEY-----
112 changes: 112 additions & 0 deletions assignment-1/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
/*
Homework assignment #1
*/


// import all dependencies

const http = require('http');
const https = require('https');
const url = require('url' );
const { StringDecoder } = require('string_decoder');
const fs = require('fs');
const config = require('./config');

// create a http server and start it
http.createServer((req , res) => {
unifiedServer(req ,res);
})
.listen(config.httpPort, () => console.log("http Server listening on port " + config.httpPort));


let httpsServerOptions = {
'key': fs.readFileSync('./https/key.pem'),
'cert': fs.readFileSync('./https/cert.pem')
};

// create a https server and start it
https.createServer(httpsServerOptions,(req,res) =>{
unifiedServer(req,res);
})
.listen(config.httpsPort,()=>{
console.log("https Server listening on port "+config.httpsPort);
});


//create a unifiedServer
const unifiedServer = (req ,res) => {

// get headers and method from request object
let { headers , method } = req ;

//parse the url from request object
let parsedUrl = url.parse(req.url , true);

//get query and pathname from parsedUrl
let { pathname , query } = parsedUrl;

//trim the pathname using regex
let trimmedPath = pathname.replace(/^\/+|\/+$/g, '');


//get payload from request , if any
let decoder = new StringDecoder('utf-8');

let buffer = '';
req.on('data' , (data) => buffer += decoder.write(data));
req.on('end' , () => {
buffer += decoder.end();

// Construct the data object to send to the handler
let data = {
'trimmedPath' : trimmedPath,
'queryStringObject' : query,
'method' : method.toLowerCase(),
'headers' : headers,
'payload' : buffer
};

//choose a handler from router
let chosenHandler = router[trimmedPath] ? router[trimmedPath] : handlers.notFound;

//route the request to chosen handler
chosenHandler(data, (statusCode, payload) => {
// Use the status code returned from the handler, or set the default status code to 200
statusCode = typeof(statusCode) == 'number' ? statusCode : 200;

// Use the payload returned from the handler, or set the default payload to an empty object
payload = typeof(payload) == 'object'? payload : {};

// Convert the payload to a string
let payloadString = JSON.stringify(payload);

// Return the response
res.writeHead(statusCode,{'Content-Type': 'application/json'});
res.end(payloadString);
console.log("Returning this response: ",statusCode,payloadString);

});


});

};


//define handlers
const handlers = {};

//hello handler
handlers.hello = (data , callback) => {
callback(300 , {'welcomeMessage': 'welcome to my assignment #1'});
}
//not found handler , returns empty object
handlers.notFound = (data , callback) => {
callback(404);
}

//define router

const router = {
'hello' : handlers.hello
}

0 comments on commit ea117d2

Please sign in to comment.