From 509cc23254ff3d36f36cc29f330aff48f7e081ca Mon Sep 17 00:00:00 2001
From: Christian Elberfeld <christian.elberfeld@adesso.de>
Date: Sun, 7 Apr 2019 21:36:41 +0200
Subject: [PATCH] Initial implementation with Dummy Status

---
 Dockerfile                         |  29 ++++++++++
 README.md                          |   9 +++-
 docker-compose.yml                 |  11 ++++
 entrypoint_dev.sh                  |   8 +++
 entrypoint_prod.sh                 |   8 +++
 run_dev.bat                        |   7 +++
 run_prod.bat                       |   7 +++
 warpapi/static/warpzone_closed.png | Bin 0 -> 7584 bytes
 warpapi/static/warpzone_logo.png   | Bin 0 -> 10057 bytes
 warpapi/static/warpzone_open.png   | Bin 0 -> 7600 bytes
 warpapi/warpapi.py                 |  83 +++++++++++++++++++++++++++++
 warpapi/wsgi.py                    |   4 ++
 12 files changed, 165 insertions(+), 1 deletion(-)
 create mode 100644 Dockerfile
 create mode 100644 docker-compose.yml
 create mode 100644 entrypoint_dev.sh
 create mode 100644 entrypoint_prod.sh
 create mode 100644 run_dev.bat
 create mode 100644 run_prod.bat
 create mode 100644 warpapi/static/warpzone_closed.png
 create mode 100644 warpapi/static/warpzone_logo.png
 create mode 100644 warpapi/static/warpzone_open.png
 create mode 100644 warpapi/warpapi.py
 create mode 100644 warpapi/wsgi.py

diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..9f57564
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,29 @@
+
+FROM debian:stretch 
+    
+# Python Packages 
+RUN apt-get update && apt-get install -y \ 	
+    python3 \ 	
+    python3-pip 
+
+# Upgrade pip    
+RUN pip3 install --upgrade pip 
+
+# pip Packages
+RUN pip3 install \     
+    flask==1.0.2 \     
+    pytz \
+    uwsgi \     
+    --upgrade 
+    
+# start Script 
+COPY entrypoint_dev.sh /opt/entrypoint_dev.sh 
+COPY entrypoint_prod.sh /opt/entrypoint_prod.sh 
+RUN chmod +x /opt/entrypoint* 
+
+EXPOSE 5000
+VOLUME ["/opt/warpapi"] 
+
+CMD ["/opt/entrypoint_prod.sh"] 
+
+
diff --git a/README.md b/README.md
index 0a79f2f..c973f46 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,9 @@
-# warpapi
+
+# SpaceAPI Implementierung 
+Verfügbar unter https://api.warpzone.ms 
+
+Eigenständuge und kompakte Reimplementierung der SpaceAPI als eigenständige Flask Applikation 
+
+Die Standard SpaceAPI wird unter /spaceapi bereitgestellt.
+Für die Einbindung auf cpu.ccc.de ist /cccapi vorgesehen.
 
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..b69f2af
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,11 @@
+version: "3"
+
+services:
+  
+  app:
+
+    build: .
+    ports:
+      - 0.0.0.0:5000:5000
+    volumes:
+      - ./warpapi/:/opt/warpapi
diff --git a/entrypoint_dev.sh b/entrypoint_dev.sh
new file mode 100644
index 0000000..b33dd21
--- /dev/null
+++ b/entrypoint_dev.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+export LC_ALL=C.UTF-8
+export LANG=C.UTF-8
+export FLASK_APP=warpapi.py
+export FLASK_ENV=development
+
+cd /opt/warpapi/
+flask run --host=0.0.0.0
diff --git a/entrypoint_prod.sh b/entrypoint_prod.sh
new file mode 100644
index 0000000..8062b80
--- /dev/null
+++ b/entrypoint_prod.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+export LC_ALL=C.UTF-8
+export LANG=C.UTF-8
+export FLASK_APP=warpapi.py
+export FLASK_ENV=production
+
+cd /opt/warpapi/
+uwsgi --uid=www-data --gid=www-data --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
diff --git a/run_dev.bat b/run_dev.bat
new file mode 100644
index 0000000..18a5ef0
--- /dev/null
+++ b/run_dev.bat
@@ -0,0 +1,7 @@
+
+docker kill warpapi 
+docker rm warpapi 
+docker rmi warpapi 
+
+docker build . -t warpapi 
+docker run -v %cd%/warpapi:/opt/warpapi -p 5000:5000 --name warpapi -it warpapi /opt/entrypoint_dev.sh
diff --git a/run_prod.bat b/run_prod.bat
new file mode 100644
index 0000000..4e4c48c
--- /dev/null
+++ b/run_prod.bat
@@ -0,0 +1,7 @@
+
+docker kill warpapi 
+docker rm warpapi 
+docker rmi warpapi 
+
+docker build . -t warpapi 
+docker run -v %cd%/warpapi:/opt/warpapi -p 5000:5000 --name warpapi -it warpapi 
diff --git a/warpapi/static/warpzone_closed.png b/warpapi/static/warpzone_closed.png
new file mode 100644
index 0000000000000000000000000000000000000000..18d79efc4ea6bde3d10032da6807e1121ab38def
GIT binary patch
literal 7584
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
CZIXxp

