// VaultSentinel - Account Management Application
// Main JavaScript functionality
class AccountManager {
constructor() {
this.accounts = this.loadFromStorage('accounts') || [];
this.applications = this.loadFromStorage('applications') || [
{ id: 1, name: 'AWS', type: 'Cloud', status: 'online', icon: 'cloud' },
{ id: 2, name: 'GitHub', type: 'VCS', status: 'online', icon: 'code' },
{ id: 3, name: 'Google Workspace', type: 'Collaboration', status: 'online', icon: 'mail' },
{ id: 4, name: 'Nginx Proxy', type: 'Infra', status: 'offline', icon: 'dns' },
];
this.currentPage = 'dashboard';
this.init();
}
init() {
this.setupEventListeners();
// Render dashboard content
const mainContent = document.getElementById('mainContent');
if (mainContent) {
mainContent.innerHTML = this.renderDashboard();
}
}
setupEventListeners() {
// Account modal
const addAccountBtn = document.getElementById('addAccountBtn');
if (addAccountBtn) {
addAccountBtn.addEventListener('click', () => this.openAccountModal());
}
// Application modal
const addAppBtn = document.getElementById('addAppBtn');
if (addAppBtn) {
addAppBtn.addEventListener('click', () => this.openAppModal());
}
// Modal close buttons
document.querySelectorAll('[data-close-modal]').forEach(btn => {
btn.addEventListener('click', () => this.closeModals());
});
// Form submissions
const accountForm = document.getElementById('accountForm');
if (accountForm) {
accountForm.addEventListener('submit', (e) => this.handleAccountSubmit(e));
}
const appForm = document.getElementById('appForm');
if (appForm) {
appForm.addEventListener('submit', (e) => this.handleAppSubmit(e));
}
// Account table row clicks
this.setupAccountRowListeners();
}
renderDashboard() {
return `
Account & Service Management
Applications
${this.applications.length}
${this.applications.filter(a => a.status === 'online').length} Active
Total Accounts
${this.accounts.length}
Managed
Last Updated
${new Date().toLocaleDateString()}
Status
Operational
check_circle
history
Recent Accounts
${this.accounts.length > 0 ? `
${this.accounts.slice(-5).reverse().map(acc => `
${acc.username}
${acc.service} • ${acc.owner}
`).join('')}
` : `
No accounts yet. Create one
`}
`;
}
getAccountsContent() {
return `
Administrative Access Control
Service
${this.accounts.length > 0 ? `
| Owner |
Username |
Service |
Actions |
${this.accounts.map((acc, idx) => `
| ${acc.owner} |
${acc.username} |
${acc.service}
|
|
`).join('')}
` : `
No accounts yet. Create one to get started.
`}
`;
}
getApplicationsContent() {
return `
Manage and monitor active infrastructure services.
lan
Active
${this.applications.filter(a => a.status === 'online').length}
bolt
Total
${this.applications.length}
| Name |
Type |
Status |
Actions |
${this.applications.map((app, idx) => `
|
|
${app.type}
|
${app.status === 'online' ? 'Online' : 'Offline'}
|
|
`).join('')}
`;
}
setupAccountRowListeners() {
document.querySelectorAll('.delete-account').forEach(btn => {
btn.addEventListener('click', (e) => {
const accountId = btn.dataset.accountId;
if (confirm('Delete this account?')) {
this.accounts.splice(accountId, 1);
this.saveToStorage('accounts', this.accounts);
location.href = 'accounts.html';
}
});
});
document.querySelectorAll('.edit-account').forEach(btn => {
btn.addEventListener('click', (e) => {
const accountId = btn.dataset.accountId;
const account = this.accounts[accountId];
// Populate form with existing data
document.getElementById('accountUsername').value = account.username;
document.getElementById('accountPassword').value = account.password;
document.getElementById('accountOwner').value = account.owner;
document.getElementById('accountService').value = account.service;
this.editingAccountId = accountId;
this.openAccountModal();
});
});
document.querySelectorAll('.delete-app').forEach(btn => {
btn.addEventListener('click', (e) => {
const appId = btn.dataset.appId;
if (confirm('Delete this application?')) {
this.applications.splice(appId, 1);
this.saveToStorage('applications', this.applications);
location.href = 'applications.html';
}
});
});
document.querySelectorAll('.edit-app').forEach(btn => {
btn.addEventListener('click', (e) => {
const appId = btn.dataset.appId;
const app = this.applications[appId];
document.getElementById('appName').value = app.name;
document.getElementById('appType').value = app.type;
document.getElementById('appStatus').value = app.status;
this.editingAppId = appId;
this.openAppModal();
});
});
}
handleAccountSubmit(e) {
e.preventDefault();
const newAccount = {
service: document.getElementById('accountService').value,
owner: document.getElementById('accountOwner').value,
username: document.getElementById('accountUsername').value,
password: document.getElementById('accountPassword').value,
dateCreated: new Date().toLocaleDateString()
};
if (this.editingAccountId !== undefined) {
this.accounts[this.editingAccountId] = newAccount;
this.editingAccountId = undefined;
} else {
this.accounts.push(newAccount);
}
this.saveToStorage('accounts', this.accounts);
this.closeModals();
location.href = 'accounts.html';
}
handleAppSubmit(e) {
e.preventDefault();
const newApp = {
name: document.getElementById('appName').value,
type: document.getElementById('appType').value,
status: document.getElementById('appStatus').value,
icon: 'cloud'
};
if (this.editingAppId !== undefined) {
this.applications[this.editingAppId] = newApp;
this.editingAppId = undefined;
} else {
this.applications.push(newApp);
}
this.saveToStorage('applications', this.applications);
this.closeModals();
location.href = 'applications.html';
}
openAccountModal() {
this.editingAccountId = undefined;
document.getElementById('accountService').value = '';
document.getElementById('accountOwner').value = '';
document.getElementById('accountUsername').value = '';
document.getElementById('accountPassword').value = '';
document.getElementById('accountModal').classList.remove('hidden');
}
openAppModal() {
this.editingAppId = undefined;
document.getElementById('appName').value = '';
document.getElementById('appType').value = '';
document.getElementById('appStatus').value = 'online';
document.getElementById('appModal').classList.remove('hidden');
}
closeModals() {
document.querySelectorAll('.modal-backdrop').forEach(modal => {
modal.classList.add('hidden');
});
}
loadFromStorage(key) {
const data = localStorage.getItem(key);
return data ? JSON.parse(data) : null;
}
saveToStorage(key, data) {
localStorage.setItem(key, JSON.stringify(data));
}
}
// Initialize app when DOM is ready
let app;
document.addEventListener('DOMContentLoaded', () => {
app = new AccountManager();
});