Switch to URL for connect()
This is more in line with how other JavaScript APIs work.
This commit is contained in:
parent
3a0010a3d0
commit
5b4e5d016e
15
app/ui.js
15
app/ui.js
|
@ -432,7 +432,7 @@ var UI = {
|
|||
UI.inhibit_reconnect = false;
|
||||
UI.doneInitialResize = false;
|
||||
document.documentElement.classList.add("noVNC_connected");
|
||||
if (rfb && rfb.get_encrypt()) {
|
||||
if (UI.getSetting('encrypt')) {
|
||||
msg = _("Connected (encrypted) to ") + UI.desktopName;
|
||||
} else {
|
||||
msg = _("Connected (unencrypted) to ") + UI.desktopName;
|
||||
|
@ -1062,14 +1062,23 @@ var UI = {
|
|||
UI.closeAllPanels();
|
||||
UI.closeConnectPanel();
|
||||
|
||||
UI.rfb.set_encrypt(UI.getSetting('encrypt'));
|
||||
UI.rfb.set_shared(UI.getSetting('shared'));
|
||||
UI.rfb.set_repeaterID(UI.getSetting('repeaterID'));
|
||||
|
||||
UI.updateLocalCursor();
|
||||
UI.updateViewOnly();
|
||||
|
||||
UI.rfb.connect(host, port, { password: password }, path);
|
||||
var url;
|
||||
|
||||
url = UI.getSetting('encrypt') ? 'wss' : 'ws';
|
||||
|
||||
url += '://' + host;
|
||||
if(port) {
|
||||
url += ':' + port;
|
||||
}
|
||||
url += '/' + path;
|
||||
|
||||
UI.rfb.connect(url, { password: password });
|
||||
},
|
||||
|
||||
disconnect: function() {
|
||||
|
|
35
core/rfb.js
35
core/rfb.js
|
@ -35,10 +35,8 @@ export default function RFB(defaults) {
|
|||
}
|
||||
|
||||
// Connection details
|
||||
this._rfb_host = '';
|
||||
this._rfb_port = 5900;
|
||||
this._url = '';
|
||||
this._rfb_credentials = {};
|
||||
this._rfb_path = '';
|
||||
|
||||
// Internal state
|
||||
this._rfb_connection_state = '';
|
||||
|
@ -131,7 +129,6 @@ export default function RFB(defaults) {
|
|||
// set the default value on user-facing properties
|
||||
set_defaults(this, defaults, {
|
||||
'target': 'null', // VNC display rendering Canvas object
|
||||
'encrypt': false, // Use TLS/SSL/wss encryption
|
||||
'local_cursor': false, // Request locally rendered cursor
|
||||
'shared': true, // Request shared mode
|
||||
'view_only': false, // Disable client mouse/keyboard
|
||||
|
@ -247,15 +244,13 @@ export default function RFB(defaults) {
|
|||
|
||||
RFB.prototype = {
|
||||
// Public methods
|
||||
connect: function (host, port, creds, path) {
|
||||
this._rfb_host = host;
|
||||
this._rfb_port = port;
|
||||
connect: function (url, creds) {
|
||||
this._url = url;
|
||||
this._rfb_credentials = (creds !== undefined) ? creds : {};
|
||||
this._rfb_path = (path !== undefined) ? path : "";
|
||||
|
||||
if (!this._rfb_host) {
|
||||
return this._fail(
|
||||
_("Must set host"));
|
||||
if (!url) {
|
||||
this._fail(_("Must specify URL"));
|
||||
return;
|
||||
}
|
||||
|
||||
this._rfb_init_state = '';
|
||||
|
@ -376,24 +371,11 @@ RFB.prototype = {
|
|||
_connect: function () {
|
||||
Log.Debug(">> RFB.connect");
|
||||
|
||||
var uri;
|
||||
if (typeof UsingSocketIO !== 'undefined') {
|
||||
uri = 'http';
|
||||
} else {
|
||||
uri = this._encrypt ? 'wss' : 'ws';
|
||||
}
|
||||
|
||||
uri += '://' + this._rfb_host;
|
||||
if(this._rfb_port) {
|
||||
uri += ':' + this._rfb_port;
|
||||
}
|
||||
uri += '/' + this._rfb_path;
|
||||
|
||||
Log.Info("connecting to " + uri);
|
||||
Log.Info("connecting to " + this._url);
|
||||
|
||||
try {
|
||||
// WebSocket.onopen transitions to the RFB init states
|
||||
this._sock.open(uri, this._wsProtocols);
|
||||
this._sock.open(this._url, this._wsProtocols);
|
||||
} catch (e) {
|
||||
if (e.name === 'SyntaxError') {
|
||||
this._fail("Invalid host or port value given", e);
|
||||
|
@ -1464,7 +1446,6 @@ RFB.prototype = {
|
|||
|
||||
make_properties(RFB, [
|
||||
['target', 'wo', 'dom'], // VNC display rendering Canvas object
|
||||
['encrypt', 'rw', 'bool'], // Use TLS/SSL/wss encryption
|
||||
['local_cursor', 'rw', 'bool'], // Request locally rendered cursor
|
||||
['shared', 'rw', 'bool'], // Request shared mode
|
||||
['view_only', 'rw', 'bool'], // Disable client mouse/keyboard
|
||||
|
|
13
docs/API.md
13
docs/API.md
|
@ -10,14 +10,14 @@ Each configuration option has a default value, which can be overridden
|
|||
by a a configuration object passed to the constructor. Configuration
|
||||
options can then be read and modified after initialization with "get_*"
|
||||
and "set_*" methods respectively. For example, the following
|
||||
initializes an RFB object with the 'encrypt' configuration option
|
||||
initializes an RFB object with the 'view_only' configuration option
|
||||
enabled, then confirms it was set, then disables it:
|
||||
|
||||
var rfb = new RFB({'encrypt': true});
|
||||
if (rfb.get_encrypt()) {
|
||||
alert("Encryption is set");
|
||||
var rfb = new RFB({'view_only': true});
|
||||
if (rfb.get_view_only()) {
|
||||
alert("View Only is set");
|
||||
}
|
||||
rfb.set_encrypt(false);
|
||||
rfb.set_view_only(false);
|
||||
|
||||
Some attributes are read-only and cannot be changed. An exception will
|
||||
be thrown if an attempt is made to set one of these attributs. The
|
||||
|
@ -30,7 +30,6 @@ attribute mode is one of the following:
|
|||
| name | type | mode | default | description
|
||||
| ----------------- | ----- | ---- | ---------- | ------------
|
||||
| target | DOM | WO | null | Canvas element for rendering (passed to Display, Mouse and Keyboard)
|
||||
| encrypt | bool | RW | false | Use TLS/SSL encryption
|
||||
| local_cursor | bool | RW | false | Request locally rendered cursor
|
||||
| shared | bool | RW | true | Request shared VNC mode
|
||||
| view_only | bool | RW | false | Disable client mouse/keyboard
|
||||
|
@ -52,7 +51,7 @@ object instance.
|
|||
|
||||
| name | parameters | description
|
||||
| ------------------ | ------------------------------- | ------------
|
||||
| connect | (host, port, credentials, path) | Connect to the given host:port/path. Optional credentials and path.
|
||||
| connect | (url, credentials) | Connect to the given URL. Optional credentials.
|
||||
| disconnect | () | Disconnect
|
||||
| sendCredentials | (credentials) | Send credentials after onCredentialsRequired callback
|
||||
| sendCtrlAltDel | () | Send Ctrl-Alt-Del key sequence
|
||||
|
|
|
@ -93,7 +93,7 @@ RecordingPlayer.prototype = {
|
|||
this._running = true;
|
||||
|
||||
// launch the tests
|
||||
this._rfb.connect('test', 0, 'bogus');
|
||||
this._rfb.connect('wss://test');
|
||||
|
||||
this._queueNextPacket();
|
||||
},
|
||||
|
@ -104,11 +104,9 @@ RecordingPlayer.prototype = {
|
|||
this._rfb._sock.close = function () {};
|
||||
this._rfb._sock.flush = function () {};
|
||||
this._rfb._checkEvents = function () {};
|
||||
this._rfb.connect = function (host, port, credentials, path) {
|
||||
this._rfb_host = host;
|
||||
this._rfb_port = port;
|
||||
this._rfb.connect = function (url) {
|
||||
this._url = url;
|
||||
this._rfb_credentials = {};
|
||||
this._rfb_path = (path !== undefined) ? path : "";
|
||||
this._sock.init('binary', 'ws');
|
||||
this._rfb_connection_state = 'connecting';
|
||||
this._rfb_init_state = 'ProtocolVersion';
|
||||
|
|
|
@ -73,15 +73,15 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
beforeEach(function () { client._updateConnectionState = sinon.spy(); });
|
||||
|
||||
it('should set the current state to "connecting"', function () {
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
expect(client._updateConnectionState).to.have.been.calledOnce;
|
||||
expect(client._updateConnectionState).to.have.been.calledWith('connecting');
|
||||
});
|
||||
|
||||
it('should not try to connect if we are missing a host', function () {
|
||||
it('should not try to connect if we are missing a URL', function () {
|
||||
client._fail = sinon.spy();
|
||||
client._rfb_connection_state = '';
|
||||
client.connect(undefined, 8675);
|
||||
client.connect(undefined);
|
||||
expect(client._fail).to.have.been.calledOnce;
|
||||
expect(client._updateConnectionState).to.not.have.been.called;
|
||||
expect(client._rfb_connection_state).to.equal('');
|
||||
|
@ -347,7 +347,6 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
client.set_onUpdateState(sinon.spy());
|
||||
client._updateConnectionState('connecting');
|
||||
var spy = client.get_onUpdateState();
|
||||
expect(spy).to.have.been.calledOnce;
|
||||
expect(spy.args[0][1]).to.equal('connecting');
|
||||
});
|
||||
|
||||
|
@ -386,7 +385,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
beforeEach(function () {
|
||||
this.clock = sinon.useFakeTimers();
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
|
@ -465,36 +464,12 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
expect(client._sock.open).to.have.been.calledOnce;
|
||||
});
|
||||
|
||||
it('should use wss:// to connect if encryption is enabled', function () {
|
||||
it('should use a url specified to connect', function () {
|
||||
sinon.spy(client._sock, 'open');
|
||||
client.set_encrypt(true);
|
||||
client._updateConnectionState('connecting');
|
||||
expect(client._sock.open.args[0][0]).to.contain('wss://');
|
||||
});
|
||||
|
||||
it('should use ws:// to connect if encryption is not enabled', function () {
|
||||
sinon.spy(client._sock, 'open');
|
||||
client.set_encrypt(true);
|
||||
client._updateConnectionState('connecting');
|
||||
expect(client._sock.open.args[0][0]).to.contain('wss://');
|
||||
});
|
||||
|
||||
it('should use a uri with the host, port, and path specified to connect', function () {
|
||||
sinon.spy(client._sock, 'open');
|
||||
client.set_encrypt(false);
|
||||
client._rfb_host = 'HOST';
|
||||
client._rfb_port = 8675;
|
||||
client._rfb_path = 'PATH';
|
||||
client._url = 'ws://HOST:8675/PATH';
|
||||
client._updateConnectionState('connecting');
|
||||
expect(client._sock.open).to.have.been.calledWith('ws://HOST:8675/PATH');
|
||||
});
|
||||
|
||||
it('should not include a port in the uri if not specified in connect', function () {
|
||||
sinon.spy(client._sock, 'open');
|
||||
client.set_encrypt(true);
|
||||
client.connect('HOST', undefined)
|
||||
expect(client._sock.open).to.have.been.calledWith('wss://HOST/');
|
||||
});
|
||||
});
|
||||
|
||||
describe('disconnecting', function () {
|
||||
|
@ -502,7 +477,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
beforeEach(function () {
|
||||
this.clock = sinon.useFakeTimers();
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
|
@ -603,7 +578,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
var client;
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
});
|
||||
|
||||
|
@ -666,7 +641,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
var client;
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
});
|
||||
|
||||
|
@ -706,7 +681,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
client._rfb_init_state = 'Security';
|
||||
});
|
||||
|
@ -770,7 +745,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
client._rfb_init_state = 'Security';
|
||||
});
|
||||
|
@ -819,7 +794,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
client._rfb_init_state = 'Security';
|
||||
client._rfb_version = 3.8;
|
||||
|
@ -869,7 +844,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
client._rfb_init_state = 'Security';
|
||||
client._rfb_version = 3.8;
|
||||
|
@ -926,7 +901,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
client._rfb_init_state = 'Security';
|
||||
client._rfb_version = 3.8;
|
||||
|
@ -1016,7 +991,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
client._rfb_init_state = 'SecurityResult';
|
||||
});
|
||||
|
@ -1049,7 +1024,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
client._rfb_init_state = 'SecurityResult';
|
||||
});
|
||||
|
@ -1077,7 +1052,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
client._rfb_init_state = 'ServerInitialisation';
|
||||
});
|
||||
|
@ -1233,7 +1208,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
client._rfb_connection_state = 'connected';
|
||||
client._fb_name = 'some device';
|
||||
|
@ -1353,7 +1328,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
client._rfb_connection_state = 'connected';
|
||||
client._fb_name = 'some device';
|
||||
|
@ -1439,7 +1414,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
var client;
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
client._sock._websocket._open();
|
||||
client._rfb_connection_state = 'connected';
|
||||
client._fb_name = 'some device';
|
||||
|
@ -1997,7 +1972,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
|||
var client;
|
||||
beforeEach(function () {
|
||||
client = make_rfb();
|
||||
client.connect('host', 8675);
|
||||
client.connect('wss://host:8675');
|
||||
this.clock = sinon.useFakeTimers();
|
||||
});
|
||||
|
||||
|
|
|
@ -156,7 +156,8 @@
|
|||
break;
|
||||
case 'connected':
|
||||
doneInitialResize = false;
|
||||
if (rfb && rfb.get_encrypt()) {
|
||||
if (WebUtil.getConfigVar('encrypt',
|
||||
(window.location.protocol === "https:"))) {
|
||||
status("Connected (encrypted) to " +
|
||||
desktopName, "normal");
|
||||
} else {
|
||||
|
@ -256,8 +257,6 @@
|
|||
|
||||
try {
|
||||
rfb = new RFB({'target': document.getElementById('noVNC_canvas'),
|
||||
'encrypt': WebUtil.getConfigVar('encrypt',
|
||||
(window.location.protocol === "https:")),
|
||||
'repeaterID': WebUtil.getConfigVar('repeaterID', ''),
|
||||
'local_cursor': WebUtil.getConfigVar('cursor', true),
|
||||
'shared': WebUtil.getConfigVar('shared', true),
|
||||
|
@ -273,7 +272,22 @@
|
|||
return; // don't continue trying to connect
|
||||
}
|
||||
|
||||
rfb.connect(host, port, { password: password }, path);
|
||||
var url;
|
||||
|
||||
if (WebUtil.getConfigVar('encrypt',
|
||||
(window.location.protocol === "https:"))) {
|
||||
url = 'wss';
|
||||
} else {
|
||||
url = 'ws';
|
||||
}
|
||||
|
||||
url += '://' + host;
|
||||
if(port) {
|
||||
url += ':' + port;
|
||||
}
|
||||
url += '/' + path;
|
||||
|
||||
rfb.connect(url, { password: password });
|
||||
})();
|
||||
</script>
|
||||
</head>
|
||||
|
|
Loading…
Reference in New Issue