Skip to content

Commit 9360a85

Browse files
authored
admin: add action to regenerate VPN client key/certificate (#417)
1 parent d1d1cfd commit 9360a85

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

scionlab/admin.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,7 @@ def num_clients(self, obj):
616616

617617
@admin.register(VPNClient)
618618
class VPNClientAdmin(admin.ModelAdmin):
619+
actions = ['update_key']
619620
list_display = ('__str__', 'vpn', 'ip', 'common_name')
620621
list_display_links = ('__str__',)
621622
list_filter = ('vpn', 'active')
@@ -629,6 +630,15 @@ def get_form(self, request, obj=None, **kwargs):
629630
kwargs['form'] = VPNClientCreationForm
630631
return super().get_form(request, obj, **kwargs)
631632

633+
def update_key(self, request, queryset):
634+
"""
635+
Admin action: generate new keys / certificates for the selected VPN clients.
636+
"""
637+
for vpnclient in queryset.iterator():
638+
vpnclient.update_key()
639+
640+
update_key.short_description = 'Generate new keys/certificates for the selected VPN clients'
641+
632642

633643
class VPNClientCreationForm(_CreateUpdateModelForm):
634644
"""

scionlab/models/vpn.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,14 @@ def init_key(self):
224224
self.private_key = key
225225
self.cert = cert
226226

227+
def update_key(self):
228+
"""
229+
Generate new key/certificate and save. Bump configuration on related Host.
230+
"""
231+
self.init_key()
232+
self.save()
233+
self.host.bump_config()
234+
227235

228236
@receiver(pre_delete, sender=VPN, dispatch_uid='vpn_delete_callback')
229237
def _vpn_pre_delete(sender, instance, using, **kwargs):

0 commit comments

Comments
 (0)