Skip to content

Commit

Permalink
fix: file resolve issue
Browse files Browse the repository at this point in the history
chore: new directory listing

chore: use own certs instead of pem

test: use relative path to specify directory
  • Loading branch information
r0mflip committed May 19, 2019
1 parent 228d902 commit fc6d8c9
Show file tree
Hide file tree
Showing 9 changed files with 134 additions and 89 deletions.
19 changes: 0 additions & 19 deletions bin/cert.pem

This file was deleted.

28 changes: 0 additions & 28 deletions bin/key.pem

This file was deleted.

24 changes: 24 additions & 0 deletions bin/local.cert
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIID+zCCAuOgAwIBAgIUSmxxlSP0iULa68cGdJGcOsqX9CAwDQYJKoZIhvcNAQEL
BQAwgYwxCzAJBgNVBAYTAkxOMREwDwYDVQQIDAhJbnRyYW5ldDEOMAwGA1UEBwwF
TG9jYWwxFjAUBgNVBAoMDUxvY2FsIE5ldHdvcmsxEDAOBgNVBAsMB05ldHdvcmsx
EjAQBgNVBAMMCWxvY2FsaG9zdDEcMBoGCSqGSIb3DQEJARYNbG9jYWxAbmV0d29y
azAeFw0xOTA1MTkwODI2MTBaFw0yMDA1MTgwODI2MTBaMIGMMQswCQYDVQQGEwJM
TjERMA8GA1UECAwISW50cmFuZXQxDjAMBgNVBAcMBUxvY2FsMRYwFAYDVQQKDA1M
b2NhbCBOZXR3b3JrMRAwDgYDVQQLDAdOZXR3b3JrMRIwEAYDVQQDDAlsb2NhbGhv
c3QxHDAaBgkqhkiG9w0BCQEWDWxvY2FsQG5ldHdvcmswggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQC6drN1kF098wLJRMyBx/uzs8Guj/MNmpbzE/6RvGdP
BG/uF/fWOKCY0/ZQ0wuIYNwnMOGuXDLhTwAA7LxwWsb4z//XRsPQX0P5YKW6v5W+
TVm09BJPyyAoA3vcVdKFfa1X1zI56kClbWhY7K7FQQKamaMeMit5aMtQ9RrUHlvg
/dWG/2o7/onpLdsHp4VsMupuueMFS+DJVLg1CLFuIfecE5+LTIx2xYAHTzMoM9Uo
OZ/uEvwqjX5UOaJwNQH6xoSXODM9Ma0xPldiAjMmuiMaVYe+inDHWC4RhHo3w9Qp
96z+9RjEKgMtZG5PUKHwG7I0p3pniRvySdWpeiAMapUJAgMBAAGjUzBRMB0GA1Ud
DgQWBBR+13TuOhmziouf4urKizXYeHPRfzAfBgNVHSMEGDAWgBR+13TuOhmziouf
4urKizXYeHPRfzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB8
fDoG1Zm1NaeT1xFSgzS1GWaE5U+No4xgG/8WtLrq3dL45VlOOLquLVk6U1COkceY
E2VTJHthCmTGAasmXlQwsTN8K+j08A1CnTpq9xHR/HAmidlVO6wquiFmWCDTS04j
uR6zxLXxkGbCf6ano2jf5Hhlkfovb8WGZPfSkk5HCNjdkbQAehdlgMLS4L/EohIA
CH/lVoI2OwvE0EoOvKbyTwbq5rObllj733sxE2tBBf+PDnrLfq8C60NhyofiSB2f
2+VuH2WwcS4LrlonF9JvgO16YS2I1ZXtOJI8RLpcUkyRk8PLUsZXo/OjyQeGwLVI
84iYPnF5GZHJriBhTxtV
-----END CERTIFICATE-----
28 changes: 28 additions & 0 deletions bin/local.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC6drN1kF098wLJ
RMyBx/uzs8Guj/MNmpbzE/6RvGdPBG/uF/fWOKCY0/ZQ0wuIYNwnMOGuXDLhTwAA
7LxwWsb4z//XRsPQX0P5YKW6v5W+TVm09BJPyyAoA3vcVdKFfa1X1zI56kClbWhY
7K7FQQKamaMeMit5aMtQ9RrUHlvg/dWG/2o7/onpLdsHp4VsMupuueMFS+DJVLg1
CLFuIfecE5+LTIx2xYAHTzMoM9UoOZ/uEvwqjX5UOaJwNQH6xoSXODM9Ma0xPldi
AjMmuiMaVYe+inDHWC4RhHo3w9Qp96z+9RjEKgMtZG5PUKHwG7I0p3pniRvySdWp
eiAMapUJAgMBAAECggEBAKQD64Fa9hma23WM9dKmxUlhsdlJt8LcmzDAAqnQrpK7
1XT6Uj912hX0RHL94OQaRyyV+72yTfMP2XH2yx6NSv3rgCCtl2p/kbwW/lCRWzdk
tKbOFhloFCX+QoIiX6aaUNK2cPCulCSvYxztPCI4OAEjaW8TNFh8DHNu1iWFes4h
GFwsSK+yhb5HKJMMmrrU/SagHeaEbrVHkUWv655Y5oGqrMwS0W/yIARLBw2fK48I
mgMHDIQKMlFdP5bJDeV1aWFaKLxfG3R1RsmQFjdUDfRs1b+I27/iQAfNOAgAhIhK
dL8jt+8W5pDdmb64aL/C5tdCe694KC5wWWIiBT/Wya0CgYEA5Os1Ryd7AL09sKKN
In7TOgYUuQypF1o2Lp/wBUvlwWrrsgk9hWJ/EPVMxUqPqMzsaxnJufBzIT8Pr+r/
FO9JZG9pfc0HSLY655zSmuEMBpDlI7DXRc48P0EaC/B5KVLR/aO4wSr78fXoe7NE
qzJs51Gnd6LXrspm3ATF+SBMVncCgYEA0IW+FLEkAMAg92iwwg+eQqWPCHL4WySi
+TyhQwXTMP1CfZ5EvLNwxvqels6pUuXK1SGWVw3US3ReO9jXfknc+PmlrNfB38Xg
wvceexpgYMpHx1yoz4P5PLOSTj7ww9axvUshmEQ1w8UVXK1Y9Oo+WAUNAmQdY4Q+
lMpJ/hXN0H8CgYA0jiNvMIs2wjuVf9wzHTbVTWwYh+WSLO3fimyKasBWxXtTJnfv
VYuikw6LBPEyacmlVQhRHfjwmw+47ZSec8k/u6xWa2nOsbeYURKw6BXgtAdHSGRD
7HM8em/GafEHIbKALsRN5NZu2GwFakTLoQoLmV1/Q+2MfX9b5+Sjq1ybRQKBgHHs
L74kTVQvo5Mn2jIb0E3/H5bxISjCaluauUvhudEw/Iue1VT3AC1lrREdVTraGqe4
kud6wbp7mCRAQvNXLWfFFLPKqLw14qcB1eBRt8gJm4+a2wuMwbVdMhiXoHiOKksN
6gvDcFBFs3cPqeMcuvThxYrB4aCGFp65qhUsGmbHAoGAWTdHu6BekXvVKTE/85g5
/l1DkvGxba5NZVRuIskhktMtDS2CWtJSnRJ/ScmYzSACd175ZbsYWBn0NsEU8H0J
Y9tKPz4DgVhGYK5uRKvPQ8huC/11K/8PgskmdJIAANIC7Co2nSGiA8ts5Mm6pVzF
aJMXxk2Anprfx/XBynB/Ry8=
-----END PRIVATE KEY-----
110 changes: 75 additions & 35 deletions lib/http-utils.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
const path = require('path');
const {readdir} = require('fs');
const {stat: fsStat, readdir} = require('fs');
const {promisify} = require('util');

