Skip to content

Commit 1fe99a6

Browse files
committed
Adds in data storage to file system
1 parent a15ceb9 commit 1fe99a6

File tree

5 files changed

+173
-7
lines changed

5 files changed

+173
-7
lines changed

Section 3/app/config.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const environments = {}
2+
3+
environments.staging = {
4+
httpPort: 3000,
5+
httpsPort: 3001,
6+
envName: 'staging'
7+
};
8+
9+
environments.production = {
10+
httpPort: 5000,
11+
httpsPort: 5001,
12+
'envName': 'production'
13+
}
14+
15+
var currentEnvironment = typeof(process.env.NODE_ENV) === 'string' ? process.env.NODE_ENV.toLowerCase() : '';
16+
17+
var environmentToExport = typeof(environments[currentEnvironment]) == 'object' ? environments[currentEnvironment] : environments.staging;
18+
19+
module.exports = environmentToExport;

Section 3/app/https/cert.pem

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDUjCCAjoCCQCZTOLeYvWfezANBgkqhkiG9w0BAQsFADBrMQswCQYDVQQGEwJJ
3+
TjELMAkGA1UECAwCVFMxEjAQBgNVBAcMCUh5ZGVyYWJhZDESMBAGA1UEAwwJbG9j
4+
YWxob3N0MScwJQYJKoZIhvcNAQkBFhhhc2hyaXRocmVkZGk4MUBnbWFpbC5jb20w
5+
HhcNMTkwNzA3MDgzNjIwWhcNMjkwNzA0MDgzNjIwWjBrMQswCQYDVQQGEwJJTjEL
6+
MAkGA1UECAwCVFMxEjAQBgNVBAcMCUh5ZGVyYWJhZDESMBAGA1UEAwwJbG9jYWxo
7+
b3N0MScwJQYJKoZIhvcNAQkBFhhhc2hyaXRocmVkZGk4MUBnbWFpbC5jb20wggEi
8+
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZP8EigLTHM8WjDe9hz6f6sEU2
9+
8f5zYtGi5HYt6vKBnlsQGgveKfzbiumgrT3FEwlD3byKrzdoTjCrUcniSkAYeE9W
10+
QCKkjXfUWgauaRxXJ4aBCDqEYjLAL68eW11YfHn9FzNsV2s5wIAC1WLEhcNsJKRe
11+
ktHmpPwVhXzCfB6Iwabbbx70u0GpEaLyl2IP7cTVEIUOqIeKovybutjeiRPWIrOa
12+
Q0J4bsCXJwONMVsfEeGaBmQqu+SPk8kFhoL3g08kRxdtqFYefx21ggjddnudrnNd
13+
jW+cQFqtmV1KcNMGRhxs3F+5cLOIxifYnIY9jn4lJ4epO5uPhPvz1Sm82sQbAgMB
14+
AAEwDQYJKoZIhvcNAQELBQADggEBAKxwaB0eVR8cWahpZ85ql44VS+zl2AzguKCK
15+
6ZmVm898/XhSP67bY+7jSS/L3dPy1Vkgi5erN7y5S/hriBTC3QfmN/8f4ljOBe+a
16+
FwOLa1wUBckoo3dnIQdSqaURNQempoiuhpc0q4nfXjaJjQC1SzOu1NGetgAYTWbw
17+
nIO31RGaoljVCo06r6z7L9kl5Q3X7nWjRzkaTfZqMrBeMcbmglOQ/MPdAoF1mFPf
18+
s9F07Drx1ul8kvCa+9ovDIKOFfdMUFzi6fKn2vrvVEhKscRefu/QZqP4wwcYVUHp
19+
yLN4g3ZFIaimzsy+BzMhdwhgoXIBiUEYtmZzIO5f+WZ7tHtpZJ0=
20+
-----END CERTIFICATE-----

