underpost 3.2.8 → 3.2.10
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/.github/workflows/npmpkg.ci.yml +1 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/.github/workflows/release.cd.yml +1 -0
- package/.vscode/settings.json +10 -5
- package/CHANGELOG.md +223 -2
- package/CLI-HELP.md +36 -7
- package/README.md +38 -9
- package/bin/build.js +27 -11
- package/bin/deploy.js +20 -21
- package/bin/file.js +32 -13
- package/bin/index.js +2 -1
- package/bin/vs.js +1 -1
- package/bump.config.js +26 -0
- package/conf.js +20 -4
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/deployment/dd-test-development/deployment.yaml +4 -2
- package/manifests/kind-config-dev.yaml +8 -0
- package/manifests/mongodb/pv-pvc.yaml +44 -8
- package/manifests/mongodb/statefulset.yaml +55 -68
- package/package.json +40 -25
- package/scripts/k3s-node-setup.sh +30 -11
- package/scripts/nat-iptables.sh +103 -18
- package/src/api/core/core.router.js +19 -14
- package/src/api/core/core.service.js +5 -5
- package/src/api/default/default.router.js +22 -18
- package/src/api/default/default.service.js +5 -5
- package/src/api/document/document.router.js +28 -23
- package/src/api/document/document.service.js +100 -23
- package/src/api/file/file.router.js +19 -13
- package/src/api/file/file.service.js +9 -7
- package/src/api/test/test.router.js +17 -12
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +5 -4
- package/src/api/user/user.router.js +297 -288
- package/src/api/user/user.service.js +100 -35
- package/src/cli/baremetal.js +20 -11
- package/src/cli/cluster.js +243 -55
- package/src/cli/db.js +106 -62
- package/src/cli/deploy.js +297 -154
- package/src/cli/fs.js +19 -3
- package/src/cli/index.js +37 -9
- package/src/cli/ipfs.js +4 -6
- package/src/cli/kubectl.js +4 -1
- package/src/cli/lxd.js +217 -135
- package/src/cli/release.js +289 -131
- package/src/cli/repository.js +91 -34
- package/src/cli/run.js +297 -56
- package/src/cli/test.js +9 -3
- package/src/client/Default.index.js +9 -3
- package/src/client/components/core/Auth.js +19 -5
- package/src/client/components/core/Docs.js +6 -34
- package/src/client/components/core/FileExplorer.js +6 -6
- package/src/client/components/core/Modal.js +65 -2
- package/src/client/components/core/PanelForm.js +56 -52
- package/src/client/components/core/Recover.js +4 -4
- package/src/client/components/core/Worker.js +170 -350
- package/src/client/services/default/default.management.js +20 -25
- package/src/client/services/user/guest.service.js +10 -3
- package/src/client/sw/core.sw.js +174 -112
- package/src/db/DataBaseProvider.js +120 -20
- package/src/db/mongo/MongoBootstrap.js +587 -0
- package/src/db/mongo/MongooseDB.js +126 -22
- package/src/index.js +1 -1
- package/src/runtime/express/Express.js +2 -2
- package/src/runtime/wp/Wp.js +8 -5
- package/src/server/auth.js +2 -2
- package/src/server/client-build-docs.js +1 -1
- package/src/server/client-build.js +94 -129
- package/src/server/conf.js +20 -65
- package/src/server/data-query.js +32 -20
- package/src/server/dns.js +22 -0
- package/src/server/process.js +180 -19
- package/src/server/runtime.js +1 -1
- package/src/server/start.js +26 -7
- package/src/server/valkey.js +9 -2
- package/src/ws/IoInterface.js +16 -16
- package/src/ws/core/channels/core.ws.chat.js +11 -11
- package/src/ws/core/channels/core.ws.mailer.js +29 -29
- package/src/ws/core/channels/core.ws.stream.js +19 -19
- package/src/ws/core/core.ws.connection.js +8 -8
- package/src/ws/core/core.ws.server.js +6 -5
- package/src/ws/default/channels/default.ws.main.js +10 -10
- package/src/ws/default/default.ws.connection.js +4 -4
- package/src/ws/default/default.ws.server.js +4 -3
- package/typedoc.json +10 -1
- package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
- package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
- /package/src/client/ssr/{offline → views}/Maintenance.js +0 -0
- /package/src/client/ssr/{offline → views}/NoNetworkConnection.js +0 -0
- /package/src/client/ssr/{pages → views}/Test.js +0 -0
package/package.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"type": "module",
|
|
3
3
|
"main": "src/index.js",
|
|
4
4
|
"name": "underpost",
|
|
5
|
-
"version": "3.2.
|
|
6
|
-
"description": "
|
|
5
|
+
"version": "3.2.10",
|
|
6
|
+
"description": "Underpost Platform — end-to-end CI/CD and application-delivery toolchain CLI. Covers bare metal, Kubernetes, K3s, kubeadm, LXD, container/image orchestration, secrets, databases, cron jobs, monitoring, SSH, runners, PWA + Workbox delivery, and release orchestration. Extensible via downstream CLIs.",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"start": "node --max-old-space-size=8192 src/server",
|
|
9
9
|
"build": "node bin client",
|
|
@@ -35,7 +35,21 @@
|
|
|
35
35
|
"url": "git+https://github.com/underpostnet/pwa-microservices-template.git"
|
|
36
36
|
},
|
|
37
37
|
"keywords": [
|
|
38
|
+
"underpost",
|
|
39
|
+
"underpost-platform",
|
|
40
|
+
"cli",
|
|
41
|
+
"toolchain",
|
|
42
|
+
"ci-cd",
|
|
43
|
+
"devops",
|
|
44
|
+
"kubernetes",
|
|
45
|
+
"k3s",
|
|
46
|
+
"kubeadm",
|
|
47
|
+
"lxd",
|
|
48
|
+
"bare-metal",
|
|
49
|
+
"container-orchestration",
|
|
50
|
+
"image-management",
|
|
38
51
|
"pwa",
|
|
52
|
+
"workbox",
|
|
39
53
|
"microservices",
|
|
40
54
|
"template",
|
|
41
55
|
"builder",
|
|
@@ -53,12 +67,13 @@
|
|
|
53
67
|
"dependencies": {
|
|
54
68
|
"@fortawesome/fontawesome-free": "^7.2.0",
|
|
55
69
|
"@fullcalendar/rrule": "^6.1.20",
|
|
56
|
-
"@grpc/grpc-js": "^1.
|
|
57
|
-
"@grpc/proto-loader": "^0.8.
|
|
70
|
+
"@grpc/grpc-js": "^1.14.4",
|
|
71
|
+
"@grpc/proto-loader": "^0.8.1",
|
|
58
72
|
"@neodrag/vanilla": "^2.3.1",
|
|
59
73
|
"adm-zip": "^0.5.17",
|
|
60
|
-
"ag-grid-community": "^35.
|
|
61
|
-
"axios": "^1.
|
|
74
|
+
"ag-grid-community": "^35.3.0",
|
|
75
|
+
"axios": "^1.16.1",
|
|
76
|
+
"bumpp": "^10.1.0",
|
|
62
77
|
"chai": "^6.2.2",
|
|
63
78
|
"clipboardy": "^5.3.1",
|
|
64
79
|
"cloudinary": "^2.10.0",
|
|
@@ -70,35 +85,35 @@
|
|
|
70
85
|
"d3": "^7.9.0",
|
|
71
86
|
"dexie": "^4.2.1",
|
|
72
87
|
"dotenv": "^17.4.2",
|
|
73
|
-
"easymde": "^2.
|
|
88
|
+
"easymde": "^2.21.0",
|
|
74
89
|
"esbuild": "^0.28.0",
|
|
75
90
|
"escape-string-regexp": "^5.0.0",
|
|
76
91
|
"express": "^5.2.1",
|
|
77
92
|
"express-fileupload": "^1.4.3",
|
|
78
|
-
"express-rate-limit": "^8.
|
|
93
|
+
"express-rate-limit": "^8.5.2",
|
|
79
94
|
"express-slow-down": "^3.1.0",
|
|
80
95
|
"fast-json-stable-stringify": "^2.1.0",
|
|
81
96
|
"favicons": "^7.2.0",
|
|
82
|
-
"fs-extra": "^11.3.
|
|
97
|
+
"fs-extra": "^11.3.5",
|
|
83
98
|
"fullcalendar": "^6.1.15",
|
|
84
|
-
"helmet": "^8.
|
|
99
|
+
"helmet": "^8.2.0",
|
|
85
100
|
"html-minifier-terser": "^7.2.0",
|
|
86
|
-
"http-proxy-middleware": "^
|
|
87
|
-
"ignore-walk": "^
|
|
101
|
+
"http-proxy-middleware": "^4.0.0",
|
|
102
|
+
"ignore-walk": "^9.0.0",
|
|
88
103
|
"iovalkey": "^0.3.3",
|
|
89
104
|
"json-colorizer": "^3.0.1",
|
|
90
105
|
"jsonwebtoken": "^9.0.3",
|
|
91
106
|
"mariadb": "^3.2.2",
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"mongoose": "^9.
|
|
107
|
+
"mocha": "^11.7.6",
|
|
108
|
+
"marked": "^18.0.4",
|
|
109
|
+
"mongoose": "^9.6.2",
|
|
95
110
|
"morgan": "^1.10.0",
|
|
96
|
-
"nodemailer": "^8.0.
|
|
111
|
+
"nodemailer": "^8.0.8",
|
|
97
112
|
"nodemon": "^3.0.1",
|
|
98
113
|
"peer": "^1.0.2",
|
|
99
114
|
"peerjs": "^1.5.5",
|
|
100
115
|
"prom-client": "^15.1.2",
|
|
101
|
-
"read": "^
|
|
116
|
+
"read": "^6.0.0",
|
|
102
117
|
"rrule": "^2.8.1",
|
|
103
118
|
"shelljs": "^0.10.0",
|
|
104
119
|
"sitemap": "^9.0.1",
|
|
@@ -108,17 +123,17 @@
|
|
|
108
123
|
"swagger-autogen": "^2.23.7",
|
|
109
124
|
"swagger-ui-express": "^5.0.0",
|
|
110
125
|
"typedoc": "^0.28.19",
|
|
111
|
-
"typescript": "^
|
|
126
|
+
"typescript": "^6.0.3",
|
|
112
127
|
"validator": "^13.15.35",
|
|
113
128
|
"vanilla-jsoneditor": "^3.12.0",
|
|
114
129
|
"winston": "^3.19.0",
|
|
115
|
-
"workbox-background-sync": "^7.4.
|
|
116
|
-
"workbox-cacheable-response": "^7.4.
|
|
117
|
-
"workbox-core": "^7.4.
|
|
118
|
-
"workbox-expiration": "^7.4.
|
|
119
|
-
"workbox-precaching": "^7.4.
|
|
120
|
-
"workbox-routing": "^7.4.
|
|
121
|
-
"workbox-strategies": "^7.4.
|
|
130
|
+
"workbox-background-sync": "^7.4.1",
|
|
131
|
+
"workbox-cacheable-response": "^7.4.1",
|
|
132
|
+
"workbox-core": "^7.4.1",
|
|
133
|
+
"workbox-expiration": "^7.4.1",
|
|
134
|
+
"workbox-precaching": "^7.4.1",
|
|
135
|
+
"workbox-routing": "^7.4.1",
|
|
136
|
+
"workbox-strategies": "^7.4.1"
|
|
122
137
|
},
|
|
123
138
|
"publishConfig": {
|
|
124
139
|
"provenance": true,
|
|
@@ -8,6 +8,13 @@ set -e
|
|
|
8
8
|
# --worker Initialize as K3s worker node
|
|
9
9
|
# --control-ip=<ip> Control plane IP (required for --worker)
|
|
10
10
|
# --token=<token> K3s node token (required for --worker)
|
|
11
|
+
#
|
|
12
|
+
# DESIGN NOTES:
|
|
13
|
+
# - This script installs the underpost CLI globally via npm.
|
|
14
|
+
# - It then uses the global CLI binary for configuration and K3s setup.
|
|
15
|
+
# - Engine source replication (e.g. via --bootstrap-engine from the host)
|
|
16
|
+
# is a SEPARATE step. This script does NOT depend on /home/dd/engine
|
|
17
|
+
# being pre-pushed. Use --bootstrap-engine after --init-vm completes.
|
|
11
18
|
# ---------------------------------------------------------------------------
|
|
12
19
|
|
|
13
20
|
ROLE="control"
|
|
@@ -32,8 +39,8 @@ curl -o- https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.40.1/install.sh | bash
|
|
|
32
39
|
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
|
|
33
40
|
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
34
41
|
|
|
35
|
-
nvm install 24.
|
|
36
|
-
nvm use 24.
|
|
42
|
+
nvm install 24.15.0
|
|
43
|
+
nvm use 24.15.0
|
|
37
44
|
|
|
38
45
|
echo "
|
|
39
46
|
██╗░░░██╗███╗░░██╗██████╗░███████╗██████╗░██████╗░░█████╗░░██████╗████████╗
|
|
@@ -48,19 +55,31 @@ Installing underpost VM node...
|
|
|
48
55
|
|
|
49
56
|
npm install -g underpost
|
|
50
57
|
|
|
51
|
-
cd /home/dd/engine
|
|
52
|
-
|
|
53
58
|
echo "Applying host configuration..."
|
|
54
59
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
# Use the globally installed underpost CLI
|
|
61
|
+
# NOTE: --dev is used to match the host dev context
|
|
62
|
+
underpost cluster --dev --config
|
|
63
|
+
|
|
64
|
+
# Check if /home/dd/engine exists locally for engine-specific operations.
|
|
65
|
+
# This directory is populated by the host running --bootstrap-engine.
|
|
66
|
+
# If absent, the global underpost CLI handles all operations.
|
|
67
|
+
if [ -d /home/dd/engine ]; then
|
|
68
|
+
echo "Local engine source found at /home/dd/engine. Using local underpost."
|
|
69
|
+
cd /home/dd/engine
|
|
70
|
+
npm install
|
|
71
|
+
node bin run secret
|
|
72
|
+
else
|
|
73
|
+
echo "No local engine source at /home/dd/engine. Using global underpost CLI."
|
|
74
|
+
echo "Engine source can be replicated later with --bootstrap-engine from the host."
|
|
75
|
+
# The globally installed underpost handles secret generation via its own config
|
|
76
|
+
underpost secret underpost --init
|
|
77
|
+
fi
|
|
60
78
|
|
|
61
79
|
if [ "$ROLE" = "control" ]; then
|
|
62
80
|
echo "Initializing K3s control plane..."
|
|
63
|
-
|
|
81
|
+
# Use global underpost CLI for K3s setup
|
|
82
|
+
underpost cluster --dev --k3s
|
|
64
83
|
|
|
65
84
|
echo ""
|
|
66
85
|
echo "K3s control plane is ready."
|
|
@@ -86,4 +105,4 @@ elif [ "$ROLE" = "worker" ]; then
|
|
|
86
105
|
echo ""
|
|
87
106
|
echo "K3s worker node joined the cluster at https://${CONTROL_IP}:6443 successfully."
|
|
88
107
|
sudo systemctl status k3s-agent --no-pager
|
|
89
|
-
fi
|
|
108
|
+
fi
|
package/scripts/nat-iptables.sh
CHANGED
|
@@ -1,26 +1,111 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
sudo systemctl
|
|
6
|
-
sudo systemctl disable --now ufw
|
|
7
|
-
sudo systemctl disable --now firewalld
|
|
4
|
+
echo "[INFO] Enabling firewalld..."
|
|
5
|
+
sudo systemctl enable --now firewalld
|
|
8
6
|
|
|
7
|
+
echo "[INFO] Configuring kernel networking..."
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
echo "net.ipv6.conf.all.forwarding = 1" | sudo tee -a /etc/sysctl.conf
|
|
15
|
-
# ---
|
|
9
|
+
sudo tee /etc/sysctl.d/99-kubernetes.conf >/dev/null <<'EOF'
|
|
10
|
+
# Kubernetes networking
|
|
11
|
+
net.ipv4.ip_forward = 1
|
|
12
|
+
net.ipv6.conf.all.forwarding = 1
|
|
16
13
|
|
|
17
|
-
|
|
14
|
+
# Required for Kubernetes iptables
|
|
15
|
+
net.bridge.bridge-nf-call-iptables = 1
|
|
16
|
+
net.bridge.bridge-nf-call-ip6tables = 1
|
|
18
17
|
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
sudo iptables -P OUTPUT ACCEPT
|
|
18
|
+
# Better conntrack handling
|
|
19
|
+
net.netfilter.nf_conntrack_max = 131072
|
|
20
|
+
EOF
|
|
23
21
|
|
|
24
|
-
#
|
|
25
|
-
sudo
|
|
26
|
-
|
|
22
|
+
# Load br_netfilter immediately
|
|
23
|
+
sudo modprobe br_netfilter
|
|
24
|
+
|
|
25
|
+
# Apply sysctl
|
|
26
|
+
sudo sysctl --system
|
|
27
|
+
|
|
28
|
+
echo "[INFO] Opening common WAN/public services..."
|
|
29
|
+
|
|
30
|
+
# Public services
|
|
31
|
+
sudo firewall-cmd --permanent --zone=public --add-service=ssh
|
|
32
|
+
sudo firewall-cmd --permanent --zone=public --add-service=http
|
|
33
|
+
sudo firewall-cmd --permanent --zone=public --add-service=https
|
|
34
|
+
|
|
35
|
+
echo "[INFO] Opening Kubernetes control plane ports..."
|
|
36
|
+
|
|
37
|
+
# Kubernetes API Server
|
|
38
|
+
sudo firewall-cmd --permanent --zone=public --add-port=6443/tcp
|
|
39
|
+
|
|
40
|
+
# etcd
|
|
41
|
+
sudo firewall-cmd --permanent --zone=public --add-port=2379-2380/tcp
|
|
42
|
+
|
|
43
|
+
# kubelet API
|
|
44
|
+
sudo firewall-cmd --permanent --zone=public --add-port=10250/tcp
|
|
45
|
+
|
|
46
|
+
# kube-scheduler
|
|
47
|
+
sudo firewall-cmd --permanent --zone=public --add-port=10259/tcp
|
|
48
|
+
|
|
49
|
+
# kube-controller-manager
|
|
50
|
+
sudo firewall-cmd --permanent --zone=public --add-port=10257/tcp
|
|
51
|
+
|
|
52
|
+
echo "[INFO] Opening Kubernetes networking ports..."
|
|
53
|
+
|
|
54
|
+
# CoreDNS
|
|
55
|
+
sudo firewall-cmd --permanent --zone=public --add-port=53/tcp
|
|
56
|
+
sudo firewall-cmd --permanent --zone=public --add-port=53/udp
|
|
57
|
+
|
|
58
|
+
# NodePort Services
|
|
59
|
+
sudo firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
|
|
60
|
+
sudo firewall-cmd --permanent --zone=public --add-port=30000-32767/udp
|
|
61
|
+
|
|
62
|
+
# Calico VXLAN
|
|
63
|
+
sudo firewall-cmd --permanent --zone=public --add-port=4789/udp
|
|
64
|
+
|
|
65
|
+
# Calico BGP
|
|
66
|
+
sudo firewall-cmd --permanent --zone=public --add-port=179/tcp
|
|
67
|
+
|
|
68
|
+
# Calico Typha (required for multi-node Calico deployments)
|
|
69
|
+
sudo firewall-cmd --permanent --zone=public --add-port=5473/tcp
|
|
70
|
+
|
|
71
|
+
# Calico WireGuard (optional encrypted overlay)
|
|
72
|
+
sudo firewall-cmd --permanent --zone=public --add-port=51820/udp
|
|
73
|
+
sudo firewall-cmd --permanent --zone=public --add-port=51821/udp
|
|
74
|
+
|
|
75
|
+
# Flannel VXLAN (UDP, required if using Flannel CNI)
|
|
76
|
+
sudo firewall-cmd --permanent --zone=public --add-port=8472/udp
|
|
77
|
+
|
|
78
|
+
# kube-proxy healthz
|
|
79
|
+
sudo firewall-cmd --permanent --zone=public --add-port=10256/tcp
|
|
80
|
+
|
|
81
|
+
# metrics-server
|
|
82
|
+
sudo firewall-cmd --permanent --zone=public --add-port=4443/tcp
|
|
83
|
+
|
|
84
|
+
echo "[INFO] Configuring trusted zone for inter-node pod/service CIDRs..."
|
|
85
|
+
# Allow all traffic from the default pod CIDR and service CIDR so that
|
|
86
|
+
# cross-node pod-to-pod and service routing works without explicit per-port rules.
|
|
87
|
+
sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.0.0/16
|
|
88
|
+
sudo firewall-cmd --permanent --zone=trusted --add-source=10.96.0.0/12
|
|
89
|
+
|
|
90
|
+
echo "[INFO] Enabling masquerade and forwarding..."
|
|
91
|
+
|
|
92
|
+
sudo firewall-cmd --permanent --zone=public --add-masquerade
|
|
93
|
+
|
|
94
|
+
echo "[INFO] Reloading firewall..."
|
|
95
|
+
|
|
96
|
+
sudo firewall-cmd --reload
|
|
97
|
+
|
|
98
|
+
echo
|
|
99
|
+
echo "[INFO] Sysctl status:"
|
|
100
|
+
sudo sysctl \
|
|
101
|
+
net.ipv4.ip_forward \
|
|
102
|
+
net.ipv6.conf.all.forwarding \
|
|
103
|
+
net.bridge.bridge-nf-call-iptables \
|
|
104
|
+
net.bridge.bridge-nf-call-ip6tables
|
|
105
|
+
|
|
106
|
+
echo
|
|
107
|
+
echo "[INFO] Firewall status:"
|
|
108
|
+
sudo firewall-cmd --zone=public --list-all
|
|
109
|
+
|
|
110
|
+
echo
|
|
111
|
+
echo "[INFO] Kubernetes firewall configuration completed."
|
|
@@ -5,20 +5,25 @@ import express from 'express';
|
|
|
5
5
|
|
|
6
6
|
const logger = loggerFactory(import.meta);
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
router
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
8
|
+
class CoreRouter {
|
|
9
|
+
/**
|
|
10
|
+
* @param {import('../types.js').RouterOptions} options
|
|
11
|
+
* @returns {import('express').Router}
|
|
12
|
+
*/
|
|
13
|
+
static router(options) {
|
|
14
|
+
const router = express.Router();
|
|
15
|
+
router.post(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.post(req, res, options));
|
|
16
|
+
router.post(`/`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.post(req, res, options));
|
|
17
|
+
router.get(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.get(req, res, options));
|
|
18
|
+
router.get(`/`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.get(req, res, options));
|
|
19
|
+
router.put(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.put(req, res, options));
|
|
20
|
+
router.put(`/`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.put(req, res, options));
|
|
21
|
+
router.delete(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.delete(req, res, options));
|
|
22
|
+
router.delete(`/`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.delete(req, res, options));
|
|
23
|
+
return router;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
21
26
|
|
|
22
|
-
const ApiRouter = CoreRouter;
|
|
27
|
+
const ApiRouter = (options) => CoreRouter.router(options);
|
|
23
28
|
|
|
24
29
|
export { ApiRouter, CoreRouter };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
2
2
|
import { loggerFactory } from '../../server/logger.js';
|
|
3
3
|
import { shellExec } from '../../server/process.js';
|
|
4
4
|
|
|
@@ -7,22 +7,22 @@ const logger = loggerFactory(import.meta);
|
|
|
7
7
|
class CoreService {
|
|
8
8
|
static post = async (req, res, options) => {
|
|
9
9
|
/** @type {import('./core.model.js').CoreModel} */
|
|
10
|
-
const Core =
|
|
10
|
+
const Core = DataBaseProviderService.getModel("Core", options);
|
|
11
11
|
return await new Core(req.body).save();
|
|
12
12
|
};
|
|
13
13
|
static get = async (req, res, options) => {
|
|
14
14
|
/** @type {import('./core.model.js').CoreModel} */
|
|
15
|
-
const Core =
|
|
15
|
+
const Core = DataBaseProviderService.getModel("Core", options);
|
|
16
16
|
return await Core.findById(req.params.id);
|
|
17
17
|
};
|
|
18
18
|
static put = async (req, res, options) => {
|
|
19
19
|
/** @type {import('./core.model.js').CoreModel} */
|
|
20
|
-
const Core =
|
|
20
|
+
const Core = DataBaseProviderService.getModel("Core", options);
|
|
21
21
|
return await Core.findByIdAndUpdate(req.params.id, req.body);
|
|
22
22
|
};
|
|
23
23
|
static delete = async (req, res, options) => {
|
|
24
24
|
/** @type {import('./core.model.js').CoreModel} */
|
|
25
|
-
const Core =
|
|
25
|
+
const Core = DataBaseProviderService.getModel("Core", options);
|
|
26
26
|
return await Core.findByIdAndDelete(req.params.id);
|
|
27
27
|
};
|
|
28
28
|
}
|
|
@@ -4,24 +4,28 @@ import express from 'express';
|
|
|
4
4
|
|
|
5
5
|
const logger = loggerFactory(import.meta);
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
router
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
async (req, res) => await DefaultController.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
7
|
+
class DefaultRouter {
|
|
8
|
+
/**
|
|
9
|
+
* @param {import('../types.js').RouterOptions} options
|
|
10
|
+
* @returns {import('express').Router}
|
|
11
|
+
*/
|
|
12
|
+
static router(options) {
|
|
13
|
+
const router = express.Router();
|
|
14
|
+
router.post(`/:id`, async (req, res) => await DefaultController.post(req, res, options));
|
|
15
|
+
router.post(`/`, async (req, res) => await DefaultController.post(req, res, options));
|
|
16
|
+
router.get(`/:id`,
|
|
17
|
+
// options.authMiddleware,
|
|
18
|
+
async (req, res) => await DefaultController.get(req, res, options),
|
|
19
|
+
);
|
|
20
|
+
router.get(`/`, async (req, res) => await DefaultController.get(req, res, options));
|
|
21
|
+
router.put(`/:id`, async (req, res) => await DefaultController.put(req, res, options));
|
|
22
|
+
router.put(`/`, async (req, res) => await DefaultController.put(req, res, options));
|
|
23
|
+
router.delete(`/:id`, async (req, res) => await DefaultController.delete(req, res, options));
|
|
24
|
+
router.delete(`/`, async (req, res) => await DefaultController.delete(req, res, options));
|
|
25
|
+
return router;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
24
28
|
|
|
25
|
-
const ApiRouter = DefaultRouter;
|
|
29
|
+
const ApiRouter = (options) => DefaultRouter.router(options);
|
|
26
30
|
|
|
27
31
|
export { ApiRouter, DefaultRouter };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
2
2
|
import { loggerFactory } from '../../server/logger.js';
|
|
3
3
|
import { DataQuery } from '../../server/data-query.js';
|
|
4
4
|
|
|
@@ -7,12 +7,12 @@ const logger = loggerFactory(import.meta);
|
|
|
7
7
|
class DefaultService {
|
|
8
8
|
static post = async (req, res, options) => {
|
|
9
9
|
/** @type {import('./default.model.js').DefaultModel} */
|
|
10
|
-
const Default =
|
|
10
|
+
const Default = DataBaseProviderService.getModel("Default", options);
|
|
11
11
|
return await new Default(req.body).save();
|
|
12
12
|
};
|
|
13
13
|
static get = async (req, res, options) => {
|
|
14
14
|
/** @type {import('./default.model.js').DefaultModel} */
|
|
15
|
-
const Default =
|
|
15
|
+
const Default = DataBaseProviderService.getModel("Default", options);
|
|
16
16
|
if (req.params.id) return await Default.findById(req.params.id);
|
|
17
17
|
|
|
18
18
|
// Parse query parameters using DataQuery helper
|
|
@@ -28,12 +28,12 @@ class DefaultService {
|
|
|
28
28
|
};
|
|
29
29
|
static put = async (req, res, options) => {
|
|
30
30
|
/** @type {import('./default.model.js').DefaultModel} */
|
|
31
|
-
const Default =
|
|
31
|
+
const Default = DataBaseProviderService.getModel("Default", options);
|
|
32
32
|
return await Default.findByIdAndUpdate(req.params.id, req.body);
|
|
33
33
|
};
|
|
34
34
|
static delete = async (req, res, options) => {
|
|
35
35
|
/** @type {import('./default.model.js').DefaultModel} */
|
|
36
|
-
const Default =
|
|
36
|
+
const Default = DataBaseProviderService.getModel("Default", options);
|
|
37
37
|
if (req.params.id) return await Default.findByIdAndDelete(req.params.id);
|
|
38
38
|
else return await Default.deleteMany();
|
|
39
39
|
};
|
|
@@ -1,31 +1,36 @@
|
|
|
1
1
|
import { loggerFactory } from '../../server/logger.js';
|
|
2
2
|
import { DocumentController } from './document.controller.js';
|
|
3
3
|
import express from 'express';
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
const logger = loggerFactory(import.meta);
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
router
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
`/:id
|
|
21
|
-
authMiddleware,
|
|
22
|
-
async (req, res) => await DocumentController.patch(req, res, options)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
7
|
+
class DocumentRouter {
|
|
8
|
+
/**
|
|
9
|
+
* @param {import('../types.js').RouterOptions} options
|
|
10
|
+
* @returns {import('express').Router}
|
|
11
|
+
*/
|
|
12
|
+
static router(options) {
|
|
13
|
+
const router = express.Router();
|
|
14
|
+
router.post(`/:id`, options.authMiddleware, async (req, res) => await DocumentController.post(req, res, options));
|
|
15
|
+
router.post(`/`, options.authMiddleware, async (req, res) => await DocumentController.post(req, res, options));
|
|
16
|
+
router.get(`/public/high`, async (req, res) => await DocumentController.get(req, res, options));
|
|
17
|
+
router.get(`/public`, async (req, res) => await DocumentController.get(req, res, options));
|
|
18
|
+
router.get(`/:id`, options.authMiddleware, async (req, res) => await DocumentController.get(req, res, options));
|
|
19
|
+
router.get(`/`, options.authMiddleware, async (req, res) => await DocumentController.get(req, res, options));
|
|
20
|
+
router.put(`/:id`, options.authMiddleware, async (req, res) => await DocumentController.put(req, res, options));
|
|
21
|
+
router.put(`/`, options.authMiddleware, async (req, res) => await DocumentController.put(req, res, options));
|
|
22
|
+
router.patch(`/:id/copy-share-link`, async (req, res) => await DocumentController.patch(req, res, options));
|
|
23
|
+
router.patch(
|
|
24
|
+
`/:id/toggle-public`,
|
|
25
|
+
options.authMiddleware,
|
|
26
|
+
async (req, res) => await DocumentController.patch(req, res, options),
|
|
27
|
+
);
|
|
28
|
+
router.delete(`/:id`, options.authMiddleware, async (req, res) => await DocumentController.delete(req, res, options));
|
|
29
|
+
router.delete(`/`, options.authMiddleware, async (req, res) => await DocumentController.delete(req, res, options));
|
|
30
|
+
return router;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
28
33
|
|
|
29
|
-
const ApiRouter = DocumentRouter;
|
|
34
|
+
const ApiRouter = (options) => DocumentRouter.router(options);
|
|
30
35
|
|
|
31
36
|
export { ApiRouter, DocumentRouter };
|