Add Slug header support to CGI frontend
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Sun, 26 Oct 2008 21:18:34 +0000 (19:18 -0200)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Sun, 26 Oct 2008 21:18:34 +0000 (19:18 -0200)
frontend/cgi/cgi.c

index ec011ce..20f1ce7 100644 (file)
@@ -26,6 +26,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <ctype.h>
 
 static int
 uri_is_absolute (char *uri)
@@ -81,6 +82,22 @@ getbaseurl (void)
   return uri;
 }
 
+static char *
+getslug (void)
+{
+  char *origslug;
+  char *slug;
+  char *s;
+  origslug = getenv ("HTTP_SLUG");
+  if (origslug == NULL)
+    return NULL;
+  slug = strdup (origslug);
+  for (s = slug; *s; s++)
+    if (!isalnum (*s))
+      *s = '_';
+  return slug;
+}
+
 static void
 cgi_request_content_set (AtomCtx *ctx, AtomRequest *request)
 {
@@ -127,7 +144,14 @@ cgi_get_request (AtomCtx *ctx)
     }
   else if (!strcmp (method, "POST"))
     {
-      request = atom_request_new (ATOM_REQUEST_POST, path + 1);
+      char *slug = getslug ();
+      char *reqname;
+      if (slug)
+        reqname = slug;
+      else
+        reqname = strdup (path + 1);
+      request = atom_request_new (ATOM_REQUEST_POST, reqname);
+      free (reqname);
       cgi_request_content_set (ctx, request);
       if (atom_error_get (ctx) != NULL)
         {