This commit is contained in:
Blue 2023-04-11 20:06:36 -03:00
parent 65bd8192d4
commit ceae213b03
Signed by: blue
GPG Key ID: 9B203B252A63EE38
2 changed files with 60 additions and 4 deletions

View File

@ -1,7 +1,22 @@
cmake_minimum_required(VERSION 3.0)
project(birdbadge)
project(birdbadge
VERSION 0.0.1
DESCRIPTION "Bird Badge"
LANGUAGES CXX
)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(PkgConfig REQUIRED)
pkg_check_modules(FCGI fcgi)
add_executable(birdbadge main.cpp)
target_link_libraries(birdbadge
fcgi
fcgi++
)
install(TARGETS birdbadge RUNTIME DESTINATION bin)

View File

@ -1,6 +1,47 @@
#include <iostream>
#include <string>
#include <fcgio.h>
#include <fcgiapp.h>
int main(int argc, char **argv) {
std::cout << "Hello, world!" << std::endl;
return 0;
#include <unistd.h>
constexpr static const char* GET("GET");
constexpr static const char* REQUEST_METHOD("REQUEST_METHOD");
constexpr static const char* SCRIPT_NAME("SCRIPT_NAME");
constexpr static const char* status405("Status: 405 Method Not Allowed");
constexpr static const char* contentTypeHtml("Content-type: text/html");
constexpr static const char* headerEnd("\n\n");
void handleRequest(FCGX_Request& request) {
fcgi_streambuf cin_fcgi_streambuf(request.in);
fcgi_streambuf cout_fcgi_streambuf(request.out);
fcgi_streambuf cerr_fcgi_streambuf(request.err);
std::ostream os{&cout_fcgi_streambuf};
std::ostream errs{&cerr_fcgi_streambuf};
std::istream is{&cin_fcgi_streambuf};
std::string requestMethod(FCGX_GetParam(REQUEST_METHOD, request.envp));
if (requestMethod != GET) {
os << status405;
return;
}
std::string scriptName{FCGX_GetParam(SCRIPT_NAME, request.envp)};
os << contentTypeHtml;
os << headerEnd;
os << scriptName << "\n";
}
int main() {
FCGX_Request request;
FCGX_Init();
FCGX_InitRequest(&request, 0, 0);
while (FCGX_Accept_r(&request) == 0) {
handleRequest(request);
}
}