diff --git a/src/Html.c b/src/Html.c index fcca083..21e6116 100644 --- a/src/Html.c +++ b/src/Html.c @@ -44,12 +44,18 @@ HtmlBegin(FILE * stream, char *title) "" "" "%s | Telodendria" + ,title + ); + + fprintf(stream, "" + ); + + fprintf(stream, "" "" "
"
-            ,title);
+            );
 
     for (i = 0; i < TELODENDRIA_LOGO_HEIGHT; i++)
     {
diff --git a/src/Routes/RouteStatic.c b/src/Routes/RouteStatic.c
index bc7d031..7c55fbb 100644
--- a/src/Routes/RouteStatic.c
+++ b/src/Routes/RouteStatic.c
@@ -23,15 +23,39 @@
  */
 #include 
 #include 
+#include 
 
 ROUTE_IMPL(RouteStatic, args)
 {
     FILE *stream = HttpStream(args->context);
+    char *pathPart = MATRIX_PATH_POP(args->path);
 
     HttpResponseHeader(args->context, "Content-Type", "text/html");
     HttpSendHeaders(args->context);
 
-    StaticItWorks(stream);
+    if (!pathPart)
+    {
+        StaticItWorks(stream);
+    }
+    else if (MATRIX_PATH_EQUALS(pathPart, "client"))
+    {
+        Free(pathPart);
+        pathPart = MATRIX_PATH_POP(args->path);
 
+        if (MATRIX_PATH_EQUALS(pathPart, "login"))
+        {
+            StaticLogin(stream);
+        }
+        else
+        {
+            StaticError(stream, HTTP_NOT_FOUND);
+        }
+    }
+    else
+    {
+        StaticError(stream, HTTP_NOT_FOUND);
+    }
+
+    Free(pathPart);
     return NULL;
 }
diff --git a/src/Static/StaticError.c b/src/Static/StaticError.c
new file mode 100644
index 0000000..12cfd7a
--- /dev/null
+++ b/src/Static/StaticError.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2022-2023 Jordan Bancino <@jordan:bancino.net>
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include 
+#include 
+#include 
+
+void
+StaticError(FILE * stream, HttpStatus error)
+{
+    char title[10];
+
+    sprintf(title, "Error %d", error);
+
+    HtmlBegin(stream, title);
+
+    fprintf(stream, "

%s

", + HttpStatusToString(error)); + + HtmlEnd(stream); +} diff --git a/src/Static/StaticLogin.c b/src/Static/StaticLogin.c new file mode 100644 index 0000000..6383d9f --- /dev/null +++ b/src/Static/StaticLogin.c @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2022-2023 Jordan Bancino <@jordan:bancino.net> + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include +#include + +void +StaticLogin(FILE * stream) +{ + HtmlBegin(stream, "Log In"); + + fprintf(stream, + "
" + "
" + "" + "" + "" + "" + "
" + "" + "
" + "
" + ); + + fprintf(stream, + "" + ); + + HtmlEnd(stream); +} diff --git a/src/include/Static.h b/src/include/Static.h index 1ad13a5..3a4f13a 100644 --- a/src/include/Static.h +++ b/src/include/Static.h @@ -26,10 +26,15 @@ #include +#include + extern void StaticItWorks(FILE *); extern void StaticLogin(FILE *); +extern void + StaticError(FILE *, HttpStatus); + #endif /* TELODENDRIA_STATIC_H */