blob: 949bdc1294bed182b254574a9f1f8aa3e30bcb1c [file] [log] [blame]
Ed Tanousb4d29f42017-03-24 16:39:25 -07001#include <web_kvm.hpp>
Ed Tanous7d3dba42017-04-05 13:04:39 -07002#include <webassets.hpp>
Ed Tanousb4d29f42017-03-24 16:39:25 -07003#include "ssl_key_handler.hpp"
4
Ed Tanousf9273472017-02-28 16:05:13 -08005#include "crow/app.h"
Ed Tanousc4771fb2017-03-13 13:39:49 -07006#include "crow/ci_map.h"
Ed Tanousf9273472017-02-28 16:05:13 -08007#include "crow/common.h"
8#include "crow/dumb_timer_queue.h"
9#include "crow/http_connection.h"
Ed Tanousc4771fb2017-03-13 13:39:49 -070010#include "crow/http_parser_merged.h"
Ed Tanousf9273472017-02-28 16:05:13 -080011#include "crow/http_request.h"
12#include "crow/http_response.h"
13#include "crow/http_server.h"
14#include "crow/json.h"
15#include "crow/logging.h"
16#include "crow/middleware.h"
17#include "crow/middleware_context.h"
18#include "crow/mustache.h"
19#include "crow/parser.h"
Ed Tanousc4771fb2017-03-13 13:39:49 -070020#include "crow/query_string.h"
Ed Tanousf9273472017-02-28 16:05:13 -080021#include "crow/routing.h"
Ed Tanous0fdddb12017-02-28 11:06:34 -080022#include "crow/settings.h"
23#include "crow/socket_adaptors.h"
Ed Tanous0fdddb12017-02-28 11:06:34 -080024#include "crow/utility.h"
Ed Tanous0fdddb12017-02-28 11:06:34 -080025#include "crow/websocket.h"
Ed Tanous0fdddb12017-02-28 11:06:34 -080026
Ed Tanous5f34a9c2017-02-28 12:35:13 -080027#include "color_cout_g3_sink.hpp"
Ed Tanous99923322017-03-03 14:21:24 -080028#include "webassets.hpp"
Ed Tanousf9273472017-02-28 16:05:13 -080029
Ed Tanous7d3dba42017-04-05 13:04:39 -070030#include "security_headers_middleware.hpp"
31#include "token_authorization_middleware.hpp"
Ed Tanousb4d29f42017-03-24 16:39:25 -070032
33#include <boost/asio.hpp>
34#include <boost/endian/arithmetic.hpp>
35
Ed Tanous0fdddb12017-02-28 11:06:34 -080036#include <iostream>
Ed Tanousc4771fb2017-03-13 13:39:49 -070037#include <memory>
Ed Tanous0fdddb12017-02-28 11:06:34 -080038#include <string>
Ed Tanousc4771fb2017-03-13 13:39:49 -070039#include <unordered_set>
Ed Tanous9b65f1f2017-03-07 15:17:13 -080040
Ed Tanous99923322017-03-03 14:21:24 -080041int main(int argc, char** argv) {
Ed Tanous9b65f1f2017-03-07 15:17:13 -080042 auto worker(g3::LogWorker::createLogWorker());
Ed Tanous1ccd57c2017-03-21 13:15:58 -070043 std::string logger_name("bmcweb");
44 std::string folder("/tmp/");
45 auto handle = worker->addDefaultLogger(logger_name, folder);
Ed Tanous99923322017-03-03 14:21:24 -080046 g3::initializeLogging(worker.get());
Ed Tanous1ccd57c2017-03-21 13:15:58 -070047 auto sink_handle = worker->addSink(std::make_unique<crow::ColorCoutSink>(),
48 &crow::ColorCoutSink::ReceiveLogMessage);
Ed Tanous0fdddb12017-02-28 11:06:34 -080049
Ed Tanous99923322017-03-03 14:21:24 -080050 std::string ssl_pem_file("server.pem");
51 ensuressl::ensure_openssl_key_present_and_valid(ssl_pem_file);
Ed Tanous0fdddb12017-02-28 11:06:34 -080052
Ed Tanous7d3dba42017-04-05 13:04:39 -070053 crow::App<crow::TokenAuthorizationMiddleware, crow::SecurityHeadersMiddleware>
54 app;
Ed Tanousb4d29f42017-03-24 16:39:25 -070055
Ed Tanous99923322017-03-03 14:21:24 -080056 crow::webassets::request_routes(app);
Ed Tanousc81ca422017-03-21 16:18:49 -070057 crow::kvm::request_routes(app);
Ed Tanous0fdddb12017-02-28 11:06:34 -080058
Ed Tanous9b65f1f2017-03-07 15:17:13 -080059 crow::logger::setLogLevel(crow::LogLevel::INFO);
Ed Tanousc4771fb2017-03-13 13:39:49 -070060 CROW_ROUTE(app, "/systeminfo")
61 ([]() {
62
63 crow::json::wvalue j;
64 j["device_id"] = 0x7B;
65 j["device_provides_sdrs"] = true;
66 j["device_revision"] = true;
67 j["device_available"] = true;
68 j["firmware_revision"] = "0.68";
69
70 j["ipmi_revision"] = "2.0";
71 j["supports_chassis_device"] = true;
72 j["supports_bridge"] = true;
73 j["supports_ipmb_event_generator"] = true;
74 j["supports_ipmb_event_receiver"] = true;
75 j["supports_fru_inventory_device"] = true;
76 j["supports_sel_device"] = true;
77 j["supports_sdr_repository_device"] = true;
78 j["supports_sensor_device"] = true;
79
80 j["firmware_aux_revision"] = "0.60.foobar";
81
82 return j;
83 });
84
Ed Tanousc4771fb2017-03-13 13:39:49 -070085 CROW_ROUTE(app, "/ipmiws")
86 .websocket()
87 .onopen([&](crow::websocket::connection& conn) {
88
89 })
Ed Tanous1ccd57c2017-03-21 13:15:58 -070090 .onclose(
91 [&](crow::websocket::connection& conn, const std::string& reason) {
Ed Tanousc4771fb2017-03-13 13:39:49 -070092
Ed Tanous1ccd57c2017-03-21 13:15:58 -070093 })
94 .onmessage([&](crow::websocket::connection& conn, const std::string& data,
95 bool is_binary) {
Ed Tanousc4771fb2017-03-13 13:39:49 -070096 boost::asio::io_service io_service;
Ed Tanous1ccd57c2017-03-21 13:15:58 -070097 using boost::asio::ip::udp;
98 udp::resolver resolver(io_service);
99 udp::resolver::query query(udp::v4(), "10.243.48.31", "623");
100 udp::endpoint receiver_endpoint = *resolver.resolve(query);
101
102 udp::socket socket(io_service);
103 socket.open(udp::v4());
104
105 socket.send_to(boost::asio::buffer(data), receiver_endpoint);
106
107 std::array<char, 255> recv_buf;
108
109 udp::endpoint sender_endpoint;
110 size_t len =
111 socket.receive_from(boost::asio::buffer(recv_buf), sender_endpoint);
112 // TODO(ed) THis is ugly. Find a way to not make a copy (ie, use
Ed Tanous7d3dba42017-04-05 13:04:39 -0700113 // std::string::data() to
Ed Tanous1ccd57c2017-03-21 13:15:58 -0700114 std::string str(std::begin(recv_buf), std::end(recv_buf));
115 LOG(DEBUG) << "Got " << str << "back \n";
116 conn.send_binary(str);
117
Ed Tanousc4771fb2017-03-13 13:39:49 -0700118 });
119
Ed Tanous1ccd57c2017-03-21 13:15:58 -0700120 app.port(18080)
121 //.ssl(std::move(ensuressl::get_ssl_context(ssl_pem_file)))
122 .run();
Ed Tanous0fdddb12017-02-28 11:06:34 -0800123}