#include "parser.hpp" #include "menu.hpp" #include "meal.hpp" #include "parsers/parsers.hpp" #include #include #include #include std::vector days = {"MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"}; std::vector> parsers; void get_all( const std::shared_ptr< restbed::Session > session ) { std::stringstream ss{}; bool atleastonerest = false; ss << "["; for(auto &x : parsers) { atleastonerest = true; ss << "{\"restaurant\": \"" << x->getRestaurant() << "\", \"menus\": ["; bool atleastonemenu = false; for(const auto &y : x->getMenus()) { atleastonemenu = true; ss << y.jsonify() << ","; } if(atleastonemenu) ss.seekp(-1, ss.cur); ss << "]},"; } if(atleastonerest) ss.seekp(-1, ss.cur); ss << "]"; auto res = ss.str(); session->close(restbed::OK, res, { { "Content-Length", std::to_string(res.length()) } }); } 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; } } } std::string error = "DIDN'T SPECIFY DAY OR RESTAURANT"; if(day == -1 && restaurant == -1) { session->close(restbed::OK, error, { { "Content-Length", std::to_string(error.length()) } }); return; } std::stringstream ss{}; if(day != -1 && restaurant != -1) { auto &x = parsers[restaurant]; ss << "[{\"restaurant\": \"" << x->getRestaurant() << "\", \"menus\": ["; ss << x->getMenus()[day].jsonify(); ss << "]}]"; } else if(day != -1) { ss << "["; bool atleastone = false; for(auto &x : parsers) { atleastone = true; ss << "{\"restaurant\": \"" << x->getRestaurant() << "\", \"menus\": ["; ss << x->getMenus()[day].jsonify(); ss << "]},"; } if(atleastone) ss.seekp(-1, ss.cur); ss << "]"; } else if(restaurant != -1) { auto &x = parsers[restaurant]; ss << "[{\"restaurant\": \"" << x->getRestaurant() << "\", \"menus\": ["; bool atleastone = false; for(auto &y : x->getMenus()) { atleastone = true; ss << y.jsonify() << ","; } if(atleastone) ss.seekp(-1, ss.cur); ss << "]}]"; } auto res = ss.str(); session->close(restbed::OK, res, { { "Content-Length", std::to_string(res.length()) } }); } int main() { parsers.emplace_back(new LunchRest::UDrevakaParser()); parsers.emplace_back(new LunchRest::PadagaliParser()); parsers.emplace_back(new LunchRest::LightOfIndiaParser()); parsers.emplace_back(new LunchRest::UKarlaParser()); parsers.emplace_back(new LunchRest::AlCaponeParser()); std::cout << "Initial parsing" << std::endl; for(auto &x : parsers) 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; }