literal 0
HcmV?d00001

diff --git a/warpapi/static/warpzone_logo.png b/warpapi/static/warpzone_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..632d0167bbd64156747159c1577f023dac944e54
GIT binary patch
literal 10057
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
MJ=Rq(SG5WKf1wKUasU7T

literal 0
HcmV?d00001

diff --git a/warpapi/static/warpzone_open.png b/warpapi/static/warpzone_open.png
new file mode 100644
index 0000000000000000000000000000000000000000..f502ab7c856319b2998909075ad05726632c1556
GIT binary patch
literal 7600
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
S;prd%0000<MNUMnLSTaad6;Ve

literal 0
HcmV?d00001

diff --git a/warpapi/warpapi.py b/warpapi/warpapi.py
new file mode 100644
index 0000000..98985ec
--- /dev/null
+++ b/warpapi/warpapi.py
@@ -0,0 +1,83 @@
+import datetime
+import pytz
+from flask import Flask
+from flask import request
+from flask import redirect
+from flask import send_from_directory
+from flask import json
+
+app = Flask(__name__, static_url_path='')
+
+if __name__ == "__main__":
+    app.run()
+
+@app.route('/')
+def hello_world():
+    return 'Warpzone API'
+
+@app.route('/static/<path:path>')
+def send_static(path):
+    return send_from_directory('static', path)
+
+@app.route('/cccapi')
+def cccapi():
+    return redirect('/spaceapi', code=302)
+
+@app.route('/spaceapi')
+def spaceapi():
+    spaceopen = False
+    now = datetime.datetime.now(pytz.timezone('Europe/Berlin'))
+    dayofweek = now.strftime("%w") 
+    # Hardcode Mittwoch Abend offen 
+    if dayofweek == "3":
+        if now.hour >= 18:
+            spaceopen = True 
+    # Hardcode Samstag Abend offen 
+    if dayofweek == "6":
+        if now.hour >= 18:
+            spaceopen = True 
+    data = {
+        "api": "0.13",
+        "space": "warpzone ", 
+        "logo": "https://api.warpzone.ms/static/warpzone_logo.png",
+        "url": "https://www.warpzone.ms",
+        "location": {
+            "address": "warpzone e.V., Am Hawerkamp 31 Maus G, 48155 Münster, Germany",
+            "lat": "51.943376",
+            "lon": "7.638216",
+        },
+        "contact": {
+            "phone": "+49 251 39500271",
+            "twitter": "@warpzone_ms",
+            "email": "office@warpzone.ms",
+            "irc": "irc://irc.freenode.net/#warpzone",
+            "ml": "warpzone@warpzone.ms",
+        },
+        "issue_report_channels": [ 
+            "email" 
+        ],
+        "feeds": {
+            "blog": { 
+                "type": "application/rss+xml",
+                "url": "https://www.warpzone.ms/feed/",
+            },
+            "calendar": {
+                "type": "application/calendar",
+                "url": "https://www.google.com/calendar/ical/hc82sdjshuf1ru9f9eqcfq9bvs%40group.calendar.google.com/public/basic.ics",
+            },
+        },
+        "state": {
+            "open": spaceopen,
+            "icon": {
+                "open": "https://api.warpzone.ms/static/warpzone_open.png",
+                "closed": "https://api.warpzone.ms/static/warpzone_closed.png",
+            },
+        },
+    }
+    
+    response = app.response_class(
+        response=json.dumps(data),
+        status=200,
+        mimetype='application/json'
+    )
+    return response
diff --git a/warpapi/wsgi.py b/warpapi/wsgi.py
new file mode 100644
index 0000000..663cd31
--- /dev/null
+++ b/warpapi/wsgi.py
@@ -0,0 +1,4 @@
+from warpapi import app
+
+if __name__ == "__main__":
+    app.run()
\ No newline at end of file
-- 
GitLab