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