Compare commits
3 Commits
admin/add-
...
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