Initial commit — Alta Proxy Tool (APT)
Electron desktop app for Avigilon Alta Video camera proxy management. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+172
@@ -0,0 +1,172 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;">
|
||||
<title>Alta Video Camera Proxy with API</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="app-container">
|
||||
<!-- Main Content Layout -->
|
||||
<div class="main-layout">
|
||||
<!-- Left Sidebar - Available Devices -->
|
||||
<aside class="devices-sidebar">
|
||||
<div class="sidebar-header">
|
||||
<h2>Available Devices</h2>
|
||||
</div>
|
||||
|
||||
<div id="deviceStatus" class="status-message"></div>
|
||||
|
||||
<!-- Device Search -->
|
||||
<div class="device-search-container">
|
||||
<input type="text" id="deviceSearch" placeholder="Search devices..." class="device-search-input">
|
||||
</div>
|
||||
|
||||
<div class="device-list-container">
|
||||
<div id="deviceList" class="device-list">
|
||||
<p class="placeholder-text">Connect to API to load devices</p>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<!-- Main Content Area -->
|
||||
<main class="main-content">
|
||||
<div class="content-header">
|
||||
<h1>Alta Video Camera Proxy</h1>
|
||||
</div>
|
||||
|
||||
<!-- User Profiles Section -->
|
||||
<section class="content-section profile-section">
|
||||
<h2>User Profiles</h2>
|
||||
<div class="profile-controls">
|
||||
<div class="profile-row">
|
||||
<label for="profileSelect">Select Profile:</label>
|
||||
<select id="profileSelect">
|
||||
<option value="">Select a profile...</option>
|
||||
</select>
|
||||
<button type="button" id="addProfileBtn" class="btn-primary">Add User</button>
|
||||
<button type="button" id="manageProfilesBtn" class="btn-success">Manage Users</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- API Connection Section -->
|
||||
<section class="content-section">
|
||||
<h2>API Connection</h2>
|
||||
<div class="connection-status">
|
||||
<div class="status-row">
|
||||
<label>Status:</label>
|
||||
<div class="status-indicator" id="statusIndicator">
|
||||
<span class="status-dot offline"></span>
|
||||
<span class="status-text">Disconnected</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="connection-controls">
|
||||
<button type="button" id="connectBtn" class="btn-primary" disabled>Connect to API</button>
|
||||
<button type="button" id="testConnectionBtn" class="btn-outline" disabled>Test Connection</button>
|
||||
<button type="button" id="disconnectBtn" class="btn-outline" disabled>Disconnect</button>
|
||||
</div>
|
||||
<div id="connectionStatus" class="status-message"></div>
|
||||
</section>
|
||||
|
||||
<!-- Camera Proxy Section -->
|
||||
<section class="content-section">
|
||||
<h2>Camera Proxy (Username/Password Method)</h2>
|
||||
<div class="proxy-controls">
|
||||
<div class="input-row">
|
||||
<label for="deviceUUID">Device UUID:</label>
|
||||
<input type="text" id="deviceUUID" placeholder="(Auto-filled when you select a device from the list)" readonly>
|
||||
</div>
|
||||
<div class="proxy-buttons">
|
||||
<button type="button" id="startProxyBtn" class="btn-primary" disabled>Start Camera Proxy</button>
|
||||
<button type="button" id="checkVersionBtn" class="btn-outline" disabled>Check Version</button>
|
||||
<button type="button" id="stopProxyBtn" class="btn-outline" disabled>Stop Proxy</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Cookie-Based Camera Proxy Section (Collapsible) -->
|
||||
<section class="content-section">
|
||||
<div class="collapsible-header" id="cookieSectionHeader">
|
||||
<h2>Camera Proxy (Cookie Method)</h2>
|
||||
<span class="collapse-icon" id="cookieCollapseIcon">▼</span>
|
||||
</div>
|
||||
<div class="proxy-controls collapsible-content" id="cookieProxyContent" style="display: none;">
|
||||
<div class="input-row">
|
||||
<label for="cookieDeviceUUID">Device UUID:</label>
|
||||
<input type="text" id="cookieDeviceUUID" placeholder="(Auto-filled when you select a device from the list)" readonly>
|
||||
</div>
|
||||
<div class="input-row">
|
||||
<label for="cookieKey">Cookie Key:</label>
|
||||
<input type="text" id="cookieKey" placeholder="Paste your cookie key here">
|
||||
</div>
|
||||
<div class="proxy-buttons">
|
||||
<button type="button" id="startCookieProxyBtn" class="btn-primary" disabled>Start Cookie Proxy</button>
|
||||
<button type="button" id="stopCookieProxyBtn" class="btn-outline" disabled>Stop Cookie Proxy</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Hidden elements for device details display -->
|
||||
<div style="display: none;">
|
||||
<div id="deviceDetails"></div>
|
||||
<div id="mainContent"></div>
|
||||
</div>
|
||||
|
||||
<!-- Add Profile Modal -->
|
||||
<div id="addProfileModal" class="modal">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h3>Add Connection Profile</h3>
|
||||
<span class="close" id="closeAddProfile">×</span>
|
||||
</div>
|
||||
<form id="addProfileForm">
|
||||
<div class="form-group">
|
||||
<label for="profileName">Profile Name:</label>
|
||||
<input type="text" id="profileName" placeholder="Enter profile name" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="profileUrl">Deployment URL:</label>
|
||||
<input type="url" id="profileUrl" placeholder="https://your-deployment.eu1.aware.avasecurity.com" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="profileUsername">Username:</label>
|
||||
<input type="text" id="profileUsername" placeholder="Enter username" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="profilePassword">Password:</label>
|
||||
<input type="password" id="profilePassword" placeholder="Enter password" required>
|
||||
</div>
|
||||
<div class="modal-buttons">
|
||||
<button type="submit" class="modal-btn primary">Save Profile</button>
|
||||
<button type="button" class="modal-btn secondary" id="cancelAddProfile">Cancel</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Manage Profiles Modal -->
|
||||
<div id="manageProfilesModal" class="modal">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h3>Manage Connection Profiles</h3>
|
||||
<span class="close" id="closeManageProfiles">×</span>
|
||||
</div>
|
||||
<div class="profiles-list" id="profilesList">
|
||||
<!-- Profiles will be populated here -->
|
||||
</div>
|
||||
<div class="modal-buttons">
|
||||
<button type="button" class="modal-btn secondary" id="closeManageProfilesBtn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="renderer.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user