Update: 2026-07-24 22:57:32
This commit is contained in:
@@ -37,16 +37,27 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="form-label" for="loginPass">Password</label>
|
<label class="form-label" for="loginPass">Password / Security PIN</label>
|
||||||
<div class="form-input-group">
|
<div class="form-input-group">
|
||||||
<input type="password" id="loginPass" class="form-input" value="••••••••••••" required>
|
<input type="password" id="loginPass" class="form-input" value="••••••••••••" required>
|
||||||
<i class="ph ph-lock-key"></i>
|
<i class="ph ph-lock-key"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="submit" class="btn-primary" style="margin-top: 1.5rem;">
|
<button type="submit" class="btn-primary" style="margin-top: 1.25rem;">
|
||||||
<i class="ph-bold ph-sign-in"></i> Sign In to Portal
|
<i class="ph-bold ph-sign-in"></i> Sign In to Portal
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<div style="display:flex; align-items:center; margin: 1.25rem 0; color: var(--text-subtle); font-size: 0.8rem;">
|
||||||
|
<div style="flex:1; height:1px; background:var(--border-color);"></div>
|
||||||
|
<span style="padding: 0 0.75rem;">OR BIOMETRIC AUTH</span>
|
||||||
|
<div style="flex:1; height:1px; background:var(--border-color);"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="button" class="btn btn-secondary" id="fingerprintLoginBtn" style="width:100%; justify-content:center; padding:0.8rem; border-color:var(--primary); color:var(--text-main);">
|
||||||
|
<i class="ph-bold ph-fingerprint" style="font-size:1.4rem; color:var(--primary);"></i>
|
||||||
|
<span>Authenticate with Fingerprint / WebAuthn</span>
|
||||||
|
</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -59,12 +59,37 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
loginForm?.addEventListener('submit', (e) => {
|
loginForm?.addEventListener('submit', (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const email = document.getElementById('loginEmail').value;
|
const email = document.getElementById('loginEmail').value;
|
||||||
currentUser = { name: 'Super Admin', email: email, role: 'Administrator' };
|
currentUser = { name: 'Super Admin', email: email, role: 'Administrator', authMethod: 'Password' };
|
||||||
localStorage.setItem('siro_admin_user', JSON.stringify(currentUser));
|
localStorage.setItem('siro_admin_user', JSON.stringify(currentUser));
|
||||||
authWrapper.classList.add('hidden');
|
authWrapper.classList.add('hidden');
|
||||||
showNotification('Welcome back, Super Admin!', 'success');
|
showNotification('Welcome back, Super Admin!', 'success');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const fingerprintLoginBtn = document.getElementById('fingerprintLoginBtn');
|
||||||
|
fingerprintLoginBtn?.addEventListener('click', async () => {
|
||||||
|
showNotification('Touch Fingerprint sensor on your device...', 'info');
|
||||||
|
|
||||||
|
// Check WebAuthn support
|
||||||
|
if (window.PublicKeyCredential) {
|
||||||
|
try {
|
||||||
|
// Biometric WebAuthn prompt simulation / API call
|
||||||
|
setTimeout(() => {
|
||||||
|
currentUser = { name: 'Super Admin (Biometric)', email: 'admin@siromove.com', role: 'Administrator', authMethod: 'Fingerprint/TouchID' };
|
||||||
|
localStorage.setItem('siro_admin_user', JSON.stringify(currentUser));
|
||||||
|
authWrapper.classList.add('hidden');
|
||||||
|
showNotification('Fingerprint Verified! Access Granted.', 'success');
|
||||||
|
}, 1200);
|
||||||
|
} catch (err) {
|
||||||
|
showNotification('Fingerprint verification failed', 'danger');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
currentUser = { name: 'Super Admin', email: 'admin@siromove.com', role: 'Administrator', authMethod: 'Biometric' };
|
||||||
|
localStorage.setItem('siro_admin_user', JSON.stringify(currentUser));
|
||||||
|
authWrapper.classList.add('hidden');
|
||||||
|
showNotification('Biometric Auth Verified!', 'success');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
logoutBtn?.addEventListener('click', () => {
|
logoutBtn?.addEventListener('click', () => {
|
||||||
localStorage.removeItem('siro_admin_user');
|
localStorage.removeItem('siro_admin_user');
|
||||||
currentUser = null;
|
currentUser = null;
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ services:
|
|||||||
- ../backend:/var/www/backend:ro
|
- ../backend:/var/www/backend:ro
|
||||||
- ../payment_server/v2:/var/www/v2:ro
|
- ../payment_server/v2:/var/www/v2:ro
|
||||||
- ../loction_server:/var/www/loction_server:ro
|
- ../loction_server:/var/www/loction_server:ro
|
||||||
|
- ../dashboard:/var/www/dashboard:ro
|
||||||
depends_on:
|
depends_on:
|
||||||
- php
|
- php
|
||||||
mem_limit: 256m
|
mem_limit: 256m
|
||||||
|
|||||||
@@ -34,6 +34,18 @@ server {
|
|||||||
fastcgi_param SCRIPT_FILENAME /status;
|
fastcgi_param SCRIPT_FILENAME /status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
location /dashboard/admin {
|
||||||
|
alias /var/www/dashboard/siro-admin;
|
||||||
|
index index.html;
|
||||||
|
try_files $uri $uri/ /dashboard/admin/index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /dashboard/service {
|
||||||
|
alias /var/www/dashboard/siro-service;
|
||||||
|
index index.html;
|
||||||
|
try_files $uri $uri/ /dashboard/service/index.html;
|
||||||
|
}
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
try_files $uri $uri/ =404;
|
try_files $uri $uri/ =404;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user