aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiklas Halle <niklas@niklashalle.net>2020-08-28 21:00:23 +0200
committerNiklas Halle <niklas@niklashalle.net>2020-08-28 21:00:23 +0200
commitb5e66e3aa9c468660cb4f3d6ab0e224c97d23723 (patch)
tree33a1f3adea52a2abd7404ff9c35c4803599b4ac8
parent7a03c9340b6b53c2505c7cd26fa3aede0cf14603 (diff)
downloadn_core-b5e66e3aa9c468660cb4f3d6ab0e224c97d23723.tar.gz
n_core-b5e66e3aa9c468660cb4f3d6ab0e224c97d23723.zip
add (rudimentary, non session based) pin veryfication for stop command
-rw-r--r--src/SimpleHandlers.cpp13
-rw-r--r--src/main.cpp30
2 files changed, 29 insertions, 14 deletions
diff --git a/src/SimpleHandlers.cpp b/src/SimpleHandlers.cpp
index e4ce4ac..408aeeb 100644
--- a/src/SimpleHandlers.cpp
+++ b/src/SimpleHandlers.cpp
@@ -1,6 +1,9 @@
#include "SimpleHandlers.hpp"
+
#include "Response.hpp"
+#include <fstream>
+
using namespace Response;
Handler::json Handler::klingerHandler(std::string const &arguments, std::string const &session, void *payload) {
@@ -55,6 +58,16 @@ Handler::json Handler::helpHandler(std::string const &arguments, std::string con
Handler::json Handler::stopHandler(std::string const &arguments, std::string const &session, void *payload) {
auto app = (crow::SimpleApp *) payload;
+
+ auto args = tokenizeArguments(arguments);
+
+ int admin_pin;
+ std::ifstream infile("/root/.n_admin_pin");
+
+ if (args.empty() || !(infile >> admin_pin) || admin_pin != std::stoi(args.at(0))) {
+ return simple_response("Needs PIN!", session, true);
+ }
+
app->stop();
std::vector<json> annotations;
diff --git a/src/main.cpp b/src/main.cpp
index 8a8e4ba..948bc1d 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -25,40 +25,41 @@ int main() {
};
// command --> handler
- std::vector<Handler::CommandHandler> commands;
- commands.emplace_back(
+ std::vector<Handler::CommandHandler> regular_commands;
+ regular_commands.emplace_back(
Handler::CommandHandler{"wiki", Handler::wikiHandler, [createPlainDescriptionFromText]() {
return createPlainDescriptionFromText("Sends you to Wikipedia!");
}});
- commands.emplace_back(
+ regular_commands.emplace_back(
Handler::CommandHandler{"stop", Handler::stopHandler, [createPlainDescriptionFromText]() {
return createPlainDescriptionFromText("Stops the bot");
}, &app});
- commands.emplace_back(
+ regular_commands.emplace_back(
Handler::CommandHandler{"mensa", Handler::mensaHandler, [createPlainDescriptionFromText]() {
return createPlainDescriptionFromText(
"{adlershof, nord, sued} Shows the daily menu of the mensa at various places.");
}});
- commands.emplace_back(
+ regular_commands.emplace_back(
Handler::CommandHandler{"klinger", Handler::klingerHandler, [createPlainDescriptionFromText]() {
return createPlainDescriptionFromText("Greats in french. Bonjour!");
}});
- commands.emplace_back(
+ regular_commands.emplace_back(
Handler::CommandHandler{"say", Handler::sayHandler, [createPlainDescriptionFromText]() {
return createPlainDescriptionFromText("Say something!");
}});
- commands.emplace_back(
+ regular_commands.emplace_back(
Handler::CommandHandler{"relation", Handler::relationShipHandler, [createPlainDescriptionFromText]() {
return createPlainDescriptionFromText(
"[name1] [name2] Shows the result of an odd astrological religious pseudo-algorithm, based on the fact how much blessing a relationship receives by the glorious N.");
}});
- commands.emplace_back(Handler::CommandHandler{"help", Handler::helpHandler, [createPlainDescriptionFromText]() {
- return createPlainDescriptionFromText("This is my holy manual.");
- }, &commands});
+ regular_commands.emplace_back(
+ Handler::CommandHandler{"help", Handler::helpHandler, [createPlainDescriptionFromText]() {
+ return createPlainDescriptionFromText("This is my holy manual.");
+ }, &regular_commands});
CROW_ROUTE(app, "/")
.methods("POST"_method)
- ([&commands](crow::request const &request) {
+ ([&regular_commands](crow::request const &request) {
auto data = crow::json::load(request.body);
if (!data)
@@ -73,12 +74,13 @@ int main() {
std::string session = (data.count("session") ? data["session"].s() : std::string("null"));
auto itor = std::find_if(
- commands.begin(),
- commands.end(),
+ regular_commands.begin(),
+ regular_commands.end(),
[command](Handler::CommandHandler const &handler) {
return handler.command == command;
});
- if (itor != commands.end()) {
+
+ if (itor != regular_commands.end()) {
return crow::response{itor->exec(arguments, session)};
}