const readDir = promisify(readdir);
const stat = promisify(fsStat);

const fresh = require('fresh');

Expand Down Expand Up @@ -142,16 +143,24 @@ const renderDir = async (req, rootDir) => {
'.git'
];

const files = (await readDir(rootDir))
const files = await Promise.all((await readDir(rootDir))
.filter(t => !exclude.includes(t))
.sort((a, b) => a > b)
.map(filename => {
return `<li><a href="${pathname}${filename}">${filename}</a></li>`;
});
.map(async filename => {
let l = `<li class="file"><a href="${pathname}${filename}"><span>${filename}</span></a></li>`;
try {
if ((await stat(path.join('.', pathname, filename))).isDirectory()) {
l = `
<li class="folder"><a href="${pathname}${filename}"><span>${filename}</span></a></li>
`;
}
} catch (e) {}
return l;
}));

if (pathname !== '/') {
const upDir = path.normalize(path.join(req.pathname, '..'));
files.unshift(`<li><a href="${upDir}">..</a></li>`);
files.unshift(`<li><a href="${upDir}"><span>..</span></a></li>`);
}

files.unshift('<ul>');
Expand All @@ -167,37 +176,68 @@ const renderDir = async (req, rootDir) => {
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Index of ${pathname}</title>
<style>
* {
box-sizing: border-box;
}
body {
margin: 0;
padding: 16px;
font-size: 18px;
font-family: Menlo, Monaco, Consolas, monospace;
line-height: 1.5;
color: #212121;
}
.container {
max-width: 600px;
margin: auto;
}
h1 {
margin: 0;
font-size: 1.5em;
font-weight: normal;
}
ul {
list-style: none;
padding: 0 1em;
}
li a {
color: inherit;
display: flex;
align-items: center;
padding: 4px;
}
li a::before {
content: '';
width: 24px;
height: 24px;
background-size: cover;
margin: 0 8px 0 0;
}
li.file a::before {
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path fill="grey" d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zM6 20V4h7v5h5v11H6z"/></svg>');
}
li.folder a::before {
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path fill="grey" d="M9.17 6l2 2H20v10H4V6h5.17M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"/></svg>');
}
li a, h1 {
text-decoration: none;
word-wrap: break-word;
}
li a:hover , li a:focus , li a:active {
background-color: rgba(0, 0, 0, 0.15);
}
li a span {
flex: 1;
word-break: break-word;
}
</style>
</head>
<style>
* {
box-sizing: border-box;
}
body {
margin: 0;
padding: 16px;
font-size: 16px;
font-family: Menlo, Monaco, Consolas, monospace;
line-height: 1.5;
}
h1 {
margin: 0;
font-size: 1.25em;
}
ul {
list-style: none;
padding-left: 1em;
}
a, h1 {
text-decoration: none;
word-wrap: break-word;
}
a:hover {
text-decoration: underline;
}
</style>
<body>
<h1>Index of ${pathname}</h1>
${content}
<main class="container">
<h1>Index of ${pathname}</h1>
${content}
</main>
</body>
</html>
`;
Expand Down
4 changes: 2 additions & 2 deletions lib/serv-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ module.exports.createServer = async opts => {
} else {
// use fallback certs
// opts.ssl might be enabled due to http2
cert = fs.readFileSync(path.join(binPath, 'cert.pem'));
key = fs.readFileSync(path.join(binPath, 'key.pem'));
cert = fs.readFileSync(path.join(binPath, 'local.cert'));
key = fs.readFileSync(path.join(binPath, 'local.key'));
}

const handler = getHandler(opts);
Expand Down
4 changes: 2 additions & 2 deletions lib/static-serv.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,15 @@ const send500 = (req, res) => {
* @return {Function}
*/
const staticHandler = opts => {
const staticDir = path.join('.', opts.dir || '');
const staticDir = opts.dir;
const listing = opts.listing;

// return handler
return (async function servHandler(req, res) {
req.pathname = decodeURIComponent(parseUrl(req.url).pathname);

// serve static files
let filePath = path.resolve('/', path.join(staticDir, req.pathname));
let filePath = path.join(staticDir, req.pathname);

try {
// stat files
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
"scripts": {
"start": "node ./bin/serv.js -p 5000 -c -l -s -d .",
"lint": "eslint .",
"test": "node test/test.js | tap-spec"
"test": "node test/test.js | tap-spec",
"gencerts": "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -subj \"/C=LN/ST=Intranet/L=Local/O=Local\\ Network/OU=Network/CN=localhost/emailAddress=local@network\" -keyout \"./bin/local.key\" -out \"./bin/local.cert\" -reqexts v3_req -extensions v3_ca"
},
"main": "./lib/serv.js",
"bin": {
Expand Down
3 changes: 1 addition & 2 deletions test/utils.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
const {Agent: HTTPSAgent} = require('https');
const path = require('path');
const fetch = require('node-fetch');

const getOpts = opts => {
opts = Object.assign({}, {
dir: path.resolve('test/samples/'),
dir: './test/samples/',
}, opts);

if (opts.http2) {
Expand Down

0 comments on commit fc6d8c9

Please sign in to comment.