Compare commits
	
		
			3 Commits
		
	
	
		
			website/in
			...
			outpost-fo
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| bf9ac25740 | |||
| 95cd7ec904 | |||
| 3985725550 | 
@ -4,7 +4,8 @@ from dacite.core import from_dict
 | 
			
		||||
from dacite.exceptions import DaciteError
 | 
			
		||||
from django_filters.filters import ModelMultipleChoiceFilter
 | 
			
		||||
from django_filters.filterset import FilterSet
 | 
			
		||||
from drf_spectacular.utils import extend_schema
 | 
			
		||||
from drf_spectacular.types import OpenApiTypes
 | 
			
		||||
from drf_spectacular.utils import OpenApiResponse, extend_schema
 | 
			
		||||
from rest_framework.decorators import action
 | 
			
		||||
from rest_framework.exceptions import ValidationError
 | 
			
		||||
from rest_framework.fields import BooleanField, CharField, DateTimeField, SerializerMethodField
 | 
			
		||||
@ -29,9 +30,11 @@ from authentik.outposts.models import (
 | 
			
		||||
    OutpostType,
 | 
			
		||||
    default_outpost_config,
 | 
			
		||||
)
 | 
			
		||||
from authentik.outposts.tasks import outpost_send_update
 | 
			
		||||
from authentik.providers.ldap.models import LDAPProvider
 | 
			
		||||
from authentik.providers.proxy.models import ProxyProvider
 | 
			
		||||
from authentik.providers.radius.models import RadiusProvider
 | 
			
		||||
from authentik.rbac.decorators import permission_required
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class OutpostSerializer(ModelSerializer):
 | 
			
		||||
@ -200,3 +203,18 @@ class OutpostViewSet(UsedByMixin, ModelViewSet):
 | 
			
		||||
        """Global default outpost config"""
 | 
			
		||||
        host = self.request.build_absolute_uri("/")
 | 
			
		||||
        return Response({"config": default_outpost_config(host)})
 | 
			
		||||
 | 
			
		||||
    @permission_required(None, ["authentik_outposts.refresh_outpost"])
 | 
			
		||||
    @extend_schema(
 | 
			
		||||
        request=OpenApiTypes.NONE,
 | 
			
		||||
        responses={
 | 
			
		||||
            204: OpenApiResponse(description="Successfully refreshed outpost"),
 | 
			
		||||
            400: OpenApiResponse(description="Bad request"),
 | 
			
		||||
        },
 | 
			
		||||
    )
 | 
			
		||||
    @action(detail=True, methods=["POST"])
 | 
			
		||||
    def force_refresh(self, request: Request, pk: int) -> Response:
 | 
			
		||||
        """Force an outpost to refresh its configuration. Will also clear its cache."""
 | 
			
		||||
        outpost: Outpost = self.get_object()
 | 
			
		||||
        outpost_send_update(outpost)
 | 
			
		||||
        return Response(status=204)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										21
									
								
								authentik/outposts/migrations/0022_alter_outpost_options.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								authentik/outposts/migrations/0022_alter_outpost_options.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
# Generated by Django 5.0.6 on 2024-07-04 15:55
 | 
			
		||||
 | 
			
		||||
from django.db import migrations
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ("authentik_outposts", "0021_alter_outpost_type"),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AlterModelOptions(
 | 
			
		||||
            name="outpost",
 | 
			
		||||
            options={
 | 
			
		||||
                "permissions": [("refresh_outpost", "Trigger an outpost refresh")],
 | 
			
		||||
                "verbose_name": "Outpost",
 | 
			
		||||
                "verbose_name_plural": "Outposts",
 | 
			
		||||
            },
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
@ -424,6 +424,10 @@ class Outpost(SerializerModel, ManagedModel):
 | 
			
		||||
        verbose_name = _("Outpost")
 | 
			
		||||
        verbose_name_plural = _("Outposts")
 | 
			
		||||
 | 
			
		||||
        permissions = [
 | 
			
		||||
            ("refresh_outpost", _("Trigger an outpost refresh")),
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@dataclass
 | 
			
		||||
class OutpostState:
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										28
									
								
								schema.yml
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								schema.yml
									
									
									
									
									
								
							@ -9432,6 +9432,34 @@ paths:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/GenericError'
 | 
			
		||||
          description: ''
 | 
			
		||||
  /outposts/instances/{uuid}/force_refresh/:
 | 
			
		||||
    post:
 | 
			
		||||
      operationId: outposts_instances_force_refresh_create
 | 
			
		||||
      description: Force an outpost to refresh its configuration. Will also clear
 | 
			
		||||
        its cache.
 | 
			
		||||
      parameters:
 | 
			
		||||
      - in: path
 | 
			
		||||
        name: uuid
 | 
			
		||||
        schema:
 | 
			
		||||
          type: string
 | 
			
		||||
          format: uuid
 | 
			
		||||
        description: A UUID string identifying this Outpost.
 | 
			
		||||
        required: true
 | 
			
		||||
      tags:
 | 
			
		||||
      - outposts
 | 
			
		||||
      security:
 | 
			
		||||
      - authentik: []
 | 
			
		||||
      responses:
 | 
			
		||||
        '204':
 | 
			
		||||
          description: Successfully refreshed outpost
 | 
			
		||||
        '400':
 | 
			
		||||
          description: Bad request
 | 
			
		||||
        '403':
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: '#/components/schemas/GenericError'
 | 
			
		||||
          description: ''
 | 
			
		||||
  /outposts/instances/{uuid}/health/:
 | 
			
		||||
    get:
 | 
			
		||||
      operationId: outposts_instances_health_list
 | 
			
		||||
 | 
			
		||||
@ -158,7 +158,29 @@ export class OutpostListPage extends TablePage<Outpost> {
 | 
			
		||||
                              ${msg("View Deployment Info")}
 | 
			
		||||
                          </button>
 | 
			
		||||
                      </ak-outpost-deployment-modal>`
 | 
			
		||||
                    : html``}`,
 | 
			
		||||
                    : html``}
 | 
			
		||||
                <ak-forms-confirm
 | 
			
		||||
                    successMessage=${msg("Successfully refreshed outpost")}
 | 
			
		||||
                    errorMessage=${msg("Failed to refresh outpost")}
 | 
			
		||||
                    action=${msg("Refresh configuration")}
 | 
			
		||||
                    .onConfirm=${() => {
 | 
			
		||||
                        return new OutpostsApi(DEFAULT_CONFIG).outpostsInstancesForceRefreshCreate({
 | 
			
		||||
                            uuid: item.pk,
 | 
			
		||||
                        });
 | 
			
		||||
                    }}
 | 
			
		||||
                >
 | 
			
		||||
                    <span slot="header"> ${msg("Refresh outpost")} </span>
 | 
			
		||||
                    <p slot="body">
 | 
			
		||||
                        ${msg(
 | 
			
		||||
                            `Are you sure you want to refresh this outpost?
 | 
			
		||||
                            This will cause the outpost cache to be cleared.`,
 | 
			
		||||
                        )}
 | 
			
		||||
                    </p>
 | 
			
		||||
                    <button slot="trigger" class="pf-c-button pf-m-secondary" type="button">
 | 
			
		||||
                        ${msg("Refresh configuration")}
 | 
			
		||||
                    </button>
 | 
			
		||||
                    <div slot="modal"></div>
 | 
			
		||||
                </ak-forms-confirm> `,
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user