e2e: generate dex config dynamically

This commit is contained in:
Jens Langhammer 2020-07-09 23:13:14 +02:00
parent c70310730a
commit c6d8bae147
4 changed files with 44 additions and 60 deletions

View File

@ -1,21 +0,0 @@
enablePasswordDB: true
issuer: http://127.0.0.1:5556/dex
logger:
level: debug
staticClients:
- id: example-app
name: Example App
redirectURIs:
- http://localhost:37791/source/oauth/callback/dex/
secret: ZXhhbXBsZS1hcHAtc2VjcmV0
staticPasswords:
- email: admin@example.com
hash: $2a$10$2b2cU8CPhOTaGrs1HRQuAueS7JTT5ZHsHSzYiFPm1leZck7Mc8T4W
userID: 08a8684b-db88-4b73-90a9-3cd1661f5466
username: admin
storage:
config:
file: /tmp/dex.db
type: sqlite3
web:
http: 0.0.0.0:5556

View File

@ -31,14 +31,36 @@ class TestSourceOAuth(SeleniumTestCase):
def prepare_dex_config(self): def prepare_dex_config(self):
"""Since Dex does not document which environment """Since Dex does not document which environment
variables can be used to configure clients""" variables can be used to configure clients"""
config = {
"enablePasswordDB": True,
"issuer": "http://127.0.0.1:5556/dex",
"logger": {"level": "debug"},
"staticClients": [
{
"id": "example-app",
"name": "Example App",
"redirectURIs": [
self.url(
"passbook_sources_oauth:oauth-client-callback",
source_slug="dex",
)
],
"secret": self.client_secret,
}
],
"staticPasswords": [
{
"email": "admin@example.com",
# hash for password
"hash": "$2a$10$2b2cU8CPhOTaGrs1HRQuAueS7JTT5ZHsHSzYiFPm1leZck7Mc8T4W",
"userID": "08a8684b-db88-4b73-90a9-3cd1661f5466",
"username": "admin",
}
],
"storage": {"config": {"file": "/tmp/dex.db"}, "type": "sqlite3"},
"web": {"http": "0.0.0.0:5556"},
}
config_file = "./e2e/dex/config-dev.yaml" config_file = "./e2e/dex/config-dev.yaml"
with open(config_file, "r+") as _file:
config = safe_load(_file)
client = config.get("staticClients")[0]
client["redirectURIs"][0] = self.url(
"passbook_sources_oauth:oauth-client-callback", source_slug="dex"
)
client["secret"] = self.client_secret
with open(config_file, "w+") as _file: with open(config_file, "w+") as _file:
safe_dump(config, _file) safe_dump(config, _file)
@ -71,12 +93,8 @@ class TestSourceOAuth(SeleniumTestCase):
return container return container
sleep(1) sleep(1)
def tearDown(self): def create_objects(self):
self.container.kill() """Create required objects"""
super().tearDown()
def test_oauth_oidc(self):
"""test OAuth Source With With OIDC"""
sleep(1) sleep(1)
# Bootstrap all needed objects # Bootstrap all needed objects
authentication_flow = Flow.objects.get(slug="default-source-authentication") authentication_flow = Flow.objects.get(slug="default-source-authentication")
@ -95,6 +113,13 @@ class TestSourceOAuth(SeleniumTestCase):
consumer_secret=self.client_secret, consumer_secret=self.client_secret,
) )
def tearDown(self):
self.container.kill()
super().tearDown()
def test_oauth_enroll(self):
"""test OAuth Source With With OIDC"""
self.create_objects()
self.driver.get(self.live_server_url) self.driver.get(self.live_server_url)
self.wait.until( self.wait.until(

View File

@ -1,5 +1,5 @@
"""OAuth Callback Views""" """OAuth Callback Views"""
from typing import Any, Callable, Dict, Optional from typing import Any, Dict, Optional
from django.conf import settings from django.conf import settings
from django.contrib import messages from django.contrib import messages
@ -7,7 +7,7 @@ from django.http import Http404, HttpRequest, HttpResponse
from django.shortcuts import redirect from django.shortcuts import redirect
from django.urls import reverse from django.urls import reverse
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.generic import RedirectView, View from django.views.generic import View
from structlog import get_logger from structlog import get_logger
from passbook.audit.models import Event, EventAction from passbook.audit.models import Event, EventAction
@ -22,7 +22,6 @@ from passbook.flows.views import SESSION_KEY_PLAN
from passbook.lib.utils.urls import redirect_with_qs from passbook.lib.utils.urls import redirect_with_qs
from passbook.policies.utils import delete_none_keys from passbook.policies.utils import delete_none_keys
from passbook.sources.oauth.auth import AuthorizedServiceBackend from passbook.sources.oauth.auth import AuthorizedServiceBackend
from passbook.sources.oauth.clients import BaseOAuthClient, get_client
from passbook.sources.oauth.models import OAuthSource, UserOAuthSourceConnection from passbook.sources.oauth.models import OAuthSource, UserOAuthSourceConnection
from passbook.sources.oauth.views.base import OAuthClientMixin from passbook.sources.oauth.views.base import OAuthClientMixin
from passbook.stages.password.stage import PLAN_CONTEXT_AUTHENTICATION_BACKEND from passbook.stages.password.stage import PLAN_CONTEXT_AUTHENTICATION_BACKEND

View File

@ -1,32 +1,13 @@
"""OAuth Redirect Views""" """OAuth Redirect Views"""
from typing import Any, Callable, Dict, Optional from typing import Any, Dict
from django.conf import settings from django.http import Http404
from django.contrib import messages
from django.http import Http404, HttpRequest, HttpResponse
from django.shortcuts import redirect
from django.urls import reverse from django.urls import reverse
from django.utils.translation import ugettext as _ from django.views.generic import RedirectView
from django.views.generic import RedirectView, View
from structlog import get_logger from structlog import get_logger
from passbook.audit.models import Event, EventAction from passbook.sources.oauth.models import OAuthSource
from passbook.core.models import User
from passbook.flows.models import Flow
from passbook.flows.planner import (
PLAN_CONTEXT_PENDING_USER,
PLAN_CONTEXT_SSO,
FlowPlanner,
)
from passbook.flows.views import SESSION_KEY_PLAN
from passbook.lib.utils.urls import redirect_with_qs
from passbook.policies.utils import delete_none_keys
from passbook.sources.oauth.auth import AuthorizedServiceBackend
from passbook.sources.oauth.clients import BaseOAuthClient, get_client
from passbook.sources.oauth.models import OAuthSource, UserOAuthSourceConnection
from passbook.sources.oauth.views.base import OAuthClientMixin from passbook.sources.oauth.views.base import OAuthClientMixin
from passbook.stages.password.stage import PLAN_CONTEXT_AUTHENTICATION_BACKEND
from passbook.stages.prompt.stage import PLAN_CONTEXT_PROMPT
LOGGER = get_logger() LOGGER = get_logger()