From cddfd47a07a6f2173d669b6f59a207d876b2d472 Mon Sep 17 00:00:00 2001 From: Yannic Nevado Hidalgo <yannic.hidalgo@stud.h-da.de> Date: Thu, 3 Mar 2022 22:36:11 +0100 Subject: [PATCH] add(setup): initiale Einrichtung der API inklusive Datenbank --- .docker/api/Dockerfile | 10 ++++ .docker/database/Dockerfile | 7 +++ .docker/database/initial_setup.sql | 18 +++++++ .gitignore | 26 ++++++++++ Aufgabenstellung.pdf | Bin 0 -> 22356 bytes README.adoc | 80 +++++++++++++++++++++++++++++ README.md | 3 -- app/app.py | 12 +++++ docker-compose.yml | 34 ++++++++++++ requirements.txt | 1 + 10 files changed, 188 insertions(+), 3 deletions(-) create mode 100644 .docker/api/Dockerfile create mode 100644 .docker/database/Dockerfile create mode 100644 .docker/database/initial_setup.sql create mode 100644 .gitignore create mode 100644 Aufgabenstellung.pdf create mode 100644 README.adoc delete mode 100644 README.md create mode 100644 app/app.py create mode 100644 docker-compose.yml create mode 100644 requirements.txt diff --git a/.docker/api/Dockerfile b/.docker/api/Dockerfile new file mode 100644 index 0000000..31d01a0 --- /dev/null +++ b/.docker/api/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3.9.6 + +WORKDIR /app + +COPY requirements.txt requirements.txt +RUN pip3 install -r requirements.txt + +COPY ./app . + +CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"] \ No newline at end of file diff --git a/.docker/database/Dockerfile b/.docker/database/Dockerfile new file mode 100644 index 0000000..c87bf97 --- /dev/null +++ b/.docker/database/Dockerfile @@ -0,0 +1,7 @@ +FROM postgres:13.6 + +RUN localedef -i de_DE -c -f UTF-8 -A /usr/share/locale/locale.alias de_DE.UTF-8 + +ENV LANG de_DE.utf8 + +COPY initial_setup.sql /docker-entrypoint-initdb.d/ \ No newline at end of file diff --git a/.docker/database/initial_setup.sql b/.docker/database/initial_setup.sql new file mode 100644 index 0000000..8e31549 --- /dev/null +++ b/.docker/database/initial_setup.sql @@ -0,0 +1,18 @@ +CREATE DATABASE "web-sec"; + + \c web-sec; + +CREATE TABLE "benutzer" ( + customerID SERIAL NOT NULL, + vorname text NOT NULL, + nachname text NOT NULL, + email varchar(255) NOT NULL, + PRIMARY KEY(customerID) +); + +INSERT INTO + "benutzer" (vorname, nachname, email) +VALUES + ('Alice','Apple', 'alice@apple.net'), + ('Bob','Banana', 'bob@banana.net'), + ('Mallory','Mango', 'mallory@mango.net'); \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..647a52b --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +.DS_Store +.env +.flaskenv +*.pyc +*.pyo +env/ +venv/ +.venv/ +env* +dist/ +build/ +*.egg +*.egg-info/ +_mailinglist +.tox/ +.cache/ +.pytest_cache/ +.idea/ +docs/_build/ +.vscode + +# Coverage reports +htmlcov/ +.coverage +.coverage.* +*,cover \ No newline at end of file diff --git a/Aufgabenstellung.pdf b/Aufgabenstellung.pdf new file mode 100644 index 0000000000000000000000000000000000000000..58df0970f6d183bd57288d6cd45f6686e1d6e629 GIT binary patch literal 22356 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 J)z#mP3jmnWmNftX literal 0 HcmV?d00001 diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..cc2b416 --- /dev/null +++ b/README.adoc @@ -0,0 +1,80 @@ += Task1 Security Of Web Applications + +Aufgabe 1 des Security of Web Applications Ferienkurses. + +== Lokales setup + +* Docker und docker-compose installieren + +== Anwendung starten + +[source,bash] +---- +# Docker Images bauen +docker-compose build + +# Starten der Datenbank und API +docker-compose up +---- + +* Nach dem Initialen Starten der Datenbank werden folgende Benutzer angelegt: + +[cols="4", options="header"] +|=== +| customerID +| Vorname +| Vorname +| E-Mail + +| 1 +| Alice +| Apple +| alice@apple.net + +| 2 +| Bob +| Banana +| bob@banana.net + +| 3 +| Mallory +| Mango +| mallory@mango.net +|=== + + +== Routen + +Die Routen sind Passwort geschützt. + +[source,bash] +---- +# benutzername: admin +# passwort: admin +---- + +=== GET + +* `http://localhost:5000/api/user/:customerID` +** Gibt die E-Mail Adresse eines Benutzers zurück + + +=== POST + +* `http://localhost:5000/api/user` +** Erstellt einen Benutzer mit dem übergebenen Body + +[source,bash] +---- +{ + "vorname":"max", + "nachname":"mustermann", + "email":"max@mustermann.net" +} +---- + + +=== DELETE + +* `http://localhost:5000/api/user/:customerID` +** Löscht einen Benutzer anhand seiner `customerID` \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index d0b6616..0000000 --- a/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Task1 Security Of Web Applications - -Aufgabe 1 des Security of Web Applications Ferienkurses. \ No newline at end of file diff --git a/app/app.py b/app/app.py new file mode 100644 index 0000000..4834b42 --- /dev/null +++ b/app/app.py @@ -0,0 +1,12 @@ +import json +from flask import Flask +app = Flask(__name__) + + +@app.route('/') +def index(): + return json.dumps({'name': 'alice', + 'email': 'alice@outlook.com'}) + +if __name__ == "__main__": + app.run() \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..cae7187 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,34 @@ +# Use postgres/example user/password credentials +version: '3.9' + +services: + + database: + container_name: postgres + build: + context: .docker/database + restart: always + environment: + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + + adminer: + image: adminer + restart: always + depends_on: + - database + ports: + - 8080:8080 + + app: + container_name: flask-api + build: + context: . + dockerfile: .docker/api/Dockerfile + restart: always + depends_on: + - database + ports: + - 5000:5000 + \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..fb0dec5 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +Flask==2.0.3 \ No newline at end of file -- GitLab