/* * Guacamole - Clientless Remote Desktop * Copyright (C) 2010 Michael Jumper * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ /** * General set of UI elements and UI-related functions regarding user login and * connection management. */ var GuacamoleRootUI = { "sections": { "login_form" : document.getElementById("login-form"), "recent_connections" : document.getElementById("recent-connections"), "all_connections" : document.getElementById("all-connections") }, "messages": { "login_error" : document.getElementById("login-error"), "no_recent_connections" : document.getElementById("no-recent") }, "fields": { "username" : document.getElementById("username"), "password" : document.getElementById("password"), "clipboard" : document.getElementById("clipboard") }, "buttons": { "login" : document.getElementById("login"), "logout" : document.getElementById("logout") }, "settings": { "auto_fit" : document.getElementById("auto-fit"), "disable_sound" : document.getElementById("disable-sound") }, "views": { "login" : document.getElementById("login-ui"), "connections" : document.getElementById("connection-list-ui") }, "session_state" : new GuacamoleSessionState() }; /** * Attempts to login the given user using the given password, throwing an * error if the process fails. * * @param {String} username The name of the user to login as. * @param {String} password The password to use to authenticate the user. */ GuacamoleRootUI.login = function(username, password) { // Get parameters from query string var parameters = window.location.search.substring(1); // Get username and password from form var data = "username=" + encodeURIComponent(username) + "&password=" + encodeURIComponent(password) // Include query parameters in submission data if (parameters) data += "&" + parameters; // Log in var xhr = new XMLHttpRequest(); xhr.open("POST", "login", false); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send(data); // Handle failures if (xhr.status != 200) throw new Error("Invalid login"); }; /** * An arbitrary Guacamole configuration, consisting of an ID/protocol pair. * * @constructor * @param {String} protocol The protocol used by this configuration. * @param {String} id The ID associated with this configuration. */ GuacamoleRootUI.Configuration = function(protocol, id) { /** * The protocol associated with this configuration. */ this.protocol = protocol; /** * The ID associated with this configuration. */ this.id = id; }; GuacamoleRootUI.getConfigurations = function(parameters) { // Construct request URL var configs_url = "configs"; if (parameters) configs_url += "?" + parameters; // Get config list var xhr = new XMLHttpRequest(); xhr.open("GET", configs_url, false); xhr.send(null); // If fail, throw error if (xhr.status != 200) throw new Error(xhr.statusText); // Otherwise, get list var configs = new Array(); var configElements = xhr.responseXML.getElementsByTagName("config"); for (var i=0; i