diff options
Diffstat (limited to 'cgi-bin')
-rwxr-xr-x | cgi-bin/guest_book.cgi | 165 |
1 files changed, 165 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) + |