aboutsummaryrefslogtreecommitdiff
path: root/cgi-bin/guest_book.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'cgi-bin/guest_book.cgi')
-rwxr-xr-xcgi-bin/guest_book.cgi165
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">--&gt; 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)
+