# HG changeset patch # User David Demelier # Date 1580904955 -3600 # Node ID f455893bf0b0e62715f50d38c09626b105704a38 # Parent ca5b8abc2d44f25c089beaedcfdd8385aed139d2 pasterd: show dates in / diff -r ca5b8abc2d44 -r f455893bf0b0 database.c --- a/database.c Wed Feb 05 20:10:00 2020 +0100 +++ b/database.c Wed Feb 05 13:15:55 2020 +0100 @@ -62,7 +62,7 @@ " , duration\n" " FROM paste\n" " WHERE visible = 1\n" - " ORDER BY date\n" + " ORDER BY date DESC\n" " LIMIT ?\n"; static const char *sql_clear = diff -r ca5b8abc2d44 -r f455893bf0b0 http.c --- a/http.c Wed Feb 05 20:10:00 2020 +0100 +++ b/http.c Wed Feb 05 13:15:55 2020 +0100 @@ -39,7 +39,6 @@ static void page_new(struct kreq *); static void page_fork(struct kreq *); static void page_paste(struct kreq *); -static void page_about(struct kreq *); static void page_download(struct kreq *); enum page { @@ -47,7 +46,6 @@ PAGE_NEW, PAGE_FORK, PAGE_PASTE, - PAGE_ABOUT, PAGE_DOWNLOAD, PAGE_LAST /* Not used. */ }; @@ -57,7 +55,6 @@ [PAGE_NEW] = "new", [PAGE_FORK] = "fork", [PAGE_PASTE] = "paste", - [PAGE_ABOUT] = "about", [PAGE_DOWNLOAD] = "download", }; @@ -66,7 +63,6 @@ [PAGE_NEW] = page_new, [PAGE_FORK] = page_fork, [PAGE_PASTE] = page_paste, - [PAGE_ABOUT] = page_about, [PAGE_DOWNLOAD] = page_download }; @@ -91,7 +87,8 @@ "name", "author", "language", - "expiration" + "expiration", + "date" }; static const char *tmpl_paste_keywords[] = { @@ -113,6 +110,7 @@ }; static const char *languages[] = { + "nohighlight" "1c", "abnf", "accesslog", @@ -224,7 +222,6 @@ "nginx", "nimrod", "nix", - "nohighlight", "nsis", "objectivec", "ocaml", @@ -343,8 +340,7 @@ khttp_puts(data->req, paste->code); break; case 5: - /* TODO: timestamp here. */ - khttp_puts(data->req, "TODO"); + khttp_puts(data->req, bstrftime("%c", localtime(&paste->timestamp))); break; case 6: khttp_puts(data->req, bprintf("%s", paste->visible ? "Yes" : "No")); @@ -382,6 +378,9 @@ case 4: khttp_puts(data->req, bprintf("%d", paste->duration)); break; + case 5: + khttp_puts(data->req, bstrftime("%c", localtime(&paste->timestamp))); + break; default: break; } @@ -396,7 +395,7 @@ struct tmpl_index *data = arg; const struct ktemplate kt = { .key = tmpl_index_pastes_keywords, - .keysz = 5, + .keysz = 6, .arg = data, .cb = tmpl_index_pastes }; @@ -466,7 +465,7 @@ } static void -page_index(struct kreq *req) +page_index_get(struct kreq *req) { struct tmpl_index data = { .req = req, @@ -491,6 +490,19 @@ } static void +page_index(struct kreq *req) +{ + switch (req->method) { + case KMETHOD_GET: + page_index_get(req); + break; + default: + page(req, NULL, KHTTP_400, "400.html"); + break; + } +} + +static void page_new_get(struct kreq *req) { struct tmpl_paste data = { @@ -564,13 +576,42 @@ } static void -page_fork(struct kreq *req) +page_fork_get(struct kreq *req) { - (void)req; + struct tmpl_paste data = { + .req = req + }; + + if (!database_get(&data.paste, req->path)) + page(req, NULL, KHTTP_404, "404.html"); + else { + const struct ktemplate kt = { + .key = tmpl_new_keywords, + .keysz = 4, + .cb = tmpl_new, + .arg = &data + }; + + page(req, &kt, KHTTP_200, "new.html"); + paste_finish(&data.paste); + } } static void -page_paste(struct kreq *req) +page_fork(struct kreq *req) +{ + switch (req->method) { + case KMETHOD_GET: + page_fork_get(req); + break; + default: + page(req, NULL, KHTTP_400, "400.html"); + break; + } +} + +static void +page_paste_get(struct kreq *req) { struct tmpl_paste data = { .req = req @@ -592,17 +633,21 @@ } static void -page_about(struct kreq *req) +page_paste(struct kreq *req) { - (void)req; + switch (req->method) { + case KMETHOD_GET: + page_paste_get(req); + break; + default: + page(req, NULL, KHTTP_400, "400.html"); + break; + } } static void -page_download(struct kreq *req) +page_download_get(struct kreq *req) { - if (req->method != KMETHOD_GET) - return; - struct paste paste; if (!database_get(&paste, req->path)) @@ -624,6 +669,19 @@ } static void +page_download(struct kreq *req) +{ + switch (req->method) { + case KMETHOD_GET: + page_download_get(req); + break; + default: + page(req, NULL, KHTTP_400, "400.html"); + break; + } +} + +static void process(struct kreq *req) { assert(req); diff -r ca5b8abc2d44 -r f455893bf0b0 themes/minimal/index-paste.html --- a/themes/minimal/index-paste.html Wed Feb 05 20:10:00 2020 +0100 +++ b/themes/minimal/index-paste.html Wed Feb 05 13:15:55 2020 +0100 @@ -2,5 +2,6 @@ @@name@@ @@author@@ @@language@@ + @@date@@ @@expiration@@ diff -r ca5b8abc2d44 -r f455893bf0b0 themes/minimal/index.html --- a/themes/minimal/index.html Wed Feb 05 20:10:00 2020 +0100 +++ b/themes/minimal/index.html Wed Feb 05 13:15:55 2020 +0100 @@ -6,6 +6,7 @@ Name Author Language + Date Expires in diff -r ca5b8abc2d44 -r f455893bf0b0 util.c --- a/util.c Wed Feb 05 20:10:00 2020 +0100 +++ b/util.c Wed Feb 05 13:15:55 2020 +0100 @@ -23,6 +23,7 @@ #include #include #include +#include #include "util.h" @@ -64,3 +65,13 @@ return buf; } + +const char * +bstrftime(const char *fmt, const struct tm *tm) +{ + static char buf[BUFSIZ]; + + strftime(buf, sizeof (buf), fmt, tm); + + return buf; +} diff -r ca5b8abc2d44 -r f455893bf0b0 util.h --- a/util.h Wed Feb 05 20:10:00 2020 +0100 +++ b/util.h Wed Feb 05 13:15:55 2020 +0100 @@ -21,6 +21,8 @@ #include +struct tm; + noreturn void die(const char *, ...); @@ -30,4 +32,7 @@ const char * bprintf(const char *, ...); +const char * +bstrftime(const char *, const struct tm *); + #endif /* !PASTER_UTIL_H */