From e408a73ff81c1270e96e2cffca7a56ac26413c97 Mon Sep 17 00:00:00 2001 From: nathansmith Date: Mon, 12 May 2025 11:33:12 -0600 Subject: Working on guest book scheme still --- cgi-bin/guest_book.cgi | 285 +++++++++++++++++++++---------------------------- 1 file changed, 122 insertions(+), 163 deletions(-) (limited to 'cgi-bin/guest_book.cgi') diff --git a/cgi-bin/guest_book.cgi b/cgi-bin/guest_book.cgi index 97a7403..b2baf4f 100755 --- a/cgi-bin/guest_book.cgi +++ b/cgi-bin/guest_book.cgi @@ -1,164 +1,123 @@ -#! /usr/bin/env python3 - -import cgi -import json -import datetime -import html - -def handle_fields(): - form = cgi.FieldStorage() - - name = form.getvalue("name") - url = form.getvalue("url") - message = form.getvalue("message") - - # Nothign was submitted. - if name is None and url is None and message is None: - return "" - - if name is None: - return "

name is required

" - elif message is None: - return "

please write a silly something (:

" - - url = "" if url is None else url - - # Make the names safe. - name = html.escape(name) - url = html.escape(url) - message = html.escape(message) - - guest_book = [] - - # Open data if already there. - try: - with open("guest_book.json", "r") as fp: - guest_book = json.load(fp) - except FileNotFoundError: - pass - - # Already in list. - for guest in guest_book: - if guest["name"] == name and guest["url"] == url and guest["message"] == message: - return "

You already been added

" - - date = datetime.datetime.now() - guest_entry = {"name": name, "url": url, "message": message, "date": date.strftime("%B, %d %Y")} - - # Dump guest to file. - with open("guest_book.json", "w") as fp: - guest_book.append(guest_entry) - json.dump(guest_book, fp, indent=4) - - return "

You been added to the guest book yippe (:

\"yippee!\"/" - -def get_guest_html_from_list(): - guest_html = "" - - try: - with open("guest_book.json", "r") as fp: - for guest in json.load(fp)[::-1]: - guest_table = """ - - - - - - - - -
- {name} {url} --- signed {date} -

{message}

- """ - - guest_table = guest_table.format(name=guest["name"], url=guest["url"], - date=guest["date"], message=guest["message"]) - guest_html += guest_table - except FileNotFoundError: - guest_html = """ - - - - -
-

No guest have been added ): But you can be the first!

-
- """ - - return guest_html - -def display_html(fields_reponse): - print("Content-Type: text/html") - - html_text = """ - - - - - Guest Book - - - - - - Back to home page - -
- - - - -
-

Sign my fucking guest book

-
- Name - -
- Website (Optional) - -

- Write a little silly something -
- -
- You can't delete/edit it afterwards -
-

- Be nice! Dont be a fucking ass. -

- {fields_reponse} -
- - {guest_html} -
- - - """ - - html_text = html_text.format( - fields_reponse=fields_reponse, - guest_html=get_guest_html_from_list() - ) - - print(html_text) - -fields_reponse = handle_fields() -display_html(fields_reponse) +#! /usr/bin/guile \ +-e main -s +!# + +(use-modules (ice-9 exceptions)) +(use-modules (json)) + +(define guest-book-json-file "cgi-bin/guest_book.json") + +;; Progress form data +(define (get-form) + (let ((query (getenv "QUERY_STRING")) + (form '())) + (cond ((= (string-length query) 0) #f) + (else + (set! form (string-split query #\&)) + (for-each + (lambda (item) + (set! item (string-split item #\=))) + form) + form)))) + +(define (handle-fields) + (let ((form (get-form))) + (if form + (display form)))) + +;; Display a guest in the guest book +(define (display-guest guest) + (let ((date (cdr (list-ref guest 0))) + (message (cdr (list-ref guest 1))) + (url (cdr (list-ref guest 2))) + (name (cdr (list-ref guest 3)))) + (format #t " \n\ + \n\ +
\n\ + ~a ~a --- signed ~a\n\ +
\n\ +

~a

\n\ +
\n\n" name url url date message))) + +;; Display pretty much everything +(define (display-guest-book) + (display "Content-Type: text/html\n\n\ +\n\ +\n\ +\n\ + Guest Book\n\ + \n\ +\n\ +\n\ + \"Back\n\ +
\n\ + \n\ + \n\ + \n\ + \n\ +
\n\ +

Sign my fucking guest book

\n\ +
\n\ + Name\n\ + \n\ +
\n\ + Website (Optional)\n\ + \n\ + \n\ +

\n\ + Write a little silly something\n\ +
\n\ + \n\ +
\n\ + \n\ + You can't delete/edit it afterwards\n\ +
\n\ +

\n\ + Be nice! Dont be a fucking ass.\n\ +

\n") + (handle-fields) + (display "
\n\n") + + ;; Try to read the guest book json + (with-exception-handler + (lambda (error) + (display " \n\ + \n\ +
\n\ +

No guest have been added ): But you can be the first!

\n\ +
\n")) + (lambda () + (call-with-input-file guest-book-json-file + (lambda (fp) + (letrec ((guest-book (json->scm fp)) + (guest-loop + (lambda (index) + (display-guest (vector-ref guest-book index)) + (if (< index (- (vector-length guest-book) 1)) + (guest-loop (+ index 1)))))) + (guest-loop 0))))) + #:unwind? #t) + + (display "
\n\ +\n\ +\n")) + +(define (main args) + (display-guest-book)) -- cgit v1.2.3