summaryrefslogtreecommitdiff
path: root/www/js/rdp-start.js
diff options
context:
space:
mode:
authorsss <sss@dark-alexandr.net>2023-01-17 00:38:19 +0300
committersss <sss@dark-alexandr.net>2023-01-17 00:38:19 +0300
commitcc3f33db7a8d3c4ad373e646b199808e01bc5d9b (patch)
treeec09d690c7656ab5f2cc72607e05fb359c24d8b2 /www/js/rdp-start.js
added webrdp public code
Diffstat (limited to 'www/js/rdp-start.js')
-rw-r--r--www/js/rdp-start.js262
1 files changed, 262 insertions, 0 deletions
diff --git a/www/js/rdp-start.js b/www/js/rdp-start.js
new file mode 100644
index 0000000..ee509e1
--- /dev/null
+++ b/www/js/rdp-start.js
@@ -0,0 +1,262 @@
+'use strict';
+
+/** BSD-2-Clause license
+ *
+ * Copyright (c) 2018-2023 NST <www.newinfosec.ru>, sss <sss at dark-alexandr dot net>, smake <smake at ya dot ru>.
+ *
+ */
+
+function RDPStart(uri, title){
+ uri = wsBase
+ document.querySelector('.rdp_connect_dialog').style.display = 'none';
+ if (title === undefined) {
+ // title = "Portal rdp session " + $('rdphost').value.trim();
+ title = "Portal remote session";
+ }
+ if(!embedded){
+ $('dvLoading').setStyles({'visibility':'visible'});
+ }
+ var controls = document.querySelector('#extracommands');
+ rdp = new webrdp.RDP(uri, $('screen'), controls, !RIMtablet, RIMtablet, vkbd);
+
+ rdp.addEvent('alert', function(msg) {
+ popUpMessage('error', msg, 5);
+ });
+ rdp.addEvent('connected', function() {
+ cleanPopUpDeck();
+ document.title = title;
+ var button = $("rdpconnect");
+ button.removeEvents();
+ window.removeEvent('resize', OnDesktopSize);
+ button.value = 'Disconnect';
+ button.addEvent('click', rdp.Disconnect.bind(rdp));
+ window.addEvent("beforeunload", rdp.Disconnect.bind(rdp));
+ });
+ rdp.addEvent('disconnected', function() {
+ showDialog(true);
+ if(embedded){
+ $('maindialog').addClass('invisible');
+ noInstancePopUp()
+ }
+ var button = $("rdpconnect");
+ button.removeEvents();
+ button.value = 'Connect';
+ button.addEvent('click', function(){RDPStart();});
+ OnDesktopSize();
+ window.addEvent('resize', OnDesktopSize);
+ if(!embedded)
+ {
+ document.querySelector('.rdp_connect_dialog').style.display = 'block';
+ }
+ });
+ rdp.addEvent('mouserelease', ResetRdpMouseFlags);
+ rdp.addEvent('touch2', function() {
+ ShowMouseHelper($('mousehelper').hasClass('invisible'));
+ });
+ rdp.addEvent('touch3', function() {
+ vkbd.toggle();
+ });
+ rdp.addEvent('touch4', function() {
+ if (confirm('Are you sure you want to disconnect?')) {
+ rdp.Disconnect();
+ }
+ });
+ showDialog(false);
+ // rdp.log.loglevel = "debug";
+ rdp.Run();
+}
+
+function SetRdpMouseFlags() {
+ var mf = {
+ 'r': $('rclick').checked,
+ 'm': $('mclick').checked,
+ 'a': $('aclick').checked,
+ 's': $('sclick').checked,
+ 'c': $('cclick').checked,
+ };
+ rdp.SetArtificialMouseFlags(mf);
+}
+function ResetRdpMouseFlags() {
+ $('rclick').checked = false;
+ $('mclick').checked = false;
+ $('aclick').checked = false;
+ $('sclick').checked = false;
+ $('cclick').checked = false;
+ rdp.SetArtificialMouseFlags(null);
+}
+function ShowMouseHelper(show) {
+ var mh = $('mousehelper');
+ inDrag = false;
+ if (show) {
+ mh.setStyles({'position':'absolute','top':mhy,'left':mhx,'z-index':999});
+ mh.addEvent('mousedown',DragStart);
+ $('rclick').addEvent('change', SetRdpMouseFlags);
+ $('mclick').addEvent('change', SetRdpMouseFlags);
+ $('aclick').addEvent('change', SetRdpMouseFlags);
+ $('sclick').addEvent('change', SetRdpMouseFlags);
+ $('cclick').addEvent('change', SetRdpMouseFlags);
+ mh.removeClass('invisible');
+ } else {
+ mh.removeEvents();
+ mh.addClass('invisible');
+ $('rclick').removeEvents();
+ $('mclick').removeEvents();
+ $('aclick').removeEvents();
+ $('sclick').removeEvents();
+ $('cclick').removeEvents();
+ }
+}
+
+function OnDesktopSize() {
+ ResizeCanvas($('dtsize').value);
+ DrawLogo();
+}
+
+function DragStart(evt) {
+ var mh = $('mousehelper');
+ if (!mh.hasClass('invisible')) {
+ inDrag = true;
+ dragX = evt.page.x;
+ dragY = evt.page.y;
+ window.addEvent('mouseup',DragEnd);
+ window.addEvent('touchmove',DragMove);
+ }
+}
+function DragEnd(evt) {
+ inDrag = false;
+ var mh = $('mousehelper');
+ window.removeEvent('touchmove',DragMove);
+ window.removeEvent('mouseup',DragEnd);
+}
+function DragMove(evt) {
+ if (inDrag) {
+ var dx = evt.page.x - dragX;
+ var dy = evt.page.y - dragY;
+ dragX = evt.page.x;
+ dragY = evt.page.y;
+ var mh = $('mousehelper');
+ if (!mh.hasClass('invisible')) {
+ mhx += dx;
+ mhy += dy;
+ mh.setStyles({'top':mhy,'left':mhx});
+ }
+ }
+}
+
+function DrawLogo() {
+ var logo = new Element('img', {'src': 'c_none.png'});
+ logo.addEvent('load', function() {
+ var screen = document.getElementById('screen');
+ var scaleWCoeficient = 0.5;
+ var scaleHCoeficient = 0.5;
+ var iw = this.width * scaleWCoeficient;
+ var ih = this.height * scaleHCoeficient;
+ var scale = (screen.height - 20) / ih;
+ screen.getContext('2d').drawImage(
+ this, 10, 10, Math.round(iw * scale), Math.round(ih * scale)
+ );
+ }.bind(logo));
+}
+
+function ResizeCanvas(sz) {
+ var w, h;
+ if (sz == 'auto') {
+ w = window.getCoordinates().width;
+ h = window.getCoordinates().height;
+ if (RIMtablet) {
+ // Toplevel bar not removable
+ h -= 31;
+ }
+ if (w % 2) {
+ w -= 1;
+ }
+ } else {
+ var sza = sz.split('x');
+ var w = sza[0];
+ var h = sza[1];
+ }
+ $('screen').width = w - 10;
+ $('screen').height = h - 50;
+ $('screen').style["margin"] = "0 auto";
+}
+
+var sendDisconnect = function() {
+if (confirm('Закончить сессию ?')) {
+ $('extracommands').setStyles({'visibility':'hidden'});
+ rdp.Disconnect();
+ window.close();
+}
+}
+
+var altTabOn = false;
+function altTabEvent(){
+ if(altTabOn){
+ altTabOn = false;
+ rdp.SendKey(2);//alt+tab release
+ $('alttab').removeClass('extracommandshold');
+ }
+ else{
+ altTabOn = true;
+ rdp.SendKey(1);//alt+tab
+ $('alttab').addClass('extracommandshold');
+ }
+}
+
+function showDialog(show) {
+ if (show) {
+ ShowMouseHelper(false);
+ var dlg = $('maindialog');
+ var x = Math.round((window.getCoordinates().width - dlg.getCoordinates().width) / 2) + 'px';
+ var y = Math.round((window.getCoordinates().height - dlg.getCoordinates().height) / 2) + 'px';
+ $('extracommands').setStyles(
+ {
+ 'visibility':'hidden'
+ });
+ $('dvLoading').setStyles(
+ {
+ 'visibility':'hidden'
+ });
+ DrawLogo();
+ dlg.setStyles({
+ 'position': 'absolute',
+ 'top': y,
+ 'left': x,
+ 'z-index': 999
+ }).removeClass('invisible');
+ } else {
+ $('maindialog').addClass('invisible');
+ $('extracommands').setStyles(
+ {
+ 'visibility':'visible'
+ });
+ $('ctrlaltdelete').addEvent('click', function(){ rdp.SendKey(0); });
+ $('alttab').addEvent('click', altTabEvent);
+ $('disconnect').addEvent('click', sendDisconnect);
+ }
+}
+
+function settingsGetJSON(){
+ var screen = document.getElementById('screen');
+ return {
+ "backend_settings": {
+ "host" : $('rdphost').value.trim()
+ ,"port" : parseInt($('rdpport').value.trim())
+ ,"pcb" : $('rdppcb').value.trim()
+ ,"user" : $('rdpuser').value.trim()
+ ,"password" : $('rdppass').value
+ ,"perf" : parseInt($('perf').value.trim())
+ ,"fntlm" : parseInt($('fntlm').value.trim())
+ ,"nowallp": parseInt($('nowallp').checked ? '1' : '0')
+ ,"nowdrag": parseInt($('nowdrag').checked ? '1' : '0')
+ ,"nomani" : parseInt($('nomani').checked ? '1' : '0')
+ ,"notheme": parseInt($('notheme').checked ? '1' : '0')
+ ,"nonla" : parseInt($('nonla').checked ? '1' : '0')
+ ,"notls" : parseInt($('notls').checked ? '1' : '0')
+ ,"dtsize" : screen.width + 'x' + screen.height
+ }
+ ,"session_settings": {
+ "token" : location.search.substring(1)
+ ,"proto" : "rdp"
+ }
+ };
+}