mirror of
https://git.proxmox.com/git/pve-http-server
synced 2025-05-04 04:14:06 +00:00
Formatter/Bootstrap.pm; use configured cookie_name
This commit is contained in:
parent
fc87cd5ec3
commit
6189d2ef0a
@ -6,61 +6,55 @@ use URI::Escape;
|
|||||||
use HTML::Entities;
|
use HTML::Entities;
|
||||||
use JSON;
|
use JSON;
|
||||||
|
|
||||||
# FIXME: cookie_name
|
# FIXME: remove console code??
|
||||||
# FIXME: console code??
|
|
||||||
|
|
||||||
# Helpers to generate simple html pages using Bootstrap markup.
|
# Helpers to generate simple html pages using Bootstrap markup.
|
||||||
|
|
||||||
my $jssrc = <<_EOJS;
|
my $jssrc = <<_EOJS;
|
||||||
PVE = {
|
PVE.open_vm_console = function(node, vmid) {
|
||||||
delete_auth_cookie: function() {
|
console.log("open vm " + vmid + " on node " + node);
|
||||||
document.cookie = "PVEAuthCookie=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; secure;";
|
|
||||||
},
|
|
||||||
open_vm_console: function(node, vmid) {
|
|
||||||
console.log("open vm " + vmid + " on node " + node);
|
|
||||||
|
|
||||||
var downloadWithName = function(uri, name) {
|
var downloadWithName = function(uri, name) {
|
||||||
var link = jQuery('#pve_console_anchor');
|
var link = jQuery('#pve_console_anchor');
|
||||||
link.attr("href", uri);
|
link.attr("href", uri);
|
||||||
|
|
||||||
// Note: we need to tell android the correct file name extension
|
// Note: we need to tell android the correct file name extension
|
||||||
// but we do not set 'download' tag for other environments, because
|
// but we do not set 'download' tag for other environments, because
|
||||||
// It can have strange side effects (additional user prompt on firefox)
|
// It can have strange side effects (additional user prompt on firefox)
|
||||||
var andriod = navigator.userAgent.match(/Android/i) ? true : false;
|
var andriod = navigator.userAgent.match(/Android/i) ? true : false;
|
||||||
if (andriod) {
|
if (andriod) {
|
||||||
link.attr("download", name);
|
link.attr("download", name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (document.createEvent) {
|
if (document.createEvent) {
|
||||||
var evt = document.createEvent("MouseEvents");
|
var evt = document.createEvent("MouseEvents");
|
||||||
evt.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
|
evt.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
|
||||||
link.get(0).dispatchEvent(evt);
|
link.get(0).dispatchEvent(evt);
|
||||||
} else {
|
} else {
|
||||||
link.get(0).fireEvent('onclick');
|
link.get(0).fireEvent('onclick');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
jQuery.ajax("/api2/json/console", {
|
jQuery.ajax("/api2/json/console", {
|
||||||
data: { vmid: vmid, node: node },
|
data: { vmid: vmid, node: node },
|
||||||
headers: { CSRFPreventionToken: PVE.CSRFPreventionToken },
|
headers: { CSRFPreventionToken: PVE.CSRFPreventionToken },
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
error: function(jqXHR, textStatus, errorThrown) {
|
error: function(jqXHR, textStatus, errorThrown) {
|
||||||
// fixme: howto view JS errors ?
|
// fixme: howto view JS errors ?
|
||||||
console.log("ERROR " + textStatus + ": " + errorThrown);
|
console.log("ERROR " + textStatus + ": " + errorThrown);
|
||||||
},
|
},
|
||||||
success: function(data) {
|
success: function(data) {
|
||||||
var raw = "[virt-viewer]\\n";
|
var raw = "[virt-viewer]\\n";
|
||||||
jQuery.each(data.data, function(k, v) {
|
jQuery.each(data.data, function(k, v) {
|
||||||
raw += k + "=" + v + "\\n";
|
raw += k + "=" + v + "\\n";
|
||||||
});
|
});
|
||||||
var url = 'data:application/x-virt-viewer;charset=UTF-8,' +
|
var url = 'data:application/x-virt-viewer;charset=UTF-8,' +
|
||||||
encodeURIComponent(raw);
|
encodeURIComponent(raw);
|
||||||
|
|
||||||
downloadWithName(url, "pve-spice.vv");
|
downloadWithName(url, "pve-spice.vv");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
|
||||||
};
|
};
|
||||||
_EOJS
|
_EOJS
|
||||||
|
|
||||||
@ -70,6 +64,7 @@ sub new {
|
|||||||
my $self = bless {
|
my $self = bless {
|
||||||
url => $url,
|
url => $url,
|
||||||
title => $title,
|
title => $title,
|
||||||
|
cookie_name => $auth->{cookie_name},
|
||||||
js => '',
|
js => '',
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -83,12 +78,19 @@ sub new {
|
|||||||
sub body {
|
sub body {
|
||||||
my ($self, $html) = @_;
|
my ($self, $html) = @_;
|
||||||
|
|
||||||
my $jssetup = '';
|
my $jssetup = "PVE = {};\n\n"; # create namespace
|
||||||
|
|
||||||
if ($self->{csrftoken}) {
|
if ($self->{csrftoken}) {
|
||||||
$jssetup .= "PVE.CSRFPreventionToken = '$self->{csrftoken}';\n";
|
$jssetup .= "PVE.CSRFPreventionToken = '$self->{csrftoken}';\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$jssetup .= "PVE.delete_auth_cookie = function() {\n";
|
||||||
|
|
||||||
|
if ($self->{cookie_name}) {
|
||||||
|
$jssetup .= " document.cookie = \"$self->{cookie_name}=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; secure;\";\n";
|
||||||
|
};
|
||||||
|
$jssetup .= "};\n";
|
||||||
|
|
||||||
return <<_EOD;
|
return <<_EOD;
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
@ -101,10 +103,10 @@ sub body {
|
|||||||
<!-- Bootstrap -->
|
<!-- Bootstrap -->
|
||||||
<link href="/css/bootstrap.min.css" rel="stylesheet">
|
<link href="/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$jssrc
|
$jssetup
|
||||||
$jssetup
|
$jssrc
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
|
Loading…
Reference in New Issue
Block a user