Section 3/app/https/key.pem

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDZP8EigLTHM8Wj
3+
De9hz6f6sEU28f5zYtGi5HYt6vKBnlsQGgveKfzbiumgrT3FEwlD3byKrzdoTjCr
4+
UcniSkAYeE9WQCKkjXfUWgauaRxXJ4aBCDqEYjLAL68eW11YfHn9FzNsV2s5wIAC
5+
1WLEhcNsJKRektHmpPwVhXzCfB6Iwabbbx70u0GpEaLyl2IP7cTVEIUOqIeKovyb
6+
utjeiRPWIrOaQ0J4bsCXJwONMVsfEeGaBmQqu+SPk8kFhoL3g08kRxdtqFYefx21
7+
ggjddnudrnNdjW+cQFqtmV1KcNMGRhxs3F+5cLOIxifYnIY9jn4lJ4epO5uPhPvz
8+
1Sm82sQbAgMBAAECggEBALWS8qIavn1ryPiR8gxnGbeN0hutQIVCB4LEvf18y/kH
9+
2IZprpedskfwH3n6sZDgazL8xdOHxKB6EXVu43QtqMqK64xkCFBOKOQj5kepdFVn
10+
pKR9syLoTBCTCiMuK6OEThT5ajJYEjdvq84yeN1WC1J8gaDFx4elR0fZjL+kK4US
11+
AzlFvom9dCbGbj7dwnThvNOPXwswXA9/W7ej/UoIyYk7NiSqv32M8oAvVjX4IUkb
12+
g0nGmJgkEU06C2M//MDCz0c7+bVlONKRy5MIh3k0ovKufURX8tPVaZpqRWQk1I6Q
13+
TYLmUX/ylnbS5OtE56cDsrVByODK56DC1cEtumtCYlkCgYEA8sl5cPKjAiHZApAK
14+
LByG9WSsULp4BpCFJQ84jDo91uPSVt6v5XvnbMJPsuO0/A739N+ai12cU7NWuazE
15+
LrB9a7UC6NvlfdY/QOGmU6dqGtIHvbOnTR3WgJ/v8ZyBEe2ZdTUDpKNumW8eOlsl
16+
9BY2dvT/TWzz3Dcp7wJmNN1pIx0CgYEA5RJ7uKg+WS+AzUPI64PXHq38F02Depkf
17+
PjqyphYVULmz9zPcvTFDo3cihZg0qE2DoI0AzeAeYG4vpMbEHVIr9u7WZwe6uvhQ
18+
GSa/96AJhsWws8C/XHi9EHg7Njq+YhHQa5+QvF2FATTTtQWoxWfNKSgRw+VEWQRN
19+
ZEZvj7KH5pcCgYEAgnAwKLiTT2/z8WaFsJFbCLgfw/eKyKwYfIKi9OPNmYgo17co
20+
dXiOK2Zx/0BLWiiImy0PENUoSefOLk9dz1/O4nELsSODNopGzYruG3+Uh/hTZF4D
21+
AnGHbu9+sCZPSdyHV+s1m9yabSC/8sZJq8vLUznpeCWTFrskcl6tnrVd6RkCgYEA
22+
nkANnr0EDaLmjWeltyZmh7hUbljLWvfLgLcWUezxnsobzMxUU5NkEdqsy7QhtJ+Q
23+
Lmsawh9xfNbCLUhvlX3+B2JqVdUeKCqBU07U0aIK0sNh1lxzFtQGcQlOhqFAgwmh
24+
fahHWgoVZ4byNp2JQY77SdJ3q2iItiJlwL90NMZ2YlMCgYEAiE2qLYmFcFQn4502
25+
z4okGljW0Kj1HahDFA+Mkq7vK+V5EBpLyxAlVBJ7/L2DwsdC6BAoPa+lo8CyVH/u
26+
+0JBuvsicmqJaxPwuvKk4WsinC5Yy7FfTVlF/D7hZ41VY4FK9ZCulCzySEd9ThJ+
27+
GFXSJ5NUdFroRPetnPN9ZRleptI=
28+
-----END PRIVATE KEY-----

Section 3/app/index.js

+27-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
const http = require("http");
2+
const https = require("https");
23
var url = require("url");
34
const StringDecoder = require("string_decoder").StringDecoder
5+
var config = require('./config');
6+
var fs = require('fs');
47

