diff --git a/spectrum_manager/src/APIServer.cpp b/spectrum_manager/src/APIServer.cpp
index e129b7cd..3b852b75 100644
--- a/spectrum_manager/src/APIServer.cpp
+++ b/spectrum_manager/src/APIServer.cpp
@@ -179,6 +179,49 @@ void APIServer::serve_instances_unregister(Server *server, Server::session *sess
}
}
+void APIServer::serve_instances_register(Server *server, Server::session *session, struct mg_connection *conn, struct http_message *hm) {
+ std::string uri(hm->uri.p, hm->uri.len);
+ std::string instance = uri.substr(uri.rfind("/") + 1);
+
+ UserInfo info;
+ m_storage->getUser(session->user, info);
+
+ std::string username = "";
+ int type = (int) TYPE_STRING;
+ m_storage->getUserSetting(info.id, instance, type, username);
+
+ std::string jid = get_http_var(hm, "jid");
+ std::string uin = get_http_var(hm, "uin");
+ std::string password = get_http_var(hm, "password");
+
+ if (jid.empty() || uin.empty() || password.empty()) {
+ send_ack(conn, true, "Insufficient data.");
+ }
+ else {
+ std::string response = server->send_command(instance, "register " + jid + " " + uin + " " + password);
+ if (!response.empty()) {
+ std::string value = jid;
+ int type = (int) TYPE_STRING;
+ m_storage->updateUserSetting(info.id, instance, value);
+ }
+ else {
+ send_ack(conn, true, response);
+ return;
+ }
+
+ Document json;
+ json.SetObject();
+ json.AddMember("error", false, json.GetAllocator());
+
+ response = server->send_command(instance, "get_oauth2_url " + jid);
+ if (!response.empty()) {
+ json.AddMember("oauth2_url", response.c_str(), json.GetAllocator());
+ }
+
+ send_json(conn, json);
+ }
+}
+
void APIServer::serve_instances_register_form(Server *server, Server::session *session, struct mg_connection *conn, struct http_message *hm) {
std::string uri(hm->uri.p, hm->uri.len);
std::string instance = uri.substr(uri.rfind("/") + 1);
@@ -211,11 +254,14 @@ void APIServer::handleRequest(Server *server, Server::session *sess, struct mg_c
serve_instances_stop(server, sess, conn, hm);
}
else if (has_prefix(&hm->uri, "/api/v1/instances/unregister/")) {
- serve_instances_stop(server, sess, conn, hm);
+ serve_instances_unregister(server, sess, conn, hm);
}
else if (has_prefix(&hm->uri, "/api/v1/instances/register_form/")) {
serve_instances_register_form(server, sess, conn, hm);
}
+ else if (has_prefix(&hm->uri, "/api/v1/instances/register/")) {
+ serve_instances_register(server, sess, conn, hm);
+ }
else if (mg_vcmp(&hm->uri, "/api/v1/instances") == 0) {
serve_instances(server, sess, conn, hm);
}
diff --git a/spectrum_manager/src/APIServer.h b/spectrum_manager/src/APIServer.h
index 3907beea..cb9aff4a 100644
--- a/spectrum_manager/src/APIServer.h
+++ b/spectrum_manager/src/APIServer.h
@@ -56,6 +56,7 @@ class APIServer {
void serve_instances_start(Server *server, Server::session *sess, struct mg_connection *conn, struct http_message *hm);
void serve_instances_stop(Server *server, Server::session *sess, struct mg_connection *conn, struct http_message *hm);
void serve_instances_unregister(Server *server, Server::session *sess, struct mg_connection *conn, struct http_message *hm);
+ void serve_instances_register(Server *server, Server::session *sess, struct mg_connection *conn, struct http_message *hm);
void serve_instances_register_form(Server *server, Server::session *sess, struct mg_connection *conn, struct http_message *hm);
void send_json(struct mg_connection *conn, const Document &d);
void send_ack(struct mg_connection *conn, bool error, const std::string &message);
diff --git a/spectrum_manager/src/html/instances/register.shtml b/spectrum_manager/src/html/instances/register.shtml
index 5ad12303..e9995227 100644
--- a/spectrum_manager/src/html/instances/register.shtml
+++ b/spectrum_manager/src/html/instances/register.shtml
@@ -18,7 +18,7 @@
diff --git a/spectrum_manager/src/html/js/app.js b/spectrum_manager/src/html/js/app.js
index ca3e5df5..76de2790 100644
--- a/spectrum_manager/src/html/js/app.js
+++ b/spectrum_manager/src/html/js/app.js
@@ -67,6 +67,21 @@ function getQueryParams(qs) {
function fill_instances_register_form() {
var query = getQueryParams(document.location.search);
$("#instance").attr("value", query.id);
+
+ $(".button_command").click(function(e) {
+ e.preventDefault();
+ $(this).parent().empty().progressbar( {value: false} ).css('height', '1em');
+
+ var postdata ={
+ "jid": $("#jid").val(),
+ "uin": $("#uin").val(),
+ "password": $("#password").val()
+ };
+
+ $.post($.cookie("base_location") + "api/v1/instances/register/" + $("#instance").val(), postdata, function(data) {
+ window.location.replace("index.shtml");
+ });
+ })
$.get($.cookie("base_location") + "api/v1/instances/register_form/" + query.id, function(data) {
$("#jid_desc").html(data.username_label + ":");
diff --git a/spectrum_manager/src/server.cpp b/spectrum_manager/src/server.cpp
index 72c4f70a..ff8c4b02 100644
--- a/spectrum_manager/src/server.cpp
+++ b/spectrum_manager/src/server.cpp
@@ -292,7 +292,12 @@ std::string Server::send_command(const std::string &jid, const std::string &cmd)
eventLoop.runOnce();
}
- return get_response();
+ std::string response = get_response();
+ if (response == "Empty response") {
+ return "";
+ }
+
+ return response;
}
void Server::serve_onlineusers(struct mg_connection *conn, struct http_message *hm) {