birdbadge/main.cpp

48 lines
1.2 KiB
C++

#include <iostream>
#include <string>
#include <fcgio.h>
#include <fcgiapp.h>
#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);
}
}