1#include "gamesubmissions_controller.h"
2#include "filters/AuthFilter.h"
4namespace cavoke::server::controllers {
6void GameSubmissionsController::submit_game(
7 const drogon::HttpRequestPtr &req,
8 std::function<
void(
const drogon::HttpResponsePtr &)> &&callback) {
11 drogon::MultiPartParser mpp;
12 int res = mpp.parse(req);
14 return CALLBACK_STATUS_CODE(k400BadRequest);
17 auto files = mpp.getFilesMap();
19 nlohmann::json j = mpp.getParameters();
20 if (!j.contains(
"git_repo")) {
21 j[
"git_repo"] =
"<empty>";
24 GameSubmissionReq req_data;
26 req_data = j.get<GameSubmissionReq>();
28 return CALLBACK_STATUS_CODE(k400BadRequest);
31 if (req_data.package_type !=
"Git Repository" &&
32 req_data.package_type !=
"Zip Archive") {
33 return CALLBACK_STATUS_CODE(k400BadRequest);
36 auto id = drogon::utils::getUuid();
37 auto submission = req_data.to_orm(
id);
38 if (req_data.package_type ==
"Zip Archive") {
40 files.at(
"client_zip").saveAs(
id +
"-client.zip");
41 files.at(
"server_zip").saveAs(
id +
"-server.zip");
43 return CALLBACK_STATUS_CODE(k400BadRequest);
47 mp_submissions.insert(submission);
49 LOG_INFO <<
"New game submission! Game: " << req_data.display_name;
50 auto resp = newStatusCodeResponse(drogon::k200OK);
52 "Thanks for your game submission! We will review it and publish your "
54 return callback(resp);