diff options
Diffstat (limited to 'cgi-bin')
| -rwxr-xr-x | cgi-bin/guest_book.cgi | 285 | ||||
| -rwxr-xr-x | cgi-bin/guest_book.py | 164 | ||||
| -rwxr-xr-x | cgi-bin/guest_book_scm.cgi | 104 | 
3 files changed, 286 insertions, 267 deletions
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 "<p>name is required</p>" -    elif message is None: -        return "<p>please write a silly something (:</p>" - -    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 "<p>You already been added</p>" - -    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 "<p>You been added to the guest book yippe (:</p><img src=\"../images/yippee.gif\" alt=\"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 = """ -                    <table border="1" width="60%"> -                        <tr> -                            <td> -                                <b>{name}</b> <a href="{url}" target="_blank">{url}</a> --- signed {date} -                            </td>  -                        </tr> - -                        <tr> -                            <td><p>{message}</p></td> -                        </tr> -                    </table> -                """ - -                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 =  """ -            <table border="1" width="60%"> -                <tr> -                    <td> -                        <p>No guest have been added ): But you can be the first!</p> -                    </td> -                </tr> -            </table> -        """ - -    return guest_html - -def display_html(fields_reponse): -    print("Content-Type: text/html") -     -    html_text = """ -        <!DOCTYPE html> -        <html> -         -        <head> -            <title>Guest Book</title> - -        <style> -             -        body {{ -            color: black; -            background-image: url('../images/guest_book_background.png'); -        }} - -        table {{ -            color: black; -            background-color: #bebebe; -            margin-top: 10px; -            margin-bottom: 10px; -            margin-left: 10px; -            margin-right: 10px; -        }} - -        </style> -        </head> - -        <body> -            <a href="../index.html"><img src="../images/back_home.png" alt="Back to home page"/></a> -             -            <center> -                <table border="1" width="60%"> -                    <tr> -                        <td> -                            <h3>Sign my fucking guest book</h3> -                            <form action = "guest_book.cgi" method = "get"> -                                <lable for = "name" maxlength="100">Name</lable> -                                <input type = "text" name = "name"/> -                                <br/> -                                <lable for = "url" maxlength="256">Website (Optional)</lable> -                                <input type = "text" name = "url"/> -                                <br/><br/> -                                <lable for = "message">Write a little silly something</lable> -                                <br/> -                                <textarea type = "text" name = "message" rows = "4" cols = "40" maxlength="512"></textarea> -                                <br/> -                                <input type = "submit" value = "Fucking submit"> <b>You can't delete/edit it afterwards</b> -                            </form> -                            <p> -                                <b>Be nice! Dont be a fucking ass.</b> -                            </p> -                            {fields_reponse} -                        </td> -                    </tr> -                </table> - -            {guest_html} -            </center> -        </body> -        </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 "    <table border=\"1\" width=\"60%\">\n\ +      <tr><td>\n\ +      <b>~a</b> <a href=\"~a\" target=\"_blank\">~a</a> --- signed ~a\n\ +      </td></tr>\n\ +      <tr><td>\n\ +      <p>~a</p>\n\ +    </table>\n\n" name url url date message))) + +;; Display pretty much everything +(define (display-guest-book) +  (display "Content-Type: text/html\n\n\ +<!DOCTYPE html>\n\ +<html>\n\ +<head>\n\ +  <title>Guest Book</title>\n\ +  <style>\n\ +body {\n\ +    color: black;\n\ +    background-image: url('../images/guest_book_background.png');\n\ +}\n\ +\n\ +table {\n\ +    color: black;\n\ +    background-color: #bebebe;\n\ +    margin-top: 10px;\n\ +    margin-bottom: 10px;\n\ +    margin-left: 10px;\n\ +    margin-right: 10px;\n\ +}\n\ +</style>\n\ +</head>\n\ +<body>\n\ +  <a href=\"../index.html\"><img src=\"../images/back_home.png\"\n\ +  alt=\"Back to home page\"/></a>\n\ +  <center>\n\ +    <table border=\"1\" width=\"60%\">\n\ +      <tr>\n\ +        <td>\n\ +          <h3>Sign my fucking guest book</h3>\n\ +          <form action = \"guest_book.cgi\" method = \"get\">\n\ +            <lable for = \"name\" maxlength=\"100\">Name</lable>\n\ +            <input type = \"text\" name = \"name\"/>\n\ +            <br/>\n\ +            <lable for = \"url\" maxlength=\"256\">Website (Optional)\n\ +            </lable>\n\ +            <input type = \"text\" name = \"url\"/>\n\ +            <br/><br/>\n\ +            <lable for = \"message\">Write a little silly something</lable>\n\ +            <br/>\n\ +            <textarea type = \"text\" name = \"message\" rows = \"4\"\n\ +            cols = \"40\" maxlength=\"512\"></textarea>\n\ +            <br/>\n\ +            <input type = \"submit\" value = \"Fucking submit\">\n\ +            <b>You can't delete/edit it afterwards</b>\n\ +          </form>\n\ +          <p>\n\ +            <b>Be nice! Dont be a fucking ass.</b>\n\ +          </p>\n") +  (handle-fields) +  (display "        </td>\n\ +      </tr>\n\ +    </table>\n\n") + +  ;; Try to read the guest book json +  (with-exception-handler +      (lambda (error) +        (display "    <table border=\"1\" width=\"60%\">\n\ +      <tr><td>\n\ +      <p>No guest have been added ): But you can be the first!</p>\n\ +      </td></tr>\n\ +    </table>\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 "  </center>\n\ +</body>\n\ +</html>\n")) + +(define (main args) +  (display-guest-book)) diff --git a/cgi-bin/guest_book.py b/cgi-bin/guest_book.py new file mode 100755 index 0000000..97a7403 --- /dev/null +++ b/cgi-bin/guest_book.py @@ -0,0 +1,164 @@ +#! /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 "<p>name is required</p>" +    elif message is None: +        return "<p>please write a silly something (:</p>" + +    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 "<p>You already been added</p>" + +    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 "<p>You been added to the guest book yippe (:</p><img src=\"../images/yippee.gif\" alt=\"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 = """ +                    <table border="1" width="60%"> +                        <tr> +                            <td> +                                <b>{name}</b> <a href="{url}" target="_blank">{url}</a> --- signed {date} +                            </td>  +                        </tr> + +                        <tr> +                            <td><p>{message}</p></td> +                        </tr> +                    </table> +                """ + +                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 =  """ +            <table border="1" width="60%"> +                <tr> +                    <td> +                        <p>No guest have been added ): But you can be the first!</p> +                    </td> +                </tr> +            </table> +        """ + +    return guest_html + +def display_html(fields_reponse): +    print("Content-Type: text/html") +     +    html_text = """ +        <!DOCTYPE html> +        <html> +         +        <head> +            <title>Guest Book</title> + +        <style> +             +        body {{ +            color: black; +            background-image: url('../images/guest_book_background.png'); +        }} + +        table {{ +            color: black; +            background-color: #bebebe; +            margin-top: 10px; +            margin-bottom: 10px; +            margin-left: 10px; +            margin-right: 10px; +        }} + +        </style> +        </head> + +        <body> +            <a href="../index.html"><img src="../images/back_home.png" alt="Back to home page"/></a> +             +            <center> +                <table border="1" width="60%"> +                    <tr> +                        <td> +                            <h3>Sign my fucking guest book</h3> +                            <form action = "guest_book.cgi" method = "get"> +                                <lable for = "name" maxlength="100">Name</lable> +                                <input type = "text" name = "name"/> +                                <br/> +                                <lable for = "url" maxlength="256">Website (Optional)</lable> +                                <input type = "text" name = "url"/> +                                <br/><br/> +                                <lable for = "message">Write a little silly something</lable> +                                <br/> +                                <textarea type = "text" name = "message" rows = "4" cols = "40" maxlength="512"></textarea> +                                <br/> +                                <input type = "submit" value = "Fucking submit"> <b>You can't delete/edit it afterwards</b> +                            </form> +                            <p> +                                <b>Be nice! Dont be a fucking ass.</b> +                            </p> +                            {fields_reponse} +                        </td> +                    </tr> +                </table> + +            {guest_html} +            </center> +        </body> +        </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) + diff --git a/cgi-bin/guest_book_scm.cgi b/cgi-bin/guest_book_scm.cgi deleted file mode 100755 index 3963b25..0000000 --- a/cgi-bin/guest_book_scm.cgi +++ /dev/null @@ -1,104 +0,0 @@ -#! /usr/bin/guile \ --e main -s -!# - -(use-modules (ice-9 exceptions)) -(use-modules (json)) - -(define guest-book-json-file "cgi-bin/guest_book.json") - -;; 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 "    <table border=\"1\" width=\"60%\">\n\ -      <tr><td>\n\ -      <b>~a</b> <a href=\"~a\" target=\"_blank\">~a</a> --- signed ~a\n\ -      </td></tr>\n\ -      <tr><td>\n\ -      <p>~a</p>\n\ -    </table>\n\n" name url url date message))) - -;; Display pretty much everything -(define (display-guest-book) -  (display "Content-Type: text/html\n\n\ -<!DOCTYPE html>\n\ -<html>\n\ -<head>\n\ -  <title>Guest Book</title>\n\ -  <style>\n\ -body {\n\ -    color: black;\n\ -    background-image: url('../images/guest_book_background.png');\n\ -}\n\ -\n\ -table {\n\ -    color: black;\n\ -    background-color: #bebebe;\n\ -    margin-top: 10px;\n\ -    margin-bottom: 10px;\n\ -    margin-left: 10px;\n\ -    margin-right: 10px;\n\ -}\n\ -</style>\n\ -</head>\n\ -<body>\n\ -  <a href=\"../index.html\"><img src=\"../images/back_home.png\"\n\ -  alt=\"Back to home page\"/></a>\n\ -  <center>\n\ -    <table border=\"1\" width=\"60%\">\n\ -      <tr>\n\ -        <td>\n\ -          <h3>Sign my fucking guest book</h3>\n\ -          <form action = \"guest_book.cgi\" method = \"get\">\n\ -            <lable for = \"name\" maxlength=\"100\">Name</lable>\n\ -            <input type = \"text\" name = \"name\"/>\n\ -            <br/>\n\ -            <lable for = \"url\" maxlength=\"256\">Website (Optional)\n\ -            </lable>\n\ -            <input type = \"text\" name = \"url\"/>\n\ -            <br/><br/>\n\ -            <lable for = \"message\">Write a little silly something</lable>\n\ -            <br/>\n\ -            <textarea type = \"text\" name = \"message\" rows = \"4\"\n\ -            cols = \"40\" maxlength=\"512\"></textarea>\n\ -            <br/>\n\ -            <input type = \"submit\" value = \"Fucking submit\">\n\ -            <b>You can't delete/edit it afterwards</b>\n\ -          </form>\n\ -          <p>\n\ -            <b>Be nice! Dont be a fucking ass.</b>\n\ -          </p>\n\ -        </td>\n\ -      </tr>\n\ -    </table>\n\n") - -  ;; Try to read the guest book json -  (with-exception-handler -      (lambda (error) -        (display "    <table border=\"1\" width=\"60%\">\n\ -      <tr><td>\n\ -      <p>No guest have been added ): But you can be the first!</p>\n\ -      </td></tr>\n\ -    </table>\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 "  </center>\n\ -</body>\n\ -</html>\n")) - -(define (main args) -  (display-guest-book)) -  | 
