nv-srv-nd-http-util 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dflt-srv-ssl.cert +21 -0
- package/dflt-srv-ssl.key +28 -0
- package/index.js +10 -0
- package/package.json +20 -0
- package/req.js +19 -0
- package/srv.js +52 -0
- package/url.js +100 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDazCCAlOgAwIBAgIUOhMhPQYn50iymMONMWuyPFYnlMUwDQYJKoZIhvcNAQEL
|
|
3
|
+
BQAwRTELMAkGA1UEBhMCQ04xEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
|
|
4
|
+
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDAxMTQxNTE4NTJaFw0yNDAy
|
|
5
|
+
MTMxNTE4NTJaMEUxCzAJBgNVBAYTAkNOMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw
|
|
6
|
+
HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB
|
|
7
|
+
AQUAA4IBDwAwggEKAoIBAQDeAhT5hivPp1mbL+U3dXDJulqKNOfT0VD48Mm/KCnj
|
|
8
|
+
0FAhqsBS8K58nInUPDbwIQ69ECMpFZEgbHgYU73+V5KOBKSCFM7772D5tfSSUmzz
|
|
9
|
+
JpLXND5z15ndpY0Tm50RVVfSfcdWso1oKCQ9JD13eRqT/hMmlfzHTUPjEveZXyBq
|
|
10
|
+
wOJNka0yuX897J3in8osAndo1XitP2rkwkHhQJE0kxR9VB2pDjhdq3KWabs4/TBF
|
|
11
|
+
U/dO0F614q57gx2UooKf333qQt/S1OzJqgDD/p736ajSBrwn7nI1ttVCVmayMJC4
|
|
12
|
+
dN0LqEl4Tsmp+m5iLoxgHB68GHhP/8DOSRdRGGua6USPAgMBAAGjUzBRMB0GA1Ud
|
|
13
|
+
DgQWBBR5i1eeLYVCNU4AozD9u3EOrcI82jAfBgNVHSMEGDAWgBR5i1eeLYVCNU4A
|
|
14
|
+
ozD9u3EOrcI82jAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBV
|
|
15
|
+
HlJZ7a6sVPpzvu3cpkj43R+tRrEwka4I6E3F6fgd/IsoKEaElGYGptLwPH6Mz/5J
|
|
16
|
+
Cr9N0ajJOuxwDADDntSzGtR2gXiDrYvC9VPIpGn5tfT0JnHO/a+wKnSYFH4f7Xav
|
|
17
|
+
K92FvwGhvZ9a7A3JU0+UJc8axN1B977r+hI2Vi1eknyZQ8Uo2p5LEC75g8J/5IHD
|
|
18
|
+
dRXGqovpkYZVxpE6aOdPX2W62A0rp6Soz9V4hzkV5+G0eV6QMEW4NqBq3HByLW4e
|
|
19
|
+
+P33FSEuiQHnrgIiUmwbx3ohsxDJYHFDWOt1e0FYjd//41iZ59NPI9T2uQ1qlHKg
|
|
20
|
+
eWq5zc5FZJj097muQvEH
|
|
21
|
+
-----END CERTIFICATE-----
|
package/dflt-srv-ssl.key
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
|
2
|
+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDeAhT5hivPp1mb
|
|
3
|
+
L+U3dXDJulqKNOfT0VD48Mm/KCnj0FAhqsBS8K58nInUPDbwIQ69ECMpFZEgbHgY
|
|
4
|
+
U73+V5KOBKSCFM7772D5tfSSUmzzJpLXND5z15ndpY0Tm50RVVfSfcdWso1oKCQ9
|
|
5
|
+
JD13eRqT/hMmlfzHTUPjEveZXyBqwOJNka0yuX897J3in8osAndo1XitP2rkwkHh
|
|
6
|
+
QJE0kxR9VB2pDjhdq3KWabs4/TBFU/dO0F614q57gx2UooKf333qQt/S1OzJqgDD
|
|
7
|
+
/p736ajSBrwn7nI1ttVCVmayMJC4dN0LqEl4Tsmp+m5iLoxgHB68GHhP/8DOSRdR
|
|
8
|
+
GGua6USPAgMBAAECggEBAL4UqkC6T+iLMH1elLLXKqqNk9ehVJxXKyz5fMLecH9N
|
|
9
|
+
bE5nFCPvTnYC0T+WDrOqmiPmHTSf8pIATRMHIDUUZbaS4wc9KbsrSayDzdM6H25Q
|
|
10
|
+
KIl5gb9NacAMbq3LHsAogfkHGBVy6v+y3tQ6oyYX2lm7wEnZQYSi8u0I4FXAzNCY
|
|
11
|
+
nNTRYISOhSbedal9N27btf2zn09H29NbXmBCfKtuAegVQez2mijUxAbBIx2iI5GY
|
|
12
|
+
Nw8LizwrXFSFjlWJvlShZ+toKfSsbfB4+dEPcicu0lBbsYReA/TbCbsYaTyGbVug
|
|
13
|
+
N+mzlnsn4TxtC8fYlnQ9WAjAWI0ZlZU9puZb30jsb4ECgYEA87EnBdCqIpiQb0kK
|
|
14
|
+
0ARZY4U4mx59mkwlIZVcWQ3IOG3b/rwyi+/m++eXwMuwDNTeRYESxnwNuZinzQ51
|
|
15
|
+
CWKymTLpzzEdC/VFLrzuCf5Cto2BouOYerfX6Ic7WTx7hnWZfdtlLu2s5gqvljLR
|
|
16
|
+
EEH0MW72fRafcRWZ0sItvT1TULMCgYEA6TiQqS5PQ0qbxzM6KjRrqkrutWVofS68
|
|
17
|
+
SbSjVtHZLdy0Jsx7SQJ3igwo31nJhQThsL+j7QNYmqmeWWEO8XjjVA0LvKByvQCZ
|
|
18
|
+
L2r0iValTA669jppDdDMwUUPWnLvUcnphF8ligNzHVfWFcWlUk4Y+sclL/CD/qCU
|
|
19
|
+
tu0R7Xxo8rUCgYAVHO4SlOeIo8svuRZUu2u7MZmb5uJe8eXtqPEdThJgwTPkOA3x
|
|
20
|
+
DdHnVUNSktMn6XFweCRWSf0ubUlsfKorK//pQf3703d+x7s8t2WwO/Uvt8bZg/p7
|
|
21
|
+
912facf8jT7ugVXRD6cOj80BCT/5NWHjlLNBbSmx4LnjpEl1dxlbYerL/QKBgQDb
|
|
22
|
+
d4dqLVIZmNQPGH3byYinr+wCd3Nkmd5F3d73jHI7Xj2JZVN+2Pt0xQyRYgTpUDay
|
|
23
|
+
BSVVnJh8srF4moVdZs1GAyDQWIygnzeID7Yep5LVh+cYXs8NWTfViA9ypkXfSYqe
|
|
24
|
+
Los83RIuwsGLq3pvgV6wX0b3XfZYXvSTT3RXb4OzIQKBgBNs1isrAobtYl4aH+rh
|
|
25
|
+
cGUqbyRvQRHRrVH+c+xi00Xyxjj7mjzC/iO1POLdQf5q/AVsZKkikDJ+wAA1BLH+
|
|
26
|
+
qhz5e+mUwNQd4Y2oBro0ySm5qU9tQUX9Pzp3JfmSx9g1WrgKTISJ2B5/XVUae9yP
|
|
27
|
+
vV2cYEzrit1RWpWyxvvapYZT
|
|
28
|
+
-----END PRIVATE KEY-----
|
package/index.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nv-srv-nd-http-util",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"nv-cli-user": "^1.0.1",
|
|
8
|
+
"nv-cookie-parse-cookie": "^1.0.1",
|
|
9
|
+
"nv-facutil-csutil": "^1.0.13",
|
|
10
|
+
"nv-facutil-prms": "^1.0.3",
|
|
11
|
+
"nv-facutil-surl": "^1.0.2",
|
|
12
|
+
"nv-string-split": "^1.0.6"
|
|
13
|
+
},
|
|
14
|
+
"devDependencies": {},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
17
|
+
},
|
|
18
|
+
"author": "",
|
|
19
|
+
"license": "ISC"
|
|
20
|
+
}
|
package/req.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const _ck = require("nv-cookie-parse-cookie");
|
|
2
|
+
const _surl = require("nv-facutil-surl");
|
|
3
|
+
|
|
4
|
+
const extract_nd_http_req = (req,scheme="http")=> {
|
|
5
|
+
var addr = req.socket._getpeername();
|
|
6
|
+
var mthd = req.method;
|
|
7
|
+
var url = scheme+"://"+req.headers.host+req.url;
|
|
8
|
+
var urld = _surl.parse(url);
|
|
9
|
+
var head = req.headers;
|
|
10
|
+
if(head.cookie) {
|
|
11
|
+
head.cookie = _ck.parse_body_only(head.cookie);
|
|
12
|
+
} else {
|
|
13
|
+
}
|
|
14
|
+
return({addr,mthd,urld,head})
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
module.exports = {
|
|
18
|
+
extract_nd_http_req
|
|
19
|
+
}
|
package/srv.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const http = require("http");
|
|
2
|
+
const https = require("https");
|
|
3
|
+
const _fs = require("fs");
|
|
4
|
+
const _path = require("path");
|
|
5
|
+
const {parse_url} = require("./url")
|
|
6
|
+
|
|
7
|
+
const {chown_with_name} = require("nv-cli-user");
|
|
8
|
+
const _psj = require("nv-facutil-prms").psj;
|
|
9
|
+
|
|
10
|
+
module.exports = creat_srv = (
|
|
11
|
+
listen_on,
|
|
12
|
+
ahandle = async (req, res) => { },
|
|
13
|
+
chown_to_user = undefined, // "www-data"
|
|
14
|
+
key_buf = undefined,
|
|
15
|
+
cert_buf = undefined
|
|
16
|
+
) => {
|
|
17
|
+
let d = parse_url(listen_on);
|
|
18
|
+
let [p, rs, rj] = _psj();
|
|
19
|
+
let srv = null;
|
|
20
|
+
if (d.is_unix) {
|
|
21
|
+
listen_on = _path.resolve(listen_on);
|
|
22
|
+
if (_fs.existsSync(listen_on)) { _fs.unlinkSync(listen_on); } else { }
|
|
23
|
+
srv = http.createServer(ahandle);
|
|
24
|
+
srv.listen(listen_on, () => {
|
|
25
|
+
if (chown_to_user) { chown_with_name(listen_on, chown_to_user); } else { }
|
|
26
|
+
console.log(`listen on:`, listen_on);
|
|
27
|
+
rs(srv);
|
|
28
|
+
});
|
|
29
|
+
} else {
|
|
30
|
+
let port = Number(d.port);
|
|
31
|
+
let hostname = d.hostname;
|
|
32
|
+
if (d.is_secure) {
|
|
33
|
+
let options = _get_options_for_https(listen_on, key_buf, cert_buf)
|
|
34
|
+
srv = https.createServer(options, ahandle);
|
|
35
|
+
if (hostname !== '') {
|
|
36
|
+
srv.listen(port, hostname, () => { console.log(`listen on:`, port); rs(srv); });
|
|
37
|
+
} else {
|
|
38
|
+
srv.listen(port, () => { console.log(`listen on:`, port); rs(srv); });
|
|
39
|
+
}
|
|
40
|
+
} else {
|
|
41
|
+
srv = http.createServer(ahandle);
|
|
42
|
+
if (hostname !== '') {
|
|
43
|
+
srv.listen(port, hostname, () => { console.log(`listen on:`, port); rs(srv); });
|
|
44
|
+
} else {
|
|
45
|
+
srv.listen(port, () => { console.log(`listen on:`, port); rs(srv); });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return (p)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
|
package/url.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
|
|
2
|
+
const _fs = require("fs");
|
|
3
|
+
const _path = require("path");
|
|
4
|
+
|
|
5
|
+
const _url = require("url");
|
|
6
|
+
|
|
7
|
+
const parse_url = (url) => {
|
|
8
|
+
let d = _url.parse(url);
|
|
9
|
+
////
|
|
10
|
+
d.is_unix = (d.host === _n);
|
|
11
|
+
d.is_secure = (d.protocol === "wss:" || d.protocol === "https:");
|
|
12
|
+
////
|
|
13
|
+
d.port = d.port??(d.is_secure?"443":"80");
|
|
14
|
+
if(d.is_unix) {
|
|
15
|
+
d.port = _n;
|
|
16
|
+
d.socketPath = d.pathname;
|
|
17
|
+
delete d.pathname;
|
|
18
|
+
if(d.hash) {
|
|
19
|
+
d.path = d.hash.slice(1);
|
|
20
|
+
} else {}
|
|
21
|
+
} else {
|
|
22
|
+
d.host = d.hostname + ":" + d.port;
|
|
23
|
+
}
|
|
24
|
+
return(d)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const get_fmtted_query_from_url = (listen_on) =>{
|
|
28
|
+
let ud = new URL(listen_on);
|
|
29
|
+
let es = Array.from(ud.searchParams.entries());
|
|
30
|
+
ud = {}
|
|
31
|
+
for(let [k,v] of es) { ud[k.trim()] = v.trim();}
|
|
32
|
+
return(ud)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const _get_rejectUnauthorized = (ud)=> {
|
|
36
|
+
let rejectUnauthorized= false;
|
|
37
|
+
if(ud.rejectUnauthorized !== undefined) {
|
|
38
|
+
if(ud["rejectUnauthorized"].toLowerCase() !== 'false') {
|
|
39
|
+
rejectUnauthorized = true
|
|
40
|
+
} else {
|
|
41
|
+
}
|
|
42
|
+
} else {
|
|
43
|
+
}
|
|
44
|
+
return(rejectUnauthorized);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const DFLT_HTTPS_KEY = _fs.readFileSync(_path.join(__dirname,"dflt-srv-ssl.key"));
|
|
48
|
+
const DFLT_HTTPS_CERT = _fs.readFileSync(_path.join(__dirname,"dflt-srv-ssl.cert"));
|
|
49
|
+
|
|
50
|
+
const _get_ssl_buf = (ud,nm,buf_like) => {
|
|
51
|
+
if(buf_like !== undefined) {
|
|
52
|
+
if(buf_like instanceof ArrayBuffer || buf_like instanceof Array) {
|
|
53
|
+
return(Buffer.from(buf_like))
|
|
54
|
+
} else if(buf_like instanceof Buffer) {
|
|
55
|
+
return(buf_like)
|
|
56
|
+
} else {
|
|
57
|
+
return(_fs.readFileSync(_path.resolve(String(key_buf))));
|
|
58
|
+
}
|
|
59
|
+
} else {
|
|
60
|
+
return(_fs.readFileSync(_path.resolve(ud[nm])));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const _get_ssl_key_cert = (ud,key_buf,cert_buf) => {
|
|
65
|
+
let key = _get_ssl_buf(ud,"key",key_buf);
|
|
66
|
+
let cert = _get_ssl_buf(ud,"cert",key_buf);
|
|
67
|
+
return({key,cert})
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const _get_client_ip_before_ngx_fwd = (xff) => {
|
|
71
|
+
xff = xff.split(',').map(r=>r.trim());
|
|
72
|
+
for(let i=xff.length-1;i>=0;i--){
|
|
73
|
+
if(!/^(10|172\.16|192\.168)\./.test(xff[i])){ return xff[i];} else {}
|
|
74
|
+
}
|
|
75
|
+
return xff[0];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const _get_options_for_https = (listen_on,key_buf,cert_buf) => {
|
|
79
|
+
let ud = get_fmtted_query_from_url(listen_on);
|
|
80
|
+
let options = {}
|
|
81
|
+
let rejectUnauthorized = _get_rejectUnauthorized(ud);
|
|
82
|
+
options.rejectUnauthorized = rejectUnauthorized;
|
|
83
|
+
if(rejectUnauthorized) {
|
|
84
|
+
options.key = _get_ssl_buf(ud,"key",key_buf);
|
|
85
|
+
options.cert = _get_ssl_buf(ud,"cert",cert_buf);
|
|
86
|
+
} else {
|
|
87
|
+
options.key = DFLT_HTTPS_KEY;
|
|
88
|
+
options.cert = DFLT_HTTPS_CERT;
|
|
89
|
+
}
|
|
90
|
+
return(options)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
module.exports = {
|
|
94
|
+
parse_url,
|
|
95
|
+
get_fmtted_query_from_url,
|
|
96
|
+
_get_rejectUnauthorized,
|
|
97
|
+
DFLT_HTTPS_KEY,DFLT_HTTPS_CERT,
|
|
98
|
+
_get_ssl_buf,_get_ssl_key_cert,_get_client_ip_before_ngx_fwd,
|
|
99
|
+
_get_options_for_https,
|
|
100
|
+
}
|