diff options
| -rwxr-xr-x | cgi-bin/guest_book.cgi | 165 | ||||
| -rw-r--r-- | images/guest_book_background.png | bin | 0 -> 28335 bytes | |||
| -rw-r--r-- | images/yippee.gif | bin | 0 -> 204603 bytes | |||
| -rw-r--r-- | index.html | 1 | ||||
| -rw-r--r-- | requirements.txt | 1 | 
5 files changed, 167 insertions, 0 deletions
diff --git a/cgi-bin/guest_book.cgi b/cgi-bin/guest_book.cgi new file mode 100755 index 0000000..bc2f803 --- /dev/null +++ b/cgi-bin/guest_book.cgi @@ -0,0 +1,165 @@ +#! /usr/bin/env python + +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> +            <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</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> +                            {fields_reponse} +                        </td> +                    </tr> + +                    <tr> +                        <td> +                            <h2><a href="../index.html">--> Back to main page</a></h2> +                        </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/images/guest_book_background.png b/images/guest_book_background.png Binary files differnew file mode 100644 index 0000000..4bea637 --- /dev/null +++ b/images/guest_book_background.png diff --git a/images/yippee.gif b/images/yippee.gif Binary files differnew file mode 100644 index 0000000..2471f14 --- /dev/null +++ b/images/yippee.gif @@ -60,6 +60,7 @@ table {              <tr>                  <td>                      <ul> +                        <li><h3><a href="cgi-bin/guest_book.cgi">--> Sign the guest book</a></h3></li>                          <li><h3><a href="linux_room.html">--> Visit the linux room</a></h3></li>                          <li><h3><a href="music_room.html">--> Visit the music room</a></h3></li>                          <li><h3><a href="tv_corner.html">--> Visit the tv corner</a></h3></li> diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..632f575 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +legacy-cgi  | 
