Formatter/Bootstrap.pm; use configured cookie_name

This commit is contained in:
Dietmar Maurer 2017-01-14 17:16:22 +01:00
parent fc87cd5ec3
commit 6189d2ef0a

View File

@ -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 {