commit 9d7ec715d1f2c6bda0bcc51ef22aaddaab12b8a9
parent a30a88abdec5ea1fda7cab8bc25004a65a97b694
Author: Demonstrandum <moi@knutsen.co>
Date: Fri, 18 Sep 2020 21:00:57 +0100
Update to uWSGI and get local time instead.
Diffstat:
8 files changed, 143 insertions(+), 67 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -1,4 +1,6 @@
__pycache__/
*.pyc
desktop.ini
-comments.json-
\ No newline at end of file
+comments.json
+.pid
+.log
diff --git a/server.py b/server.py
@@ -1,57 +0,0 @@
-from flask import Flask, render_template, send_from_directory, request, redirect
-from datetime import datetime
-from os import path
-app = Flask(__name__, static_url_path="", static_folder="./")
-
-import json
-
-COMMENT_FILE = "comments.json"
-DATE_FORMAT = "%Y-%m-%d %H:%M"
-
-def read_comments():
- comments = None
- try:
- with open(COMMENT_FILE, 'r') as f:
- comments = json.load(f)
- except FileNotFoundError:
- comments = []
-
- return comments
-
-
-@app.route('/')
-def home():
- return send_from_directory('./', 'index.html')
-
-@app.route('/guestbook')
-def guestbook():
- comments = read_comments()
- return render_template('guestbook.html', comments=reversed(comments))
-
-@app.route('/postcomment', methods=['POST'])
-def postcomment():
- name = request.form['name']
- comment = request.form['comment']
- date = datetime.now()
- ip = request.environ.get('HTTP_X_REAL_IP')
-
- comments = read_comments()
- comments.append({
- 'name': name,
- 'comment': comment,
- 'date': datetime.strftime(date, DATE_FORMAT),
- 'ip': ip
- })
-
- with open(COMMENT_FILE, 'w') as f:
- json.dump(comments, f, indent=4, separators=(",", ": "))
-
- return redirect('/guestbook', code=302)
-
-
-@app.route('/<p>')
-def serve_static(p):
- print("testets")
- if path.exists(p + '.html'):
- return send_from_directory('./', p + '.html')
- return send_from_directory('./', p)-
\ No newline at end of file
diff --git a/shiimoe.ini b/shiimoe.ini
@@ -0,0 +1,11 @@
+[uwsgi]
+module = wsgi:app
+
+master = true
+processes = 5
+
+socket = shiimoe.sock
+chmod-socket = 660
+vacuum = true
+
+die-on-term = true
diff --git a/shiimoe.py b/shiimoe.py
@@ -0,0 +1,68 @@
+from flask import Flask, render_template, send_from_directory, request, redirect
+from datetime import datetime
+from os import path
+app = Flask(__name__, static_url_path="", static_folder="./")
+
+import json
+
+COMMENT_FILE = "comments.json"
+DATE_FORMAT = "%Y-%m-%d %H:%M"
+
+def read_comments():
+ comments = None
+ try:
+ with open(COMMENT_FILE, 'r') as f:
+ comments = json.load(f)
+ except FileNotFoundError:
+ comments = []
+
+ return comments
+
+
+@app.route('/')
+def home():
+ return send_from_directory('./', 'index.html')
+
+def render_guestbook(**kw):
+ comments = read_comments()
+
+ kw['comments'] = reversed(comments)
+ return render_template('guestbook.html', **kw)
+
+@app.route('/guestbook')
+def guestbook():
+ return render_guestbook()
+
+@app.route('/postcomment', methods=['POST'])
+def postcomment():
+ now = datetime.now()
+
+ name = request.form.get('name')
+ comment = request.form.get('comment')
+ date = request.form.get('date') or datetime.strftime(now, DATE_FORMAT)
+ ip = request.environ.get('HTTP_X_REAL_IP')
+
+ # Comment or name left empty, send error message.
+ if not (name or "").strip() or not (comment or "").strip():
+ return render_guestbook(error_msg="Please provide a name and comment.")
+
+ comments = read_comments()
+ comments.append({
+ 'name': name,
+ 'comment': comment,
+ 'date': date,
+ 'ip': ip
+ })
+
+ with open(COMMENT_FILE, 'w') as f:
+ json.dump(comments, f, indent=4, separators=(",", ": "))
+
+ return redirect('/guestbook', code=302)
+
+
+@app.route('/<p>')
+def serve_static(p):
+ print("testets")
+ if path.exists(p + '.html'):
+ return send_from_directory('./', p + '.html')
+ return send_from_directory('./', p)
diff --git a/start.sh b/start.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-FLASK_APP=server.py flask run --host=0.0.0.0 --port=5000 &
+uwsgi --ini shiimoe.ini &
echo "$!" > ./.pid
-echo "Shii.moe is online!"-
\ No newline at end of file
+echo "Shii.moe is online!"
diff --git a/stop.sh b/stop.sh
diff --git a/templates/guestbook.html b/templates/guestbook.html
@@ -20,7 +20,7 @@
margin-top: 3em;
}
.comment-input {
- width: 30%;
+ width: 30%;
height: 8em;
margin: 0.5em 0em;
}
@@ -34,6 +34,13 @@
.comment {
margin: 1.5em 0;
}
+ .error {
+ margin: 1em 0 2em 0;
+ padding: 1em 1.5em;
+ border: 2pt solid red;
+ border-radius: 7pt;
+ background: #f464;
+ }
</style>
<link rel='stylesheet' type='text/css' href="style.css"/>
@@ -52,16 +59,56 @@
<div class="titleButton"><a href="/books">Bøker</a></div>
</div>
- <form action="/postcomment" method="POST">
+ {% if error_msg is defined %}
+ <p class="error">{{ error_msg }}</p>
+ {% endif %}
+
+ <form action="/postcomment" method="POST" name="commentBox">
<input class="name-input input" name="name" placeholder="Your name" required>
<br>
<textarea class="comment-input input" name="comment" placeholder="Your comment" required></textarea>
<br>
- <input type="submit" value="Submit">
+ <input type="submit" value="Post">
</form>
<!-- add gender radio boxes (femboy) -->
- {% if comments %}
+ <script>
+ // Script to get local time, will just fall back on server time
+ // if the script does not run.
+ const form = document.forms.namedItem("commentBox");
+ form.addEventListener('submit', ev => {
+ ev.preventDefault();
+
+ const formData = new FormData(form);
+
+ const now = new Date();
+ const { year, month, day } = {
+ year: String(now.getFullYear()),
+ month: String(now.getMonth() + 1).padStart(2, '0'),
+ day: String(now.getDate()).padStart(2, '0')
+ };
+ const { hour, minute } = {
+ hour: String(now.getHours()).padStart(2, '0'),
+ minute: String(now.getMinutes()).padStart(2, '0')
+ };
+ const dateString = `${year}-${month}-${day} ${hour}:${minute}`;
+
+ // Append to form:
+ formData.append('date', dateString);
+
+ // Send form:
+ const req = new XMLHttpRequest();
+ req.open(form.method, form.action, true);
+ req.onload = event => {
+ document.write(req.response);
+ };
+ req.send(formData);
+
+ window.location.reload();
+ }, false);
+ </script>
+
+ {% if comments is defined %}
<div class="comments">
{% for comment in comments %}
<div class="comment">
diff --git a/wsgi.py b/wsgi.py
@@ -0,0 +1,8 @@
+#!/usr/bin/env python3
+
+from shiimoe import app
+
+if __name__ == "__main__":
+ app.run()
+
+