Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
c4bbe57
Adding tests
Filienko Jul 28, 2024
dc97e1b
Fixing tests
Filienko Jul 28, 2024
182efb0
Modifying requirements according to models
Filienko Jul 28, 2024
fe4fff0
Updating python version
Filienko Jul 30, 2024
9a56788
Adding dev dependencies
Filienko Jul 30, 2024
028781f
Adding test configs
Filienko Jul 30, 2024
c0d7af6
Adding major tests
Filienko Jul 30, 2024
b278c3a
WIP: making tests run
Filienko Jul 30, 2024
3f8779a
WIP: running the tests
Filienko Jul 30, 2024
b73144a
Adding tox.ini
Filienko Jul 30, 2024
2958f22
Adding python-json-logger
Filienko Aug 1, 2024
c1ebae9
Fixing tests
Filienko Aug 1, 2024
43ffa80
Updating the docker to 3.11
Filienko Aug 2, 2024
0cf4d31
Updating the requirements
Filienko Aug 7, 2024
0d014f6
Updating JSONEncoder
Filienko Aug 7, 2024
0d0ed58
Downgrade flask, werkzeug, and itsdangerous
Filienko Aug 7, 2024
495291d
WIP: reverting to versions generated by pip-tools 3.9
Filienko Aug 8, 2024
e7ca982
WIP: Provider fixing
Filienko Aug 8, 2024
1dc30db
WIP: JSON
Filienko Aug 8, 2024
79e5a8c
WIP: def
Filienko Aug 8, 2024
1df20e0
WIP: curr
Filienko Aug 8, 2024
607c6d0
Fixing
Filienko Aug 8, 2024
a554262
WIP: fix
Filienko Aug 8, 2024
c0f8a61
WIP: debugging
Filienko Aug 8, 2024
a8eb394
Change configuration
Filienko Aug 8, 2024
0afb216
up
Filienko Aug 8, 2024
25c467a
Fixing tests
Filienko Aug 8, 2024
7a4b4b9
WIP: tokens
Filienko Aug 8, 2024
9023e03
Looking for json
Filienko Aug 13, 2024
005ad1d
Testing json
Filienko Aug 14, 2024
736487e
Testing reverting
Filienko Aug 14, 2024
103776f
Removing CustomJsonProvider
Filienko Aug 14, 2024
e2eaade
Changing test
Filienko Aug 14, 2024
64e4a7d
Reverting to working versions
Filienko Aug 14, 2024
89d2672
Reverting versions to old
Filienko Aug 14, 2024
b3036c3
Reverting for experiment
Filienko Aug 14, 2024
5cabcf6
Changing to new json producer
Filienko Aug 14, 2024
58ddceb
Updating tests
Filienko Aug 14, 2024
2a5655f
Removing json
Filienko Aug 14, 2024
cab9e8a
Returning CustomJSONProvider
Filienko Aug 14, 2024
985d43d
ADding details
Filienko Aug 14, 2024
61d8a2f
Changing default
Filienko Aug 14, 2024
04ba266
More changing to defaultJSONProvider
Filienko Aug 14, 2024
a73661c
Specify api test header
Filienko Aug 14, 2024
85f6186
Returning jsonprovider
Filienko Aug 14, 2024
15858a8
Specify content_type
Filienko Aug 14, 2024
c62aec0
Up unittest
Filienko Aug 14, 2024
5ab9af3
WIP: Fixing bug
Filienko Aug 14, 2024
0980c66
Adding tests
Filienko Aug 14, 2024
0747337
Trying different validation
Filienko Aug 14, 2024
c1c48dc
FIxing whitelisted
Filienko Aug 14, 2024
9aea555
Fixing jwt
Filienko Aug 14, 2024
99fb26d
Changing back
Filienko Aug 14, 2024
a102486
Adding provider to test
Filienko Aug 14, 2024
aeb6a84
Fixing tests
Filienko Aug 14, 2024
5d05ffc
Changing tests
Filienko Aug 14, 2024
6f6af47
Add more tests
Filienko Aug 14, 2024
39b6e35
Fixing tests
Filienko Aug 14, 2024
764d880
Removing jsonify
Filienko Aug 14, 2024
2cc1dde
Fixing tests
Filienko Aug 14, 2024
b45080b
New
Filienko Aug 14, 2024
dc6dc49
Trying to reconcile tests
Filienko Aug 14, 2024
3e716bd
Fixing test
Filienko Aug 14, 2024
7425702
new
Filienko Aug 14, 2024
c4de40b
b
Filienko Aug 14, 2024
7206230
jw
Filienko Aug 14, 2024
e03ed29
new
Filienko Aug 14, 2024
4c5f81e
Updating the library versions to the newest ones
Filienko Aug 21, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# run test suite
---
name: Test
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout git commit
uses: actions/checkout@v1

