Simplification Web-Gateway
This commit is contained in:
@@ -5,7 +5,7 @@ class RDPWebGateway {
|
||||
this.ctx = null;
|
||||
this.currentUser = null;
|
||||
this.currentTarget = null;
|
||||
this.sessionId = null;
|
||||
this.credentials = null;
|
||||
|
||||
this.init();
|
||||
}
|
||||
@@ -63,27 +63,24 @@ class RDPWebGateway {
|
||||
errorMessage.style.display = 'none';
|
||||
|
||||
try {
|
||||
const response = await fetch('/api/auth/login', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({ username, password }),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (response.ok) {
|
||||
this.currentUser = username;
|
||||
this.sessionId = data.sessionId;
|
||||
await this.loadTargets();
|
||||
this.showTargetsView();
|
||||
} else {
|
||||
this.showError(errorMessage, data.error || 'Authentication failed');
|
||||
// Check if RdpBroker service is available
|
||||
const statusResponse = await fetch('/api/broker-status');
|
||||
const statusData = await statusResponse.json();
|
||||
|
||||
if (!statusData.available) {
|
||||
this.showError(errorMessage, 'RDP service is currently unavailable. Please contact your administrator.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Store credentials temporarily - will be sent to RdpBroker
|
||||
this.currentUser = username;
|
||||
this.credentials = { username, password };
|
||||
|
||||
// Load targets and show targets view
|
||||
await this.loadTargets();
|
||||
} catch (error) {
|
||||
console.error('Login error:', error);
|
||||
this.showError(errorMessage, 'Connection error. Please try again.');
|
||||
this.showError(errorMessage, 'Connection error. Please check your network and try again.');
|
||||
} finally {
|
||||
loginBtn.disabled = false;
|
||||
btnText.style.display = 'block';
|
||||
@@ -93,25 +90,45 @@ class RDPWebGateway {
|
||||
|
||||
async loadTargets() {
|
||||
try {
|
||||
const response = await fetch('/api/targets', {
|
||||
headers: {
|
||||
'X-Session-ID': this.sessionId,
|
||||
},
|
||||
});
|
||||
|
||||
const response = await fetch('/api/targets');
|
||||
|
||||
if (!response.ok) {
|
||||
if (response.status === 503) {
|
||||
const error = await response.json();
|
||||
throw new Error(error.error || 'Service unavailable');
|
||||
}
|
||||
throw new Error('Failed to load targets');
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
this.displayTargets(data.targets);
|
||||
this.showTargetsView(data.targets);
|
||||
} catch (error) {
|
||||
console.error('Load targets error:', error);
|
||||
const targetsError = document.getElementById('targetsError');
|
||||
this.showError(targetsError, 'Failed to load available desktops');
|
||||
console.error('Error loading targets:', error);
|
||||
// Show error in targets view
|
||||
this.showTargetsView(null, error.message);
|
||||
}
|
||||
}
|
||||
|
||||
showTargetsView(targets = null, errorMsg = null) {
|
||||
document.getElementById('loginCard').style.display = 'none';
|
||||
document.getElementById('targetsCard').style.display = 'block';
|
||||
document.getElementById('rdpViewer').style.display = 'none';
|
||||
document.getElementById('currentUser').textContent = this.currentUser;
|
||||
|
||||
if (errorMsg) {
|
||||
const targetsList = document.getElementById('targetsList');
|
||||
targetsList.innerHTML = `
|
||||
<div style="text-align: center; padding: 20px;">
|
||||
<p style="color: var(--error-color); margin-bottom: 10px;">⚠️ ${this.escapeHtml(errorMsg)}</p>
|
||||
<button onclick="location.reload()" class="btn btn-secondary">Retry</button>
|
||||
</div>
|
||||
`;
|
||||
return;
|
||||
}
|
||||
|
||||
this.displayTargets(targets);
|
||||
}
|
||||
|
||||
displayTargets(targets) {
|
||||
const targetsList = document.getElementById('targetsList');
|
||||
targetsList.innerHTML = '';
|
||||
@@ -153,10 +170,11 @@ class RDPWebGateway {
|
||||
|
||||
this.ws.onopen = () => {
|
||||
console.log('WebSocket connected');
|
||||
// Send connection request
|
||||
// Send credentials and connection request to RdpBroker
|
||||
this.ws.send(JSON.stringify({
|
||||
type: 'connect',
|
||||
sessionId: this.sessionId,
|
||||
username: this.credentials.username,
|
||||
password: this.credentials.password,
|
||||
target: target,
|
||||
}));
|
||||
};
|
||||
@@ -324,7 +342,7 @@ class RDPWebGateway {
|
||||
}
|
||||
this.currentUser = null;
|
||||
this.currentTarget = null;
|
||||
this.sessionId = null;
|
||||
this.credentials = null;
|
||||
this.showLoginView();
|
||||
}
|
||||
|
||||
@@ -336,13 +354,6 @@ class RDPWebGateway {
|
||||
document.getElementById('password').value = '';
|
||||
}
|
||||
|
||||
showTargetsView() {
|
||||
document.getElementById('loginCard').style.display = 'none';
|
||||
document.getElementById('targetsCard').style.display = 'block';
|
||||
document.getElementById('rdpViewer').style.display = 'none';
|
||||
document.getElementById('currentUser').textContent = this.currentUser;
|
||||
}
|
||||
|
||||
showRDPViewer() {
|
||||
document.getElementById('loginCard').style.display = 'none';
|
||||
document.getElementById('targetsCard').style.display = 'none';
|
||||
|
||||
Reference in New Issue
Block a user