Frontend maps request to Atom ID before retrieving resource
[cascardo/atompub.git] / frontend / cgi / cgi.c
index 1209ceb..736fb68 100644 (file)
@@ -46,21 +46,34 @@ cgi_serve_request (AtomCtx *ctx)
   if (!strcmp (method, "GET"))
     {
       AtomID *id;
-      AtomResource *atom;
+      AtomEntry *atom;
       AtomError *error;
-      id = atom_id_new (path);
-      atom = atom_retrieve_resource (ctx, id);
-      atom_id_delete (id);
+      char *req;
+      id = atom_id_new_from_frontend (ctx, path);
+      if (id == NULL || (req = atom_id_to_backend (ctx, id)) == NULL)
+        {
+          atom = NULL;
+          error = atom_error_new ();
+          atom_error_code_set (error, 404);
+          atom_error_message_set (error, "Resource not found");
+          atom_error_set (ctx, error);
+        }
+      else
+        {
+          atom = atom_retrieve_entry (ctx, req);
+        }
+      if (id != NULL)
+        atom_id_delete (id);
       if (atom)
        {
          char * str;
          size_t len;
          char *header = "Content-type: application/atom+xml\n\n";
          write (1, header, strlen (header));
-         atom_resource_string (atom, &str, &len);
+         atom_entry_string (atom, &str, &len);
          write (1, str, len);
          g_free (str);
-         atom_resource_delete (atom);
+         atom_entry_delete (atom);
        }
       else if ((error = atom_error_get (ctx)) != NULL)
        {
@@ -78,3 +91,12 @@ cgi_serve_request (AtomCtx *ctx)
       fprintf (stdout, "Status: 501 Not Implemented\n\n");
     }
 }
+
+AtomFrontend *
+cgi_frontend (void)
+{
+  AtomFrontend *frontend;
+  frontend = atom_frontend_new ();
+  atom_frontend_map_entries_set (frontend, atom_map_frontend_requests);
+  return frontend;
+}