Compare commits
	
		
			7 Commits
		
	
	
		
			version/0.
			...
			version/0.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2ed8e72c62 | |||
| edeed18ae8 | |||
| d24133d8a2 | |||
| b9733e56aa | |||
| cd34413914 | |||
| c3a4a76d43 | |||
| a59a29b256 | 
@ -1,5 +1,5 @@
 | 
			
		||||
[bumpversion]
 | 
			
		||||
current_version = 0.7.10-beta
 | 
			
		||||
current_version = 0.7.11-beta
 | 
			
		||||
tag = True
 | 
			
		||||
commit = True
 | 
			
		||||
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
 | 
			
		||||
        run: docker build
 | 
			
		||||
          --no-cache
 | 
			
		||||
          -t beryju/passbook:0.7.10-beta
 | 
			
		||||
          -t beryju/passbook:0.7.11-beta
 | 
			
		||||
          -t beryju/passbook:latest
 | 
			
		||||
          -f Dockerfile .
 | 
			
		||||
      - 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)
 | 
			
		||||
        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:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    services:
 | 
			
		||||
@ -45,11 +64,11 @@ jobs:
 | 
			
		||||
        run: docker build
 | 
			
		||||
          --no-cache
 | 
			
		||||
          --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
 | 
			
		||||
          -f static.Dockerfile .
 | 
			
		||||
      - 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)
 | 
			
		||||
        run: docker push beryju/passbook-static:latest
 | 
			
		||||
  test-release:
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
appVersion: "0.7.10-beta"
 | 
			
		||||
appVersion: "0.7.11-beta"
 | 
			
		||||
description: A Helm chart for 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
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
# This is a YAML-formatted file.
 | 
			
		||||
# Declare variables to be passed into your templates.
 | 
			
		||||
image:
 | 
			
		||||
  tag: 0.7.10-beta
 | 
			
		||||
  tag: 0.7.11-beta
 | 
			
		||||
 | 
			
		||||
nameOverride: ""
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,2 +1,2 @@
 | 
			
		||||
"""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"""
 | 
			
		||||
    target = reverse(view)
 | 
			
		||||
    if get_query_set:
 | 
			
		||||
        target += "?" + urlencode(get_query_set)
 | 
			
		||||
        target += "?" + urlencode(get_query_set.items())
 | 
			
		||||
    return redirect(target)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,5 @@ class CreateAssignPermView(CreateView):
 | 
			
		||||
                self.object._meta.app_label,
 | 
			
		||||
                self.object._meta.model_name,
 | 
			
		||||
            )
 | 
			
		||||
            print(full_permission)
 | 
			
		||||
            assign_perm(full_permission, self.request.user, self.object)
 | 
			
		||||
        return response
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
"""passbook Application Security Gateway Forms"""
 | 
			
		||||
from django import forms
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
@ -16,9 +16,14 @@ class ApplicationGatewayProviderForm(forms.ModelForm):
 | 
			
		||||
                client_id=generate_client_id(), client_secret=generate_client_secret()
 | 
			
		||||
            )
 | 
			
		||||
        self.instance.client.name = self.instance.name
 | 
			
		||||
        self.instance.client.response_types = ResponseType.objects.get_by_natural_key(
 | 
			
		||||
            "code"
 | 
			
		||||
        )
 | 
			
		||||
        self.instance.client.redirect_uris = [
 | 
			
		||||
            f"http://{self.instance.host}/oauth2/callback",
 | 
			
		||||
            f"https://{self.instance.host}/oauth2/callback",
 | 
			
		||||
            f"http://{self.instance.external_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.save()
 | 
			
		||||
@ -27,8 +32,9 @@ class ApplicationGatewayProviderForm(forms.ModelForm):
 | 
			
		||||
    class Meta:
 | 
			
		||||
 | 
			
		||||
        model = ApplicationGatewayProvider
 | 
			
		||||
        fields = ["name", "host"]
 | 
			
		||||
        fields = ["name", "internal_host", "external_host"]
 | 
			
		||||
        widgets = {
 | 
			
		||||
            "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."""
 | 
			
		||||
 | 
			
		||||
    name = models.TextField()
 | 
			
		||||
    host = models.TextField()
 | 
			
		||||
    internal_host = models.TextField()
 | 
			
		||||
    external_host = models.TextField()
 | 
			
		||||
 | 
			
		||||
    client = models.ForeignKey(Client, on_delete=models.CASCADE)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -40,10 +40,10 @@ services:
 | 
			
		||||
    environment:
 | 
			
		||||
      OAUTH2_PROXY_CLIENT_ID: {{ provider.client.client_id }}
 | 
			
		||||
      OAUTH2_PROXY_CLIENT_SECRET: {{ provider.client.client_secret }}
 | 
			
		||||
      OAUTH2_PROXY_REDIRECT_URL: https://{{ provider.host }}/oauth2/callback
 | 
			
		||||
      OAUTH2_PROXY_OIDC_ISSUER_URL: https://{{ request.META.host }}/application/oidc
 | 
			
		||||
      OAUTH2_PROXY_REDIRECT_URL: https://{{ provider.external_host }}/oauth2/callback
 | 
			
		||||
      OAUTH2_PROXY_OIDC_ISSUER_URL: https://{{ request.META.HTTP_HOST }}/application/oidc
 | 
			
		||||
      OAUTH2_PROXY_COOKIE_SECRET: {{ cookie_secret }}
 | 
			
		||||
      OAUTH2_PROXY_UPSTREAM: http://{{ provider.host }}</textarea>
 | 
			
		||||
      OAUTH2_PROXY_UPSTREAM: http://{{ provider.internal_host }}</textarea>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="modal-footer">
 | 
			
		||||
        <button type="button" class="btn btn-primary" data-dismiss="modal">{% trans 'Close' %}</button>
 | 
			
		||||
 | 
			
		||||
@ -1,21 +1,38 @@
 | 
			
		||||
"""OIDC Permission checking"""
 | 
			
		||||
from typing import Optional
 | 
			
		||||
 | 
			
		||||
from django.contrib import messages
 | 
			
		||||
from django.http import HttpRequest, HttpResponse
 | 
			
		||||
from django.shortcuts import redirect
 | 
			
		||||
from oidc_provider.models import Client
 | 
			
		||||
from structlog import get_logger
 | 
			
		||||
from django.db.models.deletion import Collector
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
LOGGER = get_logger()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def check_permissions(request, user, client):
 | 
			
		||||
def check_permissions(
 | 
			
		||||
    request: HttpRequest, user: User, client: Client
 | 
			
		||||
) -> Optional[HttpResponse]:
 | 
			
		||||
    """Check permissions, used for
 | 
			
		||||
    https://django-oidc-provider.readthedocs.io/en/latest/
 | 
			
		||||
    sections/settings.html#oidc-after-userlogin-hook"""
 | 
			
		||||
    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:
 | 
			
		||||
        return redirect("passbook_providers_oauth:oauth2-permission-denied")
 | 
			
		||||
    LOGGER.debug(
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user