diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..9f57564ff85dbcb5e50d88e757ed6e0089caadfa --- /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 0a79f2f19af4ec030c443a038177405c76ed151d..c973f464eb66962c1f29eb314b13ac26eeb767a2 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 0000000000000000000000000000000000000000..b69f2afaef6b76828a8614b23cbca7aa7027e40f --- /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 0000000000000000000000000000000000000000..b33dd21fe349629ddf02d11f812c56fe69967562 --- /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 0000000000000000000000000000000000000000..8062b809227952bbd61d3bbeb5f3848602aa533b --- /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 0000000000000000000000000000000000000000..18a5ef07ff13d05b123e0a85d1dbd8eb029f4724 --- /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 0000000000000000000000000000000000000000..4e4c48c82936a17e6c7149bf56172c215e36fd22 --- /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 Binary files /dev/null and b/warpapi/static/warpzone_closed.png differ diff --git a/warpapi/static/warpzone_logo.png b/warpapi/static/warpzone_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..632d0167bbd64156747159c1577f023dac944e54 Binary files /dev/null and b/warpapi/static/warpzone_logo.png differ diff --git a/warpapi/static/warpzone_open.png b/warpapi/static/warpzone_open.png new file mode 100644 index 0000000000000000000000000000000000000000..f502ab7c856319b2998909075ad05726632c1556 Binary files /dev/null and b/warpapi/static/warpzone_open.png differ diff --git a/warpapi/warpapi.py b/warpapi/warpapi.py new file mode 100644 index 0000000000000000000000000000000000000000..98985ec57cf3d75ebd81795f014ff2c4cf99671d --- /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 0000000000000000000000000000000000000000..663cd316b0dea57ec38d1d1a10a83df2089ea27d --- /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