- name: Set up Python 3.11
uses: actions/setup-python@v1
with:
python-version: 3.11

- name: Install test runner
run: python3 -m pip install tox

- name: Run tests
run: tox
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM python:3.7
FROM python:3.11

WORKDIR /opt/app

Expand Down
17 changes: 8 additions & 9 deletions jwt_proxy/api.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
from flask import Blueprint, abort, current_app, jsonify, request, json as flask_json
from flask import Blueprint, abort, current_app, jsonify, request
import jwt
import requests
import json
from flask.json.provider import DefaultJSONProvider

from jwt_proxy.audit import audit_HAPI_change

blueprint = Blueprint('auth', __name__)
SUPPORTED_METHODS = ('GET', 'POST', 'PUT', 'DELETE', 'OPTIONS')

# Workaround no JSON representation for datetime.timedelta
class CustomJSONProvider(DefaultJSONProvider):
def default(self, obj):
return str(obj)


def proxy_request(req, upstream_url, user_info=None):
"""Forward request to given url"""
Expand Down Expand Up @@ -39,6 +45,7 @@ def proxy_request(req, upstream_url, user_info=None):
return result



@blueprint.route("/", defaults={"relative_path": ""}, methods=SUPPORTED_METHODS)
@blueprint.route("/<path:relative_path>", methods=SUPPORTED_METHODS)
def validate_jwt(relative_path):
Expand Down Expand Up @@ -94,14 +101,6 @@ def smart_configuration():
@blueprint.route("/settings/<string:config_key>")
def config_settings(config_key):
"""Non-secret application settings"""

# workaround no JSON representation for datetime.timedelta
class CustomJSONEncoder(flask_json.JSONEncoder):
def default(self, obj):
return str(obj)

current_app.json_encoder = CustomJSONEncoder

# return selective keys - not all can be be viewed by users, e.g.secret key
blacklist = ("SECRET", "KEY")

Expand Down
4 changes: 2 additions & 2 deletions jwt_proxy/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@

from jwt_proxy import api
from jwt_proxy.audit import audit_log_init, audit_entry

from jwt_proxy.api import CustomJSONProvider

def create_app(testing=False, cli=False):
"""Application factory, used to create application"""
app = Flask("jwt_proxy")
app.json = CustomJSONProvider(app)
register_blueprints(app)
configure_app(app)

Expand All @@ -22,7 +23,6 @@ def register_blueprints(app):

def configure_app(app):
"""Load successive configs - overriding defaults"""

app.config.from_object("jwt_proxy.config")
configure_logging(app)

