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.
@@ -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-----
@@ -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
@@ -0,0 +1,10 @@
1
+ const creat_srv = require("./srv");
2
+ const _req = require("./req");
3
+ const _url = require("./url");
4
+
5
+ module.exports = {
6
+ creat_srv,
7
+ _req,
8
+ _url,
9
+ }
10
+
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
+ }