Basic auth
This commit is contained in:
parent
62e9027911
commit
c4f1fb760a
|
@ -307,15 +307,45 @@ void message_callback(struct mosquitto* mosq, void* obj, const struct mosquitto_
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
bool is_authentificated(http_request message) {
|
||||||
|
auto headers = message.headers();
|
||||||
|
if (message.headers().find("Authorization") == headers.end()) return false;
|
||||||
|
auto authHeader = headers["Authorization"];
|
||||||
|
auto credsPos = authHeader.find("Basic");
|
||||||
|
if (credsPos == std::string::npos)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
auto base64 = authHeader.substr(credsPos + std::string("Basic").length() + 1);
|
||||||
|
if (base64.empty()) return false;
|
||||||
|
auto bytes = utility::conversions::from_base64(base64);
|
||||||
|
std::string creds(bytes.begin(), bytes.end());
|
||||||
|
auto colonPos = creds.find(":");
|
||||||
|
if (colonPos == std::string::npos) return false;
|
||||||
|
auto user = creds.substr(0, colonPos);
|
||||||
|
auto password = creds.substr(colonPos + 1, creds.size() - colonPos - 1);
|
||||||
|
|
||||||
|
if (user == "pooh" && password == "honey") {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void handle_get(http_request message){
|
void handle_get(http_request message){
|
||||||
cout<<"Handle get: "<<message.to_string()<<endl;
|
cout<<"Handle get: "<<message.to_string()<<endl;
|
||||||
|
if (is_authentificated(message)) {
|
||||||
json::value jsonObject;
|
json::value jsonObject;
|
||||||
jsonObject[U("target_height")] = json::value::number(targetH);
|
jsonObject[U("target_height")] = json::value::number(targetH);
|
||||||
message.reply(status_codes::OK,jsonObject);
|
message.reply(status_codes::OK,jsonObject);
|
||||||
|
} else {
|
||||||
|
message.reply(status_codes::Forbidden);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_post(http_request message){
|
void handle_post(http_request message){
|
||||||
cout<<"Handle post: "<<message.to_string()<<endl;
|
cout<<"Handle post: "<<message.to_string()<<endl;
|
||||||
|
|
||||||
|
if (is_authentificated(message)) {
|
||||||
json::value jsonObject;
|
json::value jsonObject;
|
||||||
try{
|
try{
|
||||||
message.extract_json()
|
message.extract_json()
|
||||||
|
@ -333,12 +363,20 @@ void handle_post(http_request message){
|
||||||
printf("Error exception:%s\n", e.what());
|
printf("Error exception:%s\n", e.what());
|
||||||
}
|
}
|
||||||
message.reply(status_codes::OK,jsonObject);
|
message.reply(status_codes::OK,jsonObject);
|
||||||
|
} else {
|
||||||
|
message.reply(status_codes::Forbidden);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_quit(http_request message){
|
void handle_quit(http_request message){
|
||||||
cout<<"Handle quit: "<<message.to_string()<<endl;
|
cout<<"Handle quit: "<<message.to_string()<<endl;
|
||||||
|
if (is_authentificated(message)) {
|
||||||
cmd = EExit;
|
cmd = EExit;
|
||||||
message.reply(status_codes::OK);
|
message.reply(status_codes::OK);
|
||||||
|
} else {
|
||||||
|
message.reply(status_codes::Forbidden);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
@ -347,7 +385,7 @@ int main()
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
web::http::experimental::listener::http_listener
|
web::http::experimental::listener::http_listener
|
||||||
listener(U("http://localhost:8080/cpprest"));
|
listener(U("http://localhost:8080/"));
|
||||||
listener.support(methods::GET,handle_get);
|
listener.support(methods::GET,handle_get);
|
||||||
listener.support(methods::POST,handle_post);
|
listener.support(methods::POST,handle_post);
|
||||||
listener.support(methods::DEL,handle_quit);
|
listener.support(methods::DEL,handle_quit);
|
||||||
|
|
Loading…
Reference in a new issue