Expand Down
89 changes: 89 additions & 0 deletions requirements.dev.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile --extra=dev --output-file=requirements.dev.txt setup.cfg
#
blinker==1.8.2
# via flask
cachetools==5.5.0
# via tox
certifi==2024.7.4
# via requests
cffi==1.17.0
# via cryptography
chardet==5.2.0
# via tox
charset-normalizer==3.3.2
# via requests
click==8.1.7
# via flask
colorama==0.4.6
# via tox
cryptography==43.0.0
# via pyjwt
distlib==0.3.8
# via virtualenv
exceptiongroup==1.2.2
# via pytest
filelock==3.15.4
# via
# tox
# virtualenv
flask==3.0.3
# via jwt_proxy (setup.cfg)
gunicorn==23.0.0
# via jwt_proxy (setup.cfg)
idna==3.7
# via requests
importlib-metadata==8.4.0
# via flask
iniconfig==2.0.0
# via pytest
itsdangerous==2.2.0
# via flask
jinja2==3.1.4
# via flask
markupsafe==2.1.5
# via
# jinja2
# werkzeug
packaging==24.1
# via
# gunicorn
# pyproject-api
# pytest
# tox
platformdirs==4.2.2
# via
# tox
# virtualenv
pluggy==1.5.0
# via
# pytest
# tox
pycparser==2.22
# via cffi
pyjwt[crypto]==2.9.0
# via jwt_proxy (setup.cfg)
pyproject-api==1.7.1
# via tox
pytest==8.3.2
# via jwt_proxy (setup.cfg)
requests==2.32.3
# via jwt_proxy (setup.cfg)
tomli==2.0.1
# via
# pyproject-api
# pytest
# tox
tox==4.18.0
# via jwt_proxy (setup.cfg)
urllib3==2.2.2
# via requests
virtualenv==20.26.3
# via tox
werkzeug==3.0.3
# via flask
zipp==3.20.0
# via importlib-metadata
64 changes: 43 additions & 21 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,47 @@
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile
# pip-compile --output-file=requirements.txt setup.cfg
#
certifi==2021.5.30 # via requests
cffi==1.14.6 # via cryptography
charset-normalizer==2.0.4 # via requests
click==8.0.1 # via flask
cryptography==3.4.8 # via pyjwt
flask==2.0.1 # via jwt_proxy (setup.py)
gunicorn==20.1.0 # via jwt_proxy (setup.py)
idna==3.2 # via requests
importlib-metadata==4.7.1 # via click
itsdangerous==2.0.1 # via flask
jinja2==3.0.1 # via flask
markupsafe==2.0.1 # via jinja2
pycparser==2.20 # via cffi
python-json-logger==0.1.11 # via jwt_proxy (setup.py)
pyjwt[crypto]==2.8.0 # via jwt_proxy (setup.py)
requests==2.26.0 # via jwt_proxy (setup.py)
typing-extensions==3.10.0.0 # via importlib-metadata
urllib3==1.26.6 # via requests
werkzeug==2.0.1 # via flask
zipp==3.5.0 # via importlib-metadata
blinker==1.8.2
# via flask
certifi==2024.7.4
# via requests
cffi==1.17.0
# via cryptography
charset-normalizer==3.3.2
# via requests
click==8.1.7
# via flask
cryptography==43.0.0
# via pyjwt
flask==3.0.3
# via jwt_proxy (setup.cfg)
gunicorn==23.0.0
# via jwt_proxy (setup.cfg)
idna==3.7
# via requests
importlib-metadata==8.4.0
# via flask
itsdangerous==2.2.0
# via flask
jinja2==3.1.4
# via flask
markupsafe==2.1.5
# via
# jinja2
# werkzeug
packaging==24.1
# via gunicorn
pycparser==2.22
# via cffi
pyjwt[crypto]==2.9.0
# via jwt_proxy (setup.cfg)
requests==2.32.3
# via jwt_proxy (setup.cfg)
urllib3==2.2.2
# via requests
werkzeug==3.0.3
# via flask
zipp==3.20.0
# via importlib-metadata
1 change: 1 addition & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ include_package_data = True
install_requires =
flask
gunicorn
python-json-logger
# RSA encoding and decoding require the cryptography module
pyjwt[crypto]
requests
Expand Down
Loading