5-
const server = http.createServer(function(req, res) {
8+
const unifiedServer = function(req, res) {
69
const {
710
pathname: path,
811
query: queryStringObj
@@ -30,6 +33,7 @@ const server = http.createServer(function(req, res) {
3033
statusCode = typeof(statusCode) == 'number' ? statusCode : 200;
3134
payload = typeof(payload) == 'object' ? payload : {};
3235
var payloadString = JSON.stringify(payload)
36+
res.setHeader('Content-type', 'application/json');
3337
res.writeHead(statusCode)
3438
res.end(payloadString)
3539
console.log(`request received on path: ${trimmedPath}
@@ -39,24 +43,40 @@ const server = http.createServer(function(req, res) {
3943
${statusCode} and payload: ${payloadString}`);
4044
})
4145
})
46+
}
47+
48+
const httpServer = http.createServer(unifiedServer)
49+
50+
httpServer.listen(config.httpPort, function() {
51+
console.log(`Server is listening on port ${config.httpPort} in ${config.envName} mode.`)
4252
})
53+
const httpsServerOptions = {
54+
key: fs.readFileSync('./https/key.pem'),
55+
cert: fs.readFileSync('./https/cert.pem')
56+
}
57+
const httpsServer = https.createServer(httpsServerOptions, unifiedServer)
4358

44-
server.listen(3000, function() {
45-
console.log("Server is listening on port 3000 now.")
59+
httpsServer.listen(config.httpsPort, function() {
60+
console.log(`Server is listening on port ${config.httpsPort} in ${config.envName} mode.`)
4661
})
4762

4863
// Define handlers
4964
const handlers = {}
5065

51-
handlers.sample = function(data, callback) {
52-
callback(406, { name: 'Sample Handler' })
66+
handlers.ping = function(data, callback) {
67+
callback(200)
68+
}
69+
70+
handlers.hello = function(data, callback) {
71+
callback(200, {message: `Welcome: ${data.queryStringObj.name ? data.queryStringObj.name : 'Home'}`})
5372
}
5473

5574
// Not Found Handler
56-
handlers.notFound = function(data, callback) {
75+
handlers.notFound = function(_data, callback) {
5776
callback(404);
5877
}
5978
// Defining request router
6079
const router = {
61-
'sample': handlers.sample
80+
'ping': handlers.ping,
81+
'hello': handlers.hello
6282
}

Section 3/app/lib/data.js

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// Storing and editing data.
2+
3+
var fs = require('fs');
4+
var path = require('path');
5+
6+
var lib = {}
7+
8+
// Base Directory
9+
lib.baseDir = path.join(__dirname, '../.data/')
10+
lib.create = function(dir, file, data, callback) {
11+
fs.open(lib.baseDir+dir+'/'+file+'.json', 'wx', function(err, fileDescriptor) {
12+
if(!err && fileDescriptor) {
13+
var stringData = JSON.stringify(data)
14+
// write to file and close it.
15+
fs.writeFile(fileDescriptor, stringData, function(err) {
16+
if(!err) {
17+
fs.close(fileDescriptor, function(err) {
18+
if(!err) {
19+
callback(false)
20+
} else {
21+
callback('Error closing new file.')
22+
}
23+
})
24+
} else {
25+
callback('Error writing to file.')
26+
}
27+
})
28+
} else {
29+
callback('Could not create new file. it may already exist.')
30+
}
31+
})
32+
}
33+
34+
lib.read = function(dir, file, callback) {
35+
fs.readFile(lib.baseDir+dir+'/'+file+'.json', 'utf8', function(err, data) {
36+
callback(err, data)
37+
})
38+
}
39+
40+
lib.update = function(dir, file, data, callback) {
41+
fs.open(lib.baseDir+dir+'/'+file+'.json', 'r+', function(err, fileDescriptor) {
42+
if(!err && fileDescriptor) {
43+
var stringData = JSON.stringify(data)
44+
fs.ftruncate(fileDescriptor, function(err) {
45+
if(!err) {
46+
fs.writeFile(fileDescriptor, stringData, function(err) {
47+
if(!err) {
48+
fs.close(fileDescriptor, function(err) {
49+
if(!err) {
50+
callback(false)
51+
} else {
52+
callback('Error closing the file.')
53+
}
54+
})
55+
} else {
56+
callback('Error writing to file.')
57+
}
58+
})
59+
} else {
60+
callback('Error truncation file.')
61+
}
62+
})
63+
} else {
64+
callback('Could not open the file to update.')
65+
}
66+
})
67+
}
68+
69+
lib.delete = function(dir, file, callback) {
70+
fs.unlink(lib.baseDir+dir+"/"+file+'.json', function(err) {
71+
if(!err) {
72+
callback(false)
73+
} else {
74+
callback('Trouble delinking the file.')
75+
}
76+
})
77+
}
78+
79+
module.exports = lib;

0 commit comments

Comments
 (0)