From 57ad611debbacef5fd6e3b3c4faceb6f91c7009d Mon Sep 17 00:00:00 2001
From: Mark <mark@openappstack.net>
Date: Thu, 19 Sep 2019 16:16:00 +0200
Subject: [PATCH] Add oAuuth client app for testing

Signed-off-by: Mark <mark@openappstack.net>
---
 test/login_logout/Dockerfile       | 16 ++++++++++
 test/login_logout/app.py           | 47 ++++++++++++++++++++++++++++++
 test/login_logout/requirements.txt |  2 ++
 3 files changed, 65 insertions(+)
 create mode 100644 test/login_logout/Dockerfile
 create mode 100644 test/login_logout/app.py
 create mode 100644 test/login_logout/requirements.txt

diff --git a/test/login_logout/Dockerfile b/test/login_logout/Dockerfile
new file mode 100644
index 0000000..6601a71
--- /dev/null
+++ b/test/login_logout/Dockerfile
@@ -0,0 +1,16 @@
+FROM python:3.7
+
+WORKDIR /usr/src/app
+
+COPY requirements.txt ./
+RUN pip3 install --no-cache-dir -r requirements.txt
+
+COPY . .
+
+ENV BASE_URL https://hydra.oas.example.net
+ENV ACCESS_TOKEN_URL https://hydra.oas.example.net/oauth2/token
+ENV AUTHORIZE_URL https://hydra.oas.example.net/oauth2/auth
+ENV KEY testapp
+ENV SECRET verysecret
+
+CMD [ "flask", "run" ]
diff --git a/test/login_logout/app.py b/test/login_logout/app.py
new file mode 100644
index 0000000..f2b8a6c
--- /dev/null
+++ b/test/login_logout/app.py
@@ -0,0 +1,47 @@
+from flask import Flask, abort, url_for, redirect, request, session, jsonify
+from werkzeug import security
+from json import dumps
+from os import environ
+from flask_oauthlib.client import OAuth
+import uuid
+
+
+BASE_URL=environ["BASE_URL"]
+ACCESS_TOKEN_URL=environ["ACCESS_TOKEN_URL"]
+AUTHORIZE_URL=environ["AUTHORIZE_URL"]
+KEY=environ["KEY"]
+SECRET=environ["SECRET"]
+
+app = Flask(__name__)
+app.secret_key = 'development'
+
+oauth = OAuth(app)
+
+sso = oauth.remote_app(
+    "sso",
+    base_url=BASE_URL,
+    request_token_url=None,
+    access_token_url=ACCESS_TOKEN_URL,
+    authorize_url=AUTHORIZE_URL,
+    consumer_key=KEY,
+    request_token_params={'state': lambda: security.gen_salt(10), "scope": "read"},
+    consumer_secret=SECRET)
+
+@sso.tokengetter
+def get_sso_token(token=None):
+    return session.get('sso_token')
+
+@app.route('/')
+def login():
+    return sso.authorize(url_for('callback', _external=True))
+
+@app.route('/callback')
+def callback():
+    resp = sso.authorized_response()
+    if resp is None:
+        abort(403)
+    session['sso_token'] = (resp['access_token'],None)
+    return jsonify(resp)
+
+if __name__ == "__main__":
+    app.run()
diff --git a/test/login_logout/requirements.txt b/test/login_logout/requirements.txt
new file mode 100644
index 0000000..763ef07
--- /dev/null
+++ b/test/login_logout/requirements.txt
@@ -0,0 +1,2 @@
+Flask
+Flask-OAuthlib
-- 
GitLab