-
-
Notifications
You must be signed in to change notification settings - Fork 288
Expand file tree
/
Copy pathtasks.py
More file actions
106 lines (89 loc) · 3.38 KB
/
tasks.py
File metadata and controls
106 lines (89 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import logging
import requests
from celery import shared_task
from celery.exceptions import SoftTimeLimitExceeded
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from swapper import load_model
from openwisp_utils.tasks import OpenwispCeleryTask
logger = logging.getLogger(__name__)
@shared_task(soft_time_limit=1200)
def update_template_related_config_status(template_pk):
"""
Flags config objects related to the specified
template PK as modified and triggers config
modified and config status changed signals
"""
Template = load_model('config', 'Template')
try:
template = Template.objects.get(pk=template_pk)
except ObjectDoesNotExist as e:
logger.warning(
f'update_template_related_config_status("{template_pk}") failed: {e}'
)
return
try:
template._update_related_config_status()
except SoftTimeLimitExceeded:
logger.error(
'soft time limit hit while executing '
f'_update_related_config_status for {template} '
f'(ID: {template_pk})'
)
@shared_task(soft_time_limit=1200)
def create_vpn_dh(vpn_pk):
"""
Generates DH parameters
"""
Vpn = load_model('config', 'Vpn')
vpn = Vpn.objects.get(pk=vpn_pk)
try:
vpn.dh = Vpn.dhparam(2048)
except SoftTimeLimitExceeded:
logger.error(
'soft time limit hit while generating DH '
f'parameters for VPN Server {vpn} (ID: {vpn_pk})'
)
else:
vpn.full_clean()
vpn.save()
@shared_task(base=OpenwispCeleryTask)
def invalidate_devicegroup_cache_change(instance_id, model_name):
from .api.views import DeviceGroupCommonName
Device = load_model('config', 'Device')
DeviceGroup = load_model('config', 'DeviceGroup')
Cert = load_model('django_x509', 'Cert')
if model_name == Device._meta.model_name:
DeviceGroupCommonName.device_change_invalidates_cache(instance_id)
elif model_name == DeviceGroup._meta.model_name:
DeviceGroupCommonName.devicegroup_change_invalidates_cache(instance_id)
elif model_name == Cert._meta.model_name:
DeviceGroupCommonName.certificate_change_invalidates_cache(instance_id)
@shared_task(base=OpenwispCeleryTask)
def invalidate_devicegroup_cache_delete(instance_id, model_name, **kwargs):
from .api.views import DeviceGroupCommonName
DeviceGroup = load_model('config', 'DeviceGroup')
Cert = load_model('django_x509', 'Cert')
if model_name == DeviceGroup._meta.model_name:
DeviceGroupCommonName.devicegroup_delete_invalidates_cache(
kwargs['organization_id']
)
elif model_name == Cert._meta.model_name:
DeviceGroupCommonName.certificate_delete_invalidates_cache(
kwargs['organization_id'], kwargs['common_name']
)
@shared_task(base=OpenwispCeleryTask)
def trigger_vpn_server_endpoint(endpoint, auth_token, vpn_id):
response = requests.post(
endpoint,
params={'key': auth_token},
verify=False if getattr(settings, 'DEBUG') else True,
)
if response.status_code == 200:
logger.info(f'Triggered update webhook of VPN Server UUID: {vpn_id}')
else:
logger.error(
'Failed to update VPN Server configuration. '
f'Response status code: {response.status_code}, '
f'VPN Server UUID: {vpn_id}',
)