mbkbucket 3.8.3 → 4.0.1
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/.env.example +4 -3
- package/README.md +375 -167
- package/index.js +3 -1
- package/lib/cli.js +239 -239
- package/lib/public/bucketadmin.css +855 -521
- package/lib/public/bucketadmin.js +367 -31
- package/lib/public/mbkbucket-helper-demo.html +4 -24
- package/lib/public/mbkbucket-helper.css +28 -34
- package/lib/public/mbkbucket-helper.js +4 -3
- package/lib/src/config/validation.js +18 -5
- package/lib/src/controllers/api.controller.js +66 -17
- package/lib/src/controllers/dashboard.controller.js +30 -10
- package/lib/src/controllers/info.controller.js +34 -3
- package/lib/src/controllers/view.controller.js +16 -14
- package/lib/src/core/storage/errors.js +62 -0
- package/lib/src/core/storage/gdrive-auth.js +193 -0
- package/lib/src/core/storage/gdrive-provider.js +656 -0
- package/lib/src/core/storage/index.js +14 -0
- package/lib/src/core/storage/models.js +80 -0
- package/lib/src/core/storage/path-strategy.js +65 -0
- package/lib/src/core/storage/s3-provider.js +491 -0
- package/lib/src/core/storage/storage-manager.js +203 -0
- package/lib/src/core/storage/storage-provider.js +217 -0
- package/lib/src/middleware/bucket-resolver.js +6 -6
- package/lib/src/routes/api.routes.js +5 -1
- package/lib/src/routes/index.js +2 -2
- package/lib/src/routes/view.routes.js +5 -2
- package/lib/src/services/s3.service.js +16 -568
- package/lib/src/services/storage.service.js +213 -0
- package/lib/src/utils/errors.js +15 -5
- package/package.json +2 -3
- package/views/bucket.hbs +47 -71
- package/views/bucketadmin_move_modal.hbs +35 -0
- package/views/bucketadmin_preview_modal.hbs +81 -13
- package/views/bucketadmincontent.hbs +56 -7
- package/views/mbkbucket_info.hbs +109 -207
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
{{!-- Gentelella v4 File Management System - Bucket Dashboard --}}
|
|
2
1
|
<link rel="stylesheet" href="/mbkbucket/bucketadmin.css{{mbkbucket_cachebuster}}">
|
|
3
|
-
<div id="bucketAppData" data-app-name="{{APP_NAME}}" hidden></div>
|
|
2
|
+
<div id="bucketAppData" data-app-name="{{APP_NAME}}" data-provider-type="{{providerType}}" data-public-view-enabled="{{publicViewEnabled}}" hidden></div>
|
|
4
3
|
|
|
5
4
|
<div class="page-wrapper">
|
|
6
5
|
<!-- Page Header -->
|
|
@@ -8,9 +7,23 @@
|
|
|
8
7
|
<div class="page-header-row">
|
|
9
8
|
<div>
|
|
10
9
|
<div class="page-pretitle">Storage & Buckets</div>
|
|
11
|
-
<h1 class="page-title">
|
|
10
|
+
<h1 class="page-title d-flex align-items-center gap-2">
|
|
11
|
+
<span>Files</span>
|
|
12
|
+
<span class="provider-badge provider-{{providerType}}" id="topProviderBadge">
|
|
13
|
+
<span class="provider-icon"></span>
|
|
14
|
+
<span class="provider-label">{{providerType}}</span>
|
|
15
|
+
</span>
|
|
16
|
+
<span class="health-status-badge healthy" id="topHealthBadge" title="Storage Connection Health">
|
|
17
|
+
<span class="health-dot"></span>
|
|
18
|
+
<span class="health-label" id="topHealthText">Connected</span>
|
|
19
|
+
</span>
|
|
20
|
+
</h1>
|
|
12
21
|
</div>
|
|
13
22
|
<div class="page-actions">
|
|
23
|
+
<button type="button" class="btn btn-outline btn-refresh" id="refresh-btn" title="Refresh files" aria-label="Refresh files">
|
|
24
|
+
<svg width="15" height="15" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M1 4v4h4M15 12v-4h-4M13.5 6A6 6 0 003 4.5L1 8M2.5 10a6 6 0 0010.5 1.5L15 8"/></svg>
|
|
25
|
+
<span class="d-none d-sm-inline">Refresh</span>
|
|
26
|
+
</button>
|
|
14
27
|
<button type="button" class="btn btn-outline" id="new-folder-btn" data-action="create-folder">
|
|
15
28
|
<svg width="15" height="15" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M2 4a1 1 0 011-1h3l2 2h5a1 1 0 011 1v6a1 1 0 01-1 1H3a1 1 0 01-1-1V4z"/><path d="M8 7v4M6 9h4"/></svg>
|
|
16
29
|
New folder
|
|
@@ -36,14 +49,19 @@
|
|
|
36
49
|
<div id="fm-tree" class="fm-tree"></div>
|
|
37
50
|
|
|
38
51
|
<div class="fm-storage">
|
|
39
|
-
<div class="fm-storage-label">
|
|
52
|
+
<div class="fm-storage-label d-flex justify-content-between align-items-center">
|
|
53
|
+
<span>Storage Connection</span>
|
|
54
|
+
<button type="button" class="health-check-btn" id="checkHealthBtn" title="Check Connection Health" aria-label="Check Connection Health">
|
|
55
|
+
<svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M1 4v4h4M15 12v-4h-4M13.5 6A6 6 0 003 4.5L1 8M2.5 10a6 6 0 0010.5 1.5L15 8"/></svg>
|
|
56
|
+
</button>
|
|
57
|
+
</div>
|
|
40
58
|
<div class="bucket-switcher-wrap mb-2">
|
|
41
59
|
<div class="bucket-switcher-control">
|
|
42
60
|
<svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" class="bucket-switcher-icon"><path d="M2 4.5C2 3.12 5.13 2 9 2s7 1.12 7 2.5v7c0 1.38-3.13 2.5-7 2.5s-7-1.12-7-2.5v-7z"/><path d="M2 8c0 1.38 3.13 2.5 7 2.5s7-1.12 7-2.5"/></svg>
|
|
43
61
|
<select id="bucketSelector" class="bucket-switcher-select" aria-label="Select connected bucket">
|
|
44
62
|
{{#if bucketOptions.length}}
|
|
45
63
|
{{#each bucketOptions}}
|
|
46
|
-
<option value="{{name}}" {{#if isSelected}}selected{{/if}}>{{name}}{{#if isDefault}} (default){{/if}}</option>
|
|
64
|
+
<option value="{{name}}" data-type="{{type}}" {{#if isSelected}}selected{{/if}}>{{name}} [{{type}}]{{#if isDefault}} (default){{/if}}</option>
|
|
47
65
|
{{/each}}
|
|
48
66
|
{{else}}
|
|
49
67
|
<option value="">No buckets configured</option>
|
|
@@ -55,6 +73,7 @@
|
|
|
55
73
|
<div class="storage-bar"><div id="storageUsageBar" style="width: 100%; background: var(--primary);"></div></div>
|
|
56
74
|
<div class="fm-storage-meta d-flex justify-content-between align-items-center">
|
|
57
75
|
<span id="totalFilesCount">Loading...</span>
|
|
76
|
+
<span id="storageLatency" class="storage-latency-tag"></span>
|
|
58
77
|
</div>
|
|
59
78
|
<div id="filterInfo" class="fm-storage-subinfo"></div>
|
|
60
79
|
</div>
|
|
@@ -104,9 +123,11 @@
|
|
|
104
123
|
|
|
105
124
|
<!-- Empty state -->
|
|
106
125
|
<div id="fm-empty" class="fm-empty" style="display: none;" hidden>
|
|
107
|
-
<
|
|
126
|
+
<div class="empty-icon-wrap">
|
|
127
|
+
<svg width="54" height="54" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M3 7a2 2 0 012-2h4l2 2h7a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V7z"/></svg>
|
|
128
|
+
</div>
|
|
108
129
|
<div class="empty-title">This folder is empty</div>
|
|
109
|
-
<div class="empty-desc">Drag files into the browser or
|
|
130
|
+
<div class="empty-desc">Drag files directly into the browser or click Upload to get started.</div>
|
|
110
131
|
<div class="empty-actions mt-3">
|
|
111
132
|
<button type="button" class="btn btn-outline btn-sm me-2" data-action="create-folder">
|
|
112
133
|
<svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M2 4a1 1 0 011-1h3l2 2h5a1 1 0 011 1v6a1 1 0 01-1 1H3a1 1 0 01-1-1V4z"/><path d="M8 7v4M6 9h4"/></svg>
|
|
@@ -131,8 +152,36 @@
|
|
|
131
152
|
</div>
|
|
132
153
|
</div>
|
|
133
154
|
|
|
155
|
+
<!-- Floating Batch Action Bar -->
|
|
156
|
+
<div id="batchActionBar" class="batch-action-bar" style="display: none;">
|
|
157
|
+
<div class="batch-bar-inner">
|
|
158
|
+
<div class="batch-selection-info">
|
|
159
|
+
<span class="batch-count-badge" id="batchSelectedCount">0</span>
|
|
160
|
+
<span class="batch-count-text">item(s) selected</span>
|
|
161
|
+
</div>
|
|
162
|
+
<div class="batch-actions">
|
|
163
|
+
<button type="button" class="btn btn-sm btn-outline-light" id="batchDownloadBtn">
|
|
164
|
+
<svg width="13" height="13" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M14 11v3H2v-3"/><path d="M5 8l3 3 3-3"/><line x1="8" y1="2" x2="8" y2="11"/></svg>
|
|
165
|
+
Download
|
|
166
|
+
</button>
|
|
167
|
+
<button type="button" class="btn btn-sm btn-outline-light" id="batchMoveBtn">
|
|
168
|
+
<svg width="13" height="13" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M11 2L14 5L11 8M14 5H5C3.34315 5 2 6.34315 2 8V14"/></svg>
|
|
169
|
+
Move
|
|
170
|
+
</button>
|
|
171
|
+
<button type="button" class="btn btn-sm btn-danger" id="batchDeleteBtn">
|
|
172
|
+
<svg width="13" height="13" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M3 4h10M6 4V2h4v2M5 4l1 9h4l1-9"/></svg>
|
|
173
|
+
Delete
|
|
174
|
+
</button>
|
|
175
|
+
<button type="button" class="btn btn-sm btn-link text-white text-decoration-none" id="batchClearBtn">
|
|
176
|
+
Cancel
|
|
177
|
+
</button>
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
|
|
134
182
|
{{> bucketadmin_upload_modal }}
|
|
135
183
|
{{> bucketadmin_newfolder_modal }}
|
|
184
|
+
{{> bucketadmin_move_modal }}
|
|
136
185
|
{{> bucketadmin_delete_modal }}
|
|
137
186
|
{{> bucketadmin_preview_modal }}
|
|
138
187
|
|
package/views/mbkbucket_info.hbs
CHANGED
|
@@ -8,226 +8,128 @@
|
|
|
8
8
|
<!DOCTYPE html>
|
|
9
9
|
<html lang="en">
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
<meta charset="UTF-8">
|
|
13
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
14
|
-
<meta name="description"
|
|
15
|
-
content="Log in to portal.mbktech.org to access your resources and manage projects securely.">
|
|
16
|
-
<meta name="keywords" content="MBK Tech, Web-Portal, Web, Portal, Admin-Panel, Admin, login">
|
|
17
|
-
<meta property="og:title" content="Version and Configuration Information | MBK Tech" />
|
|
18
|
-
<meta property="og:image" content="https://mbktech.org/assets/images/logo.png" />
|
|
19
|
-
<meta property="og:url" content="/mbkbucket/info">
|
|
20
|
-
<title>Version and Configuration Information | MBK Tech Portal</title>
|
|
21
|
-
<link rel="icon" type="image/svg+xml" href="/icon.svg">
|
|
22
|
-
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
|
23
|
-
{{> sharedStyles}}
|
|
24
|
-
<style>
|
|
25
|
-
.info-box {
|
|
26
|
-
background: rgba(10, 20, 20, 0.95);
|
|
27
|
-
backdrop-filter: blur(10px);
|
|
28
|
-
border-radius: var(--border-radius);
|
|
29
|
-
padding: 2.5rem;
|
|
30
|
-
width: 100%;
|
|
31
|
-
max-width: 900px;
|
|
32
|
-
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
|
|
33
|
-
border: 1px solid rgba(0, 184, 148, 0.2);
|
|
34
|
-
position: relative;
|
|
35
|
-
z-index: 2;
|
|
36
|
-
transition: var(--transition);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.info-box:hover {
|
|
40
|
-
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
|
|
41
|
-
border-color: rgba(0, 184, 148, 0.3);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.info-title {
|
|
45
|
-
text-align: center;
|
|
46
|
-
margin-bottom: 2rem;
|
|
47
|
-
font-size: 2rem;
|
|
48
|
-
position: relative;
|
|
49
|
-
color: var(--light);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.info-title::after {
|
|
53
|
-
content: '';
|
|
54
|
-
position: absolute;
|
|
55
|
-
bottom: -10px;
|
|
56
|
-
left: 50%;
|
|
57
|
-
transform: translateX(-50%);
|
|
58
|
-
width: 100px;
|
|
59
|
-
height: 4px;
|
|
60
|
-
background-color: var(--accent);
|
|
61
|
-
border-radius: 2px;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
.info-section {
|
|
65
|
-
margin-bottom: 2rem;
|
|
66
|
-
padding: 1.5rem;
|
|
67
|
-
border: 1px solid rgba(0, 184, 148, 0.2);
|
|
68
|
-
border-radius: var(--border-radius);
|
|
69
|
-
background-color: rgba(0, 0, 0, 0.2);
|
|
70
|
-
transition: var(--transition);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.info-section:hover {
|
|
74
|
-
border-color: rgba(0, 184, 148, 0.4);
|
|
75
|
-
background-color: rgba(0, 0, 0, 0.3);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
.info-section h2 {
|
|
79
|
-
color: var(--accent);
|
|
80
|
-
border-bottom: 2px solid rgba(0, 184, 148, 0.3);
|
|
81
|
-
padding-bottom: 10px;
|
|
82
|
-
margin-top: 0;
|
|
83
|
-
margin-bottom: 1.5rem;
|
|
84
|
-
font-size: 1.4rem;
|
|
85
|
-
display: flex;
|
|
86
|
-
align-items: center;
|
|
87
|
-
gap: 10px;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
.info-section h2 i {
|
|
91
|
-
font-size: 1.2rem;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.info-row {
|
|
95
|
-
display: flex;
|
|
96
|
-
margin-bottom: 1rem;
|
|
97
|
-
padding-bottom: 1rem;
|
|
98
|
-
border-bottom: 1px solid rgba(0, 184, 148, 0.1);
|
|
99
|
-
align-items: center;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
.info-row:last-child {
|
|
103
|
-
border-bottom: none;
|
|
104
|
-
margin-bottom: 0;
|
|
105
|
-
padding-bottom: 0;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
.info-label {
|
|
109
|
-
font-weight: 600;
|
|
110
|
-
color: var(--text-light);
|
|
111
|
-
min-width: 240px;
|
|
112
|
-
font-size: 1rem;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
.info-value {
|
|
116
|
-
flex: 1;
|
|
117
|
-
word-break: break-word;
|
|
118
|
-
color: var(--text);
|
|
119
|
-
font-size: 1rem;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
.version-status {
|
|
123
|
-
display: inline-flex;
|
|
124
|
-
align-items: center;
|
|
125
|
-
gap: 6px;
|
|
126
|
-
padding: 4px 12px;
|
|
127
|
-
border-radius: 20px;
|
|
128
|
-
font-size: 0.85rem;
|
|
129
|
-
font-weight: 600;
|
|
130
|
-
margin-left: 10px;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
.version-up-to-date {
|
|
134
|
-
background: rgba(67, 233, 123, 0.2);
|
|
135
|
-
color: var(--success);
|
|
136
|
-
border: 1px solid var(--success);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
.version-outdated {
|
|
140
|
-
background: rgba(255, 118, 117, 0.2);
|
|
141
|
-
color: var(--danger);
|
|
142
|
-
border: 1px solid var(--danger);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
.version-fetch-error {
|
|
146
|
-
background: rgba(255, 209, 102, 0.2);
|
|
147
|
-
color: var(--warning);
|
|
148
|
-
border: 1px solid var(--warning);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
@media (max-width: 768px) {
|
|
152
|
-
.info-box {
|
|
153
|
-
padding: 2rem;
|
|
154
|
-
max-width: 100%;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
.info-title {
|
|
158
|
-
font-size: 1.8rem;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
.info-row {
|
|
162
|
-
flex-direction: column;
|
|
163
|
-
align-items: flex-start;
|
|
164
|
-
gap: 0.5rem;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
.info-label {
|
|
168
|
-
min-width: unset;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
.info-section h2 {
|
|
172
|
-
font-size: 1.2rem;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
@media (max-width: 576px) {
|
|
177
|
-
.info-box {
|
|
178
|
-
padding: 1.5rem;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
.info-section {
|
|
182
|
-
padding: 1rem;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
</style>
|
|
186
|
-
</head>
|
|
11
|
+
{{> head pageTitle="System Information" ogUrl="/mbkbucket/info"}}
|
|
187
12
|
|
|
188
13
|
<body>
|
|
189
|
-
|
|
190
|
-
<div class="header-container">
|
|
191
|
-
<a class="logo">
|
|
192
|
-
<img src="/icon.svg" alt="Logo" class="logo-image" />
|
|
193
|
-
<span class="logo-text">BK <span>Tech</span></span>
|
|
194
|
-
<span class="logo-comp">{{#if APP_NAME}}{{APP_NAME}}{{else}}mbkbucket{{/if}}
|
|
195
|
-
</a>
|
|
14
|
+
{{> header appName=APP_NAME customURL="/mbkbucket"}}
|
|
196
15
|
|
|
197
|
-
{{> profilemenu}}
|
|
198
|
-
</div>
|
|
199
|
-
</header>
|
|
200
16
|
<section class="login-container">
|
|
201
|
-
|
|
202
|
-
<i class="fas fa-cogs ai-element"></i>
|
|
203
|
-
<i class="fas fa-server ai-element"></i>
|
|
204
|
-
<i class="fas fa-code-branch ai-element"></i>
|
|
205
|
-
|
|
206
|
-
<div class="info-box">
|
|
207
|
-
<h1 class="info-title">System Information</h1>
|
|
17
|
+
{{> backgroundElements}}
|
|
208
18
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
<div class="
|
|
212
|
-
<
|
|
213
|
-
<div class="info-value" id="CurrentVersion">{{CurrentVersion}}</div>
|
|
19
|
+
<div class="auth-card info-box">
|
|
20
|
+
<div class="info-header">
|
|
21
|
+
<div class="auth-icon-badge" aria-hidden="true">
|
|
22
|
+
<i class="fas fa-database"></i>
|
|
214
23
|
</div>
|
|
24
|
+
<div>
|
|
25
|
+
<h1 class="login-title">Storage Diagnostic</h1>
|
|
26
|
+
<p class="login-subtitle">Runtime storage parameters, active bucket configurations, and version status.</p>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
215
29
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
<
|
|
222
|
-
|
|
223
|
-
|
|
30
|
+
<!-- Quick Metrics Grid -->
|
|
31
|
+
<div class="info-stats-grid">
|
|
32
|
+
<div class="stat-card">
|
|
33
|
+
<div class="stat-card-header">
|
|
34
|
+
<span class="stat-label">MBKBucket Core</span>
|
|
35
|
+
<div class="stat-icon-wrap"><i class="fas fa-code-branch"></i></div>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="stat-value">v<span id="CurrentVersion">{{CurrentVersion}}</span></div>
|
|
38
|
+
<div class="stat-badge-row">
|
|
39
|
+
{{#if latestVersion}}
|
|
40
|
+
{{#if (eq latestVersion CurrentVersion)}}
|
|
41
|
+
<span class="badge badge-success"><i class="fas fa-check-circle"></i> Up to date</span>
|
|
42
|
+
{{else}}
|
|
43
|
+
<span class="badge badge-warning"><i class="fas fa-arrow-up"></i> Update: v{{latestVersion}}</span>
|
|
44
|
+
{{/if}}
|
|
45
|
+
{{else}}
|
|
46
|
+
<span class="badge badge-neutral">v{{CurrentVersion}}</span>
|
|
224
47
|
{{/if}}
|
|
225
48
|
</div>
|
|
226
49
|
</div>
|
|
50
|
+
|
|
51
|
+
<div class="stat-card">
|
|
52
|
+
<div class="stat-card-header">
|
|
53
|
+
<span class="stat-label">Host Application</span>
|
|
54
|
+
<div class="stat-icon-wrap"><i class="fas fa-cubes"></i></div>
|
|
55
|
+
</div>
|
|
56
|
+
<div class="stat-value">{{#if APP_NAME}}{{APP_NAME}}{{else}}mbkbucket{{/if}}</div>
|
|
57
|
+
<div class="stat-sub-text">Release <code>v{{#if APP_VERSION}}{{APP_VERSION}}{{else}}{{CurrentVersion}}{{/if}}</code></div>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<div class="stat-card">
|
|
61
|
+
<div class="stat-card-header">
|
|
62
|
+
<span class="stat-label">Storage Engine</span>
|
|
63
|
+
<div class="stat-icon-wrap"><i class="fas fa-server"></i></div>
|
|
64
|
+
</div>
|
|
65
|
+
<div class="stat-value">
|
|
66
|
+
<span class="badge badge-success"><i class="fas fa-circle-dot"></i> {{#if providerType}}{{providerType}}{{else}}S3/R2{{/if}}</span>
|
|
67
|
+
</div>
|
|
68
|
+
<div class="stat-sub-text">{{#if defaultBucket}}Bucket: <code>{{defaultBucket}}</code>{{else}}Active Storage Engine{{/if}}</div>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<!-- Configuration Parameters -->
|
|
73
|
+
<div class="info-section">
|
|
74
|
+
<div class="info-section-header">
|
|
75
|
+
<h2><i class="fas fa-sliders"></i> Configuration Manifest</h2>
|
|
76
|
+
<span class="badge badge-neutral">Read-only</span>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<div class="info-table-wrap">
|
|
80
|
+
<table class="info-table">
|
|
81
|
+
<tbody>
|
|
82
|
+
<tr>
|
|
83
|
+
<td class="prop-label"><i class="fas fa-tag"></i> APP_NAME</td>
|
|
84
|
+
<td class="prop-val"><code>{{#if APP_NAME}}{{APP_NAME}}{{else}}mbkbucket{{/if}}</code></td>
|
|
85
|
+
</tr>
|
|
86
|
+
<tr>
|
|
87
|
+
<td class="prop-label"><i class="fas fa-code-commit"></i> Current Version</td>
|
|
88
|
+
<td class="prop-val"><code>{{CurrentVersion}}</code></td>
|
|
89
|
+
</tr>
|
|
90
|
+
<tr>
|
|
91
|
+
<td class="prop-label"><i class="fas fa-database"></i> Default Bucket</td>
|
|
92
|
+
<td class="prop-val"><code>{{#if defaultBucket}}{{defaultBucket}}{{else}}default{{/if}}</code></td>
|
|
93
|
+
</tr>
|
|
94
|
+
<tr>
|
|
95
|
+
<td class="prop-label"><i class="fas fa-layer-group"></i> Configured Buckets</td>
|
|
96
|
+
<td class="prop-val"><span class="badge badge-neutral">{{#if configuredBucketsCount}}{{configuredBucketsCount}}{{else}}1{{/if}} bucket(s)</span></td>
|
|
97
|
+
</tr>
|
|
98
|
+
<tr>
|
|
99
|
+
<td class="prop-label"><i class="fas fa-eye"></i> Public View Enabled</td>
|
|
100
|
+
<td class="prop-val">
|
|
101
|
+
{{#if (eq mbkbucketVar.publiView_enabled "true")}}
|
|
102
|
+
<span class="badge badge-success">true</span>
|
|
103
|
+
{{else}}
|
|
104
|
+
<span class="badge badge-neutral">{{#if mbkbucketVar.publiView_enabled}}{{mbkbucketVar.publiView_enabled}}{{else}}false{{/if}}</span>
|
|
105
|
+
{{/if}}
|
|
106
|
+
</td>
|
|
107
|
+
</tr>
|
|
108
|
+
<tr>
|
|
109
|
+
<td class="prop-label"><i class="fas fa-file-invoice"></i> Inline View</td>
|
|
110
|
+
<td class="prop-val">
|
|
111
|
+
{{#if (eq mbkbucketVar.p_view_inline "true")}}
|
|
112
|
+
<span class="badge badge-success">true</span>
|
|
113
|
+
{{else}}
|
|
114
|
+
<span class="badge badge-neutral">{{#if mbkbucketVar.p_view_inline}}{{mbkbucketVar.p_view_inline}}{{else}}false{{/if}}</span>
|
|
115
|
+
{{/if}}
|
|
116
|
+
</td>
|
|
117
|
+
</tr>
|
|
118
|
+
</tbody>
|
|
119
|
+
</table>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<!-- Navigation Links -->
|
|
124
|
+
<div class="info-action-grid">
|
|
125
|
+
<a class="btn-outline" href="/mbkbucket"><i class="fas fa-folder-open"></i> File Dashboard</a>
|
|
126
|
+
<a class="btn-outline" href="/mbkbucket/helper-demo"><i class="fas fa-vial"></i> Helper Demo</a>
|
|
127
|
+
<a class="btn-outline" href="/mbkbucket/i.json"><i class="fas fa-code"></i> JSON Diagnostics</a>
|
|
128
|
+
<a class="btn-outline" href="https://github.com/MIbnEKhalid/mbkbucket" target="_blank" rel="noopener noreferrer"><i class="fab fa-github"></i> Repository</a>
|
|
227
129
|
</div>
|
|
228
130
|
</div>
|
|
229
131
|
</section>
|
|
230
132
|
|
|
133
|
+
{{> versionInfo}}
|
|
231
134
|
</body>
|
|
232
|
-
|
|
233
135
|
</html>
|