Compare commits
7 Commits
version/0.
...
version/0.
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ed8e72c62 | |||
| edeed18ae8 | |||
| d24133d8a2 | |||
| b9733e56aa | |||
| cd34413914 | |||
| c3a4a76d43 | |||
| a59a29b256 |
@ -1,5 +1,5 @@
|
|||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 0.7.10-beta
|
current_version = 0.7.11-beta
|
||||||
tag = True
|
tag = True
|
||||||
commit = True
|
commit = True
|
||||||
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)\-(?P<release>.*)
|
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)\-(?P<release>.*)
|
||||||
|
|||||||
27
.github/workflows/release.yml
vendored
27
.github/workflows/release.yml
vendored
@ -16,13 +16,32 @@ jobs:
|
|||||||
- name: Building Docker Image
|
- name: Building Docker Image
|
||||||
run: docker build
|
run: docker build
|
||||||
--no-cache
|
--no-cache
|
||||||
-t beryju/passbook:0.7.10-beta
|
-t beryju/passbook:0.7.11-beta
|
||||||
-t beryju/passbook:latest
|
-t beryju/passbook:latest
|
||||||
-f Dockerfile .
|
-f Dockerfile .
|
||||||
- name: Push Docker Container to Registry (versioned)
|
- name: Push Docker Container to Registry (versioned)
|
||||||
run: docker push beryju/passbook:0.7.10-beta
|
run: docker push beryju/passbook:0.7.11-beta
|
||||||
- name: Push Docker Container to Registry (latest)
|
- name: Push Docker Container to Registry (latest)
|
||||||
run: docker push beryju/passbook:latest
|
run: docker push beryju/passbook:latest
|
||||||
|
build-gatekeeper:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
- name: Docker Login Registry
|
||||||
|
env:
|
||||||
|
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
run: docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
|
||||||
|
- name: Building Docker Image
|
||||||
|
run: docker build
|
||||||
|
--no-cache
|
||||||
|
-t beryju/passbook-gatekeeper:0.7.11-beta
|
||||||
|
-t beryju/passbook-gatekeeper:latest
|
||||||
|
-f Dockerfile gatekeeper/
|
||||||
|
- name: Push Docker Container to Registry (versioned)
|
||||||
|
run: docker push beryju/passbook-gatekeeper:0.7.11-beta
|
||||||
|
- name: Push Docker Container to Registry (latest)
|
||||||
|
run: docker push beryju/passbook-gatekeeper:latest
|
||||||
build-static:
|
build-static:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
services:
|
services:
|
||||||
@ -45,11 +64,11 @@ jobs:
|
|||||||
run: docker build
|
run: docker build
|
||||||
--no-cache
|
--no-cache
|
||||||
--network=$(docker network ls | grep github | awk '{print $1}')
|
--network=$(docker network ls | grep github | awk '{print $1}')
|
||||||
-t beryju/passbook-static:0.7.10-beta
|
-t beryju/passbook-static:0.7.11-beta
|
||||||
-t beryju/passbook-static:latest
|
-t beryju/passbook-static:latest
|
||||||
-f static.Dockerfile .
|
-f static.Dockerfile .
|
||||||
- name: Push Docker Container to Registry (versioned)
|
- name: Push Docker Container to Registry (versioned)
|
||||||
run: docker push beryju/passbook-static:0.7.10-beta
|
run: docker push beryju/passbook-static:0.7.11-beta
|
||||||
- name: Push Docker Container to Registry (latest)
|
- name: Push Docker Container to Registry (latest)
|
||||||
run: docker push beryju/passbook-static:latest
|
run: docker push beryju/passbook-static:latest
|
||||||
test-release:
|
test-release:
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
appVersion: "0.7.10-beta"
|
appVersion: "0.7.11-beta"
|
||||||
description: A Helm chart for passbook.
|
description: A Helm chart for passbook.
|
||||||
name: passbook
|
name: passbook
|
||||||
version: "0.7.10-beta"
|
version: "0.7.11-beta"
|
||||||
icon: https://git.beryju.org/uploads/-/system/project/avatar/108/logo.png
|
icon: https://git.beryju.org/uploads/-/system/project/avatar/108/logo.png
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
# This is a YAML-formatted file.
|
# This is a YAML-formatted file.
|
||||||
# Declare variables to be passed into your templates.
|
# Declare variables to be passed into your templates.
|
||||||
image:
|
image:
|
||||||
tag: 0.7.10-beta
|
tag: 0.7.11-beta
|
||||||
|
|
||||||
nameOverride: ""
|
nameOverride: ""
|
||||||
|
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
"""passbook"""
|
"""passbook"""
|
||||||
__version__ = "0.7.10-beta"
|
__version__ = "0.7.11-beta"
|
||||||
|
|||||||
@ -23,7 +23,7 @@ def _redirect_with_qs(view, get_query_set=None):
|
|||||||
"""Wrapper to redirect whilst keeping GET Parameters"""
|
"""Wrapper to redirect whilst keeping GET Parameters"""
|
||||||
target = reverse(view)
|
target = reverse(view)
|
||||||
if get_query_set:
|
if get_query_set:
|
||||||
target += "?" + urlencode(get_query_set)
|
target += "?" + urlencode(get_query_set.items())
|
||||||
return redirect(target)
|
return redirect(target)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -20,6 +20,5 @@ class CreateAssignPermView(CreateView):
|
|||||||
self.object._meta.app_label,
|
self.object._meta.app_label,
|
||||||
self.object._meta.model_name,
|
self.object._meta.model_name,
|
||||||
)
|
)
|
||||||
print(full_permission)
|
|
||||||
assign_perm(full_permission, self.request.user, self.object)
|
assign_perm(full_permission, self.request.user, self.object)
|
||||||
return response
|
return response
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
"""passbook Application Security Gateway Forms"""
|
"""passbook Application Security Gateway Forms"""
|
||||||
from django import forms
|
from django import forms
|
||||||
from oauth2_provider.generators import generate_client_id, generate_client_secret
|
from oauth2_provider.generators import generate_client_id, generate_client_secret
|
||||||
from oidc_provider.models import Client
|
from oidc_provider.models import Client, ResponseType
|
||||||
|
|
||||||
from passbook.providers.app_gw.models import ApplicationGatewayProvider
|
from passbook.providers.app_gw.models import ApplicationGatewayProvider
|
||||||
|
|
||||||
@ -16,9 +16,14 @@ class ApplicationGatewayProviderForm(forms.ModelForm):
|
|||||||
client_id=generate_client_id(), client_secret=generate_client_secret()
|
client_id=generate_client_id(), client_secret=generate_client_secret()
|
||||||
)
|
)
|
||||||
self.instance.client.name = self.instance.name
|
self.instance.client.name = self.instance.name
|
||||||
|
self.instance.client.response_types = ResponseType.objects.get_by_natural_key(
|
||||||
|
"code"
|
||||||
|
)
|
||||||
self.instance.client.redirect_uris = [
|
self.instance.client.redirect_uris = [
|
||||||
f"http://{self.instance.host}/oauth2/callback",
|
f"http://{self.instance.external_host}/oauth2/callback",
|
||||||
f"https://{self.instance.host}/oauth2/callback",
|
f"https://{self.instance.external_host}/oauth2/callback",
|
||||||
|
f"http://{self.instance.internal_host}/oauth2/callback",
|
||||||
|
f"https://{self.instance.internal_host}/oauth2/callback",
|
||||||
]
|
]
|
||||||
self.instance.client.scope = ["openid", "email"]
|
self.instance.client.scope = ["openid", "email"]
|
||||||
self.instance.client.save()
|
self.instance.client.save()
|
||||||
@ -27,8 +32,9 @@ class ApplicationGatewayProviderForm(forms.ModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
|
|
||||||
model = ApplicationGatewayProvider
|
model = ApplicationGatewayProvider
|
||||||
fields = ["name", "host"]
|
fields = ["name", "internal_host", "external_host"]
|
||||||
widgets = {
|
widgets = {
|
||||||
"name": forms.TextInput(),
|
"name": forms.TextInput(),
|
||||||
"host": forms.TextInput(),
|
"internal_host": forms.TextInput(),
|
||||||
|
"external_host": forms.TextInput(),
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,24 @@
|
|||||||
|
# Generated by Django 2.2.9 on 2020-01-02 15:05
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("passbook_providers_app_gw", "0003_applicationgatewayprovider"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name="applicationgatewayprovider",
|
||||||
|
old_name="host",
|
||||||
|
new_name="external_host",
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="applicationgatewayprovider",
|
||||||
|
name="internal_host",
|
||||||
|
field=models.TextField(default=""),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -14,7 +14,8 @@ class ApplicationGatewayProvider(Provider):
|
|||||||
"""This provider uses oauth2_proxy with the OIDC Provider."""
|
"""This provider uses oauth2_proxy with the OIDC Provider."""
|
||||||
|
|
||||||
name = models.TextField()
|
name = models.TextField()
|
||||||
host = models.TextField()
|
internal_host = models.TextField()
|
||||||
|
external_host = models.TextField()
|
||||||
|
|
||||||
client = models.ForeignKey(Client, on_delete=models.CASCADE)
|
client = models.ForeignKey(Client, on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
|||||||
@ -40,10 +40,10 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
OAUTH2_PROXY_CLIENT_ID: {{ provider.client.client_id }}
|
OAUTH2_PROXY_CLIENT_ID: {{ provider.client.client_id }}
|
||||||
OAUTH2_PROXY_CLIENT_SECRET: {{ provider.client.client_secret }}
|
OAUTH2_PROXY_CLIENT_SECRET: {{ provider.client.client_secret }}
|
||||||
OAUTH2_PROXY_REDIRECT_URL: https://{{ provider.host }}/oauth2/callback
|
OAUTH2_PROXY_REDIRECT_URL: https://{{ provider.external_host }}/oauth2/callback
|
||||||
OAUTH2_PROXY_OIDC_ISSUER_URL: https://{{ request.META.host }}/application/oidc
|
OAUTH2_PROXY_OIDC_ISSUER_URL: https://{{ request.META.HTTP_HOST }}/application/oidc
|
||||||
OAUTH2_PROXY_COOKIE_SECRET: {{ cookie_secret }}
|
OAUTH2_PROXY_COOKIE_SECRET: {{ cookie_secret }}
|
||||||
OAUTH2_PROXY_UPSTREAM: http://{{ provider.host }}</textarea>
|
OAUTH2_PROXY_UPSTREAM: http://{{ provider.internal_host }}</textarea>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-primary" data-dismiss="modal">{% trans 'Close' %}</button>
|
<button type="button" class="btn btn-primary" data-dismiss="modal">{% trans 'Close' %}</button>
|
||||||
|
|||||||
@ -1,21 +1,38 @@
|
|||||||
"""OIDC Permission checking"""
|
"""OIDC Permission checking"""
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
|
from django.http import HttpRequest, HttpResponse
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
|
from oidc_provider.models import Client
|
||||||
from structlog import get_logger
|
from structlog import get_logger
|
||||||
|
from django.db.models.deletion import Collector
|
||||||
|
|
||||||
from passbook.audit.models import Event, EventAction
|
from passbook.audit.models import Event, EventAction
|
||||||
from passbook.core.models import Application
|
from passbook.core.models import Application, User, Provider
|
||||||
from passbook.policies.engine import PolicyEngine
|
from passbook.policies.engine import PolicyEngine
|
||||||
|
|
||||||
LOGGER = get_logger()
|
LOGGER = get_logger()
|
||||||
|
|
||||||
|
|
||||||
def check_permissions(request, user, client):
|
def check_permissions(
|
||||||
|
request: HttpRequest, user: User, client: Client
|
||||||
|
) -> Optional[HttpResponse]:
|
||||||
"""Check permissions, used for
|
"""Check permissions, used for
|
||||||
https://django-oidc-provider.readthedocs.io/en/latest/
|
https://django-oidc-provider.readthedocs.io/en/latest/
|
||||||
sections/settings.html#oidc-after-userlogin-hook"""
|
sections/settings.html#oidc-after-userlogin-hook"""
|
||||||
try:
|
try:
|
||||||
application = client.openidprovider.application
|
# because oidc_provider is also used by app_gw, we can't be
|
||||||
|
# sure an OpenIDPRovider instance exists. hence we look through all related models
|
||||||
|
# and choose the one that inherits from Provider, which is guaranteed to
|
||||||
|
# have the application property
|
||||||
|
collector = Collector(using="default")
|
||||||
|
collector.collect([client])
|
||||||
|
for _, related in collector.data.items():
|
||||||
|
related_object = next(iter(related))
|
||||||
|
if isinstance(related_object, Provider):
|
||||||
|
application = related.application
|
||||||
|
break
|
||||||
except Application.DoesNotExist:
|
except Application.DoesNotExist:
|
||||||
return redirect("passbook_providers_oauth:oauth2-permission-denied")
|
return redirect("passbook_providers_oauth:oauth2-permission-denied")
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
|
|||||||
Reference in New Issue
Block a user