summaryrefslogtreecommitdiffhomepage
path: root/dev/examples/cgi
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-07-26 01:47:32 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-07-26 01:47:32 +0100
commitc52dbf5513ae7f106634967162da5cfb01dc5af3 (patch)
treeb6715d0fdacebd48491b9b05cf85f1d92028f84b /dev/examples/cgi
parent01565adb9cf5ef991196f56c7f5f7b6161daa005 (diff)
feat: SOCL v1.0.2, changelog soon!v1.0.2
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/examples/cgi')
-rw-r--r--dev/examples/cgi/CMakeLists.txt12
-rw-r--r--dev/examples/cgi/cgi.cc91
2 files changed, 103 insertions, 0 deletions
diff --git a/dev/examples/cgi/CMakeLists.txt b/dev/examples/cgi/CMakeLists.txt
new file mode 100644
index 0000000..391899f
--- /dev/null
+++ b/dev/examples/cgi/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+cmake_minimum_required(VERSION 3.15...3.31)
+
+project(
+ CGI
+ VERSION 1.0
+ LANGUAGES CXX)
+
+add_executable(CGI cgi.cc)
+
+set_property(TARGET CGI PROPERTY CXX_STANDARD 20)
+target_include_directories(CGI PUBLIC ../../)
diff --git a/dev/examples/cgi/cgi.cc b/dev/examples/cgi/cgi.cc
new file mode 100644
index 0000000..b4c0b34
--- /dev/null
+++ b/dev/examples/cgi/cgi.cc
@@ -0,0 +1,91 @@
+/*
+ cgi example
+ written by Amlal El Mahrouss.
+ licensed under the MIT license
+ */
+
+#include <lib/utility/cgi.hpp>
+#include <fstream>
+#include <sstream>
+#include <string>
+
+const std::string g_not_found = R"(
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <title>error | snu-lib</title>
+ <style>
+ body {
+ font-family: monospace;
+ background: white;
+ color: black;
+ margin: 2em;
+ }
+ h1 {
+ font-size: 1.5em;
+ }
+ hr {
+ border: none;
+ border-top: 1px solid #ccc;
+ }
+ table {
+ width: 100%;
+ border-collapse: collapse;
+ }
+ td {
+ padding: 0.2em 0.5em;
+ }
+ td:first-child {
+ white-space: nowrap;
+ }
+ a {
+ color: blue;
+ text-decoration: none;
+ }
+ a:hover {
+ text-decoration: underline;
+ }
+ </style>
+</head>
+<body>
+ <h1>Uh Oh!</h1>
+ <address>No index file was found in this directory.</address>
+ <hr>
+ <table>
+ <tr><th>Name</th></tr>
+ <tr><td colspan="3"><hr></td></tr>
+
+ <tr>
+ <td><a href="javascript:window.location.reload();">Refresh</a></td>
+ </tr>
+
+ <tr><td colspan="3"><hr></td></tr>
+ </table>
+ <address>snu's Common Gateway Server.</address>
+</body>
+</html>
+)";
+
+/* finally test it */
+/* @brief this stub loads a 'index.html' or returns an error message if not found. */
+int main(int argc, char** argv)
+{
+ // ... let's assume we serve data.
+
+ snu::cgi::cgi_writer writer;
+ std::stringstream ss_file;
+
+ std::ifstream fp("index.html");
+
+ if (fp.good())
+ ss_file << fp.rdbuf();
+ else
+ ss_file << g_not_found;
+
+ fp.close();
+
+ writer.eval_html(ss_file);
+
+ return 0;
+}