-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d90cb1f
commit ea117d2
Showing
4 changed files
with
194 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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----- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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----- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |