diff --git a/spectrum/src/frontends/slack/SlackSession.cpp b/spectrum/src/frontends/slack/SlackSession.cpp index 1b2d5929..e1a151de 100644 --- a/spectrum/src/frontends/slack/SlackSession.cpp +++ b/spectrum/src/frontends/slack/SlackSession.cpp @@ -427,9 +427,9 @@ void SlackSession::handleMessageReceived(const std::string &channel, const std:: msg += "```.spectrum2 register <3rdPartyNetworkAccount> <3rdPartyPassword> <#SlackChannel>``` Registers 3rd-party account for transportation."; m_rtm->sendMessage(m_ownerChannel, msg); } - else { - m_rtm->sendMessage(m_ownerChannel, "Unknown command. Use `.spectrum2 help` for help."); - } +// else { +// m_rtm->sendMessage(m_ownerChannel, "Unknown command. Use `.spectrum2 help` for help."); +// } } void SlackSession::handleDisconnected() { diff --git a/spectrum/src/frontends/slack/SlackUserRegistration.cpp b/spectrum/src/frontends/slack/SlackUserRegistration.cpp index 12143ee1..6f00c36a 100644 --- a/spectrum/src/frontends/slack/SlackUserRegistration.cpp +++ b/spectrum/src/frontends/slack/SlackUserRegistration.cpp @@ -144,14 +144,24 @@ std::string SlackUserRegistration::handleOAuth2Code(const std::string &code, con return "The token you have provided is invalid"; } + std::string slackChannel; + std::string uin; + std::string password; + if (data.size() == 4) { + slackChannel = data[1]; + uin = data[2]; + password = data[3]; + } + UserInfo user; user.uin = ""; user.password = ""; user.id = 0; m_storageBackend->getUser(domain, user); - value = user.jid; user.jid = domain; + user.uin = uin; + user.password = password; user.language = "en"; user.encoding = ""; user.vip = 0; @@ -160,8 +170,8 @@ std::string SlackUserRegistration::handleOAuth2Code(const std::string &code, con m_storageBackend->getUser(user.jid, user); - if (!value.empty()) { - m_storageBackend->getUserSetting(user.id, "slack_channel", type, value); + if (!slackChannel.empty()) { + m_storageBackend->getUserSetting(user.id, "slack_channel", type, slackChannel); } value = token; diff --git a/spectrum_manager/src/APIServer.cpp b/spectrum_manager/src/APIServer.cpp index 12b75c47..5af0fccd 100644 --- a/spectrum_manager/src/APIServer.cpp +++ b/spectrum_manager/src/APIServer.cpp @@ -197,27 +197,27 @@ void APIServer::serve_instances_register(Server *server, Server::session *sessio send_ack(conn, true, "Insufficient data."); } else { - std::string response = server->send_command(instance, "register " + jid + " " + uin + " " + password); + // Check if the frontend wants to use OAuth2 (Slack for example). + std::string response = server->send_command(instance, "get_oauth2_url " + jid + " " + uin + " " + password); if (!response.empty()) { - std::string value = jid; - int type = (int) TYPE_STRING; - m_storage->updateUserSetting(info.id, instance, value); + Document json; + json.SetObject(); + json.AddMember("error", false, json.GetAllocator()); + json.AddMember("oauth2_url", response.c_str(), json.GetAllocator()); + send_json(conn, json); } else { - send_ack(conn, true, response); - return; + 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); } }