diff --git a/spectrum_manager/src/APIServer.cpp b/spectrum_manager/src/APIServer.cpp
index 0f882222..9ba3b9b7 100644
--- a/spectrum_manager/src/APIServer.cpp
+++ b/spectrum_manager/src/APIServer.cpp
@@ -112,6 +112,15 @@ void APIServer::serve_instances(Server *server, Server::session *session, struct
}
instance.AddMember("running", running, json.GetAllocator());
+ UserInfo info;
+ m_storage->getUser(session->user, info);
+ std::string username = "";
+ int type = (int) TYPE_STRING;
+ m_storage->getUserSetting(info.id, id, type, username);
+
+ instance.AddMember("registered", !username.empty(), json.GetAllocator());
+ instance.AddMember("username", username.c_str(), json.GetAllocator());
+
instances.PushBack(instance, json.GetAllocator());
}
diff --git a/spectrum_manager/src/html/header.html b/spectrum_manager/src/html/header.html
index 9f574d6f..be8c5435 100644
--- a/spectrum_manager/src/html/header.html
+++ b/spectrum_manager/src/html/header.html
@@ -10,6 +10,7 @@
+
Spectrum 2
diff --git a/spectrum_manager/src/html/js/app.js b/spectrum_manager/src/html/js/app.js
index 146a2f79..4b1bfed7 100644
--- a/spectrum_manager/src/html/js/app.js
+++ b/spectrum_manager/src/html/js/app.js
@@ -1,20 +1,38 @@
function show_instances() {
- $.get("/api/v1/instances", function(data) {
- $("#main_content").html("List of Spectrum 2 instances
Hostname | Status | Command |
");
- $.each(data.instances, function(i, instance) {
- var command = instance.running ? "stop" : "start";
- var row = ''+ instance.name + ' | ' +
- instance.status + ' | ' + command + '' + ' |
';
- $("#main_result > tbody:last-child").append(row);
- $(".button_command").click(function(e) {
- e.preventDefault();
- $(this).parent().empty().progressbar( {value: false} ).css('height', '1em');
- var url = $(this).attr('href');
- $.get(url, function(data) {
- show_instances();
- });
- })
- });
-});
+ $.get("/api/v1/instances", function(data) {
+ $("#main_content").html("List of Spectrum 2 instances
Name | Status | Actions |
");
+
+ var admin = $.cookie("admin") == "1";
+ $.each(data.instances, function(i, instance) {
+ if (instance.running) {
+ if (admin) {
+ var command = instance.running ? "stop" : "start";
+ }
+ else {
+ var command = instance.registered ? "unregister" : "register";
+ if (instance.registered) {
+ instance.status += "
Registered as " + instance.username;
+ }
+ }
+ }
+ else if (admin) {
+ var command = "start";
+ }
+ var row = ''+ instance.name + ' | ' +
+ '' + instance.status + ' | ' +
+ '' + command + '' + ' |
';
+
+ $("#main_result > tbody:last-child").append(row);
+
+ $(".button_command").click(function(e) {
+ e.preventDefault();
+ $(this).parent().empty().progressbar( {value: false} ).css('height', '1em');
+
+ var url = $(this).attr('href');
+ $.get(url, function(data) {
+ show_instances();
+ });
+ })
+ });
+ });
}
diff --git a/spectrum_manager/src/html/js/jquery.cookie.js b/spectrum_manager/src/html/js/jquery.cookie.js
new file mode 100644
index 00000000..8218817b
--- /dev/null
+++ b/spectrum_manager/src/html/js/jquery.cookie.js
@@ -0,0 +1,114 @@
+/*!
+ * jQuery Cookie Plugin v1.4.1
+ * https://github.com/carhartl/jquery-cookie
+ *
+ * Copyright 2006, 2014 Klaus Hartl
+ * Released under the MIT license
+ */
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD (Register as an anonymous module)
+ define(['jquery'], factory);
+ } else if (typeof exports === 'object') {
+ // Node/CommonJS
+ module.exports = factory(require('jquery'));
+ } else {
+ // Browser globals
+ factory(jQuery);
+ }
+}(function ($) {
+
+ var pluses = /\+/g;
+
+ function encode(s) {
+ return config.raw ? s : encodeURIComponent(s);
+ }
+
+ function decode(s) {
+ return config.raw ? s : decodeURIComponent(s);
+ }
+
+ function stringifyCookieValue(value) {
+ return encode(config.json ? JSON.stringify(value) : String(value));
+ }
+
+ function parseCookieValue(s) {
+ if (s.indexOf('"') === 0) {
+ // This is a quoted cookie as according to RFC2068, unescape...
+ s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
+ }
+
+ try {
+ // Replace server-side written pluses with spaces.
+ // If we can't decode the cookie, ignore it, it's unusable.
+ // If we can't parse the cookie, ignore it, it's unusable.
+ s = decodeURIComponent(s.replace(pluses, ' '));
+ return config.json ? JSON.parse(s) : s;
+ } catch(e) {}
+ }
+
+ function read(s, converter) {
+ var value = config.raw ? s : parseCookieValue(s);
+ return $.isFunction(converter) ? converter(value) : value;
+ }
+
+ var config = $.cookie = function (key, value, options) {
+
+ // Write
+
+ if (arguments.length > 1 && !$.isFunction(value)) {
+ options = $.extend({}, config.defaults, options);
+
+ if (typeof options.expires === 'number') {
+ var days = options.expires, t = options.expires = new Date();
+ t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
+ }
+
+ return (document.cookie = [
+ encode(key), '=', stringifyCookieValue(value),
+ options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+ options.path ? '; path=' + options.path : '',
+ options.domain ? '; domain=' + options.domain : '',
+ options.secure ? '; secure' : ''
+ ].join(''));
+ }
+
+ // Read
+
+ var result = key ? undefined : {},
+ // To prevent the for loop in the first place assign an empty array
+ // in case there are no cookies at all. Also prevents odd result when
+ // calling $.cookie().
+ cookies = document.cookie ? document.cookie.split('; ') : [],
+ i = 0,
+ l = cookies.length;
+
+ for (; i < l; i++) {
+ var parts = cookies[i].split('='),
+ name = decode(parts.shift()),
+ cookie = parts.join('=');
+
+ if (key === name) {
+ // If second argument (value) is a function it's a converter...
+ result = read(cookie, value);
+ break;
+ }
+
+ // Prevent storing a cookie that we couldn't decode.
+ if (!key && (cookie = read(cookie)) !== undefined) {
+ result[name] = cookie;
+ }
+ }
+
+ return result;
+ };
+
+ config.defaults = {};
+
+ $.removeCookie = function (key, options) {
+ // Must not alter options, thus extending a fresh object...
+ $.cookie(key, '', $.extend({}, options, { expires: -1 }));
+ return !$.cookie(key);
+ };
+
+}));