#include "restaurant.hpp" #include "menu.hpp" #include "meal.hpp" #include "restaurants/restaurants.hpp" #include #include #include #include std::vector days = {"MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"}; std::vector> restaurants; void get_all( const std::shared_ptr< restbed::Session > session ) { std::stringstream ss{}; bool atleastonerest = false; ss << "["; for(auto &x : restaurants) { atleastonerest = true; ss << x->jsonify() << ","; } if(atleastonerest) ss.seekp(-1, ss.cur); ss << "]"; auto res = ss.str(); session->close(restbed::OK, res, { { "Content-Length", std::to_string(res.length()) }, { "Access-Control-Allow-Origin", "*" } }); } void get( const std::shared_ptr< restbed::Session > session ) { // TODO better int day = -1; int restaurant = -1; auto request = session->get_request(); for(const auto &query_param : request->get_query_parameters()) { if(query_param.first == "day") { if(query_param.second == "monday") { day = 0; } else if(query_param.second == "tuesday") { day = 1; } else if(query_param.second == "wednesday") { day = 2; } else if(query_param.second == "thursday") { day = 3; } else { day = 4; } } if(query_param.first == "restaurant") { if(query_param.second == "udrevaka") { restaurant = 0; } else if(query_param.second == "padagali") { restaurant = 1; } else if(query_param.second == "lightofindia") { restaurant = 2; } else if(query_param.second == "ukarla") { restaurant = 3; } else { restaurant = 4; } } } if(day == -1 && restaurant == -1) { std::string error = "DIDN'T SPECIFY DAY OR RESTAURANT"; session->close(restbed::OK, error, { { "Content-Length", std::to_string(error.length()) }, { "Access-Control-Allow-Origin", "*" } }); return; } std::stringstream ss{}; if(day != -1 && restaurant != -1) { ss << "[" << restaurants[restaurant]->jsonify({day}) << "]"; } else if(day != -1) { ss << "["; bool atleastone = false; for(auto &x : restaurants) { atleastone = true; ss << x->jsonify({day}) << ","; } if(atleastone) ss.seekp(-1, ss.cur); ss << "]"; } else if(restaurant != -1) { ss << "[" << restaurants[restaurant]->jsonify() << "]"; } auto res = ss.str(); session->close(restbed::OK, res, { { "Content-Length", std::to_string(res.length()) }, { "Access-Control-Allow-Origin", "*" } }); } int main() { restaurants.emplace_back(new LunchRest::UDrevakaRestaurant()); restaurants.emplace_back(new LunchRest::PadagaliRestaurant()); restaurants.emplace_back(new LunchRest::LightOfIndiaRestaurant()); restaurants.emplace_back(new LunchRest::UKarlaRestaurant()); restaurants.emplace_back(new LunchRest::AlCaponeRestaurant()); std::cout << "Initial parsing" << std::endl; for(auto &x : restaurants) x->parse(); std::cout << "Finished parsing" << std::endl; restbed::Service service; auto getallserv = std::make_shared< restbed::Resource >(); getallserv->set_path("/get_all"); getallserv->set_method_handler( "GET", get_all ); service.publish(getallserv); auto getserv = std::make_shared< restbed::Resource >(); getserv->set_path("/get"); getserv->set_method_handler( "GET", get ); service.publish(getserv); auto ssl_settings = std::make_shared(); ssl_settings->set_http_disabled(true); ssl_settings->set_private_key(restbed::Uri("file:///home/zvon/data/programming/lunch-rest/example.key")); ssl_settings->set_certificate(restbed::Uri("file:///home/zvon/data/programming/lunch-rest/example.crt")); ssl_settings->set_temporary_diffie_hellman(restbed::Uri("file:///home/zvon/data/programming/lunch-rest/dhparams.pem")); ssl_settings->set_port(1985); auto settings = std::make_shared< restbed::Settings >(); settings->set_port(1984); settings->set_default_header( "Connection", "close" ); settings->set_ssl_settings(ssl_settings); service.start(settings); return 0; }