25
25
26
26
class QubesWhonixExtension (qubes .ext .Extension ):
27
27
'''qubes-core-admin extension for handling Whonix related settings'''
28
+ @staticmethod
29
+ def set_ws_netvm (app , vm ):
30
+ '''Set the default NetVM for a Whonix-Workstation qube.'''
31
+ if isinstance (vm , qubes .vm .templatevm .TemplateVM ):
32
+ return
33
+ template = getattr (vm , 'template' , None )
34
+ # look for appropriate whonix-gateway
35
+ if (
36
+ template is not None
37
+ and 'whonix-default-gw' in template .features
38
+ ):
39
+ netvm = template .features ['whonix-default-gw' ]
40
+ else :
41
+ netvm = 'sys-whonix'
42
+ if netvm in app .domains :
43
+ vm .netvm = netvm
44
+ else :
45
+ # expected netvm does not exists, log an error and set netvm
46
+ # to None
47
+ vm .log .error ('QubesWhonixExtension: netvm \' %s\' does not '
48
+ 'exists' , netvm )
49
+ vm .netvm = None
50
+
51
+ @staticmethod
52
+ def set_ws_dispvm (app , vm ):
53
+ '''Set the default DispVM for a Whonix-Workstation qube.'''
54
+ if isinstance (vm , qubes .vm .templatevm .TemplateVM ):
55
+ return
56
+ template = getattr (vm , 'template' , None )
57
+ # look for appropriate default dispvm
58
+ if (
59
+ template is not None
60
+ and 'whonix-default-dispvm' in template .features
61
+ ):
62
+ default_dispvm = template .features ['whonix-default-dispvm' ]
63
+ elif template is not None :
64
+ # example template.name: whonix-ws-14
65
+ # example default_dispvm: whonix-ws-14-dvm
66
+ default_dispvm = template .name + '-dvm'
67
+ else :
68
+ # assume whonix-workstation-17-dvm is right
69
+ # HARDCODED.
70
+ default_dispvm = 'whonix-workstation-17-dvm'
71
+
72
+ if default_dispvm in app .domains :
73
+ vm .default_dispvm = default_dispvm
74
+ else :
75
+ # expected default dispvm does not exists, log an error and set
76
+ # default dispvm to None
77
+ vm .log .error ('QubesWhonixExtension: default dispvm\' %s\' does '
78
+ 'not exists' , default_dispvm )
79
+ vm .default_dispvm = None
80
+
28
81
@qubes .ext .handler ('domain-add' , system = True )
29
82
def on_domain_add (self , app , _event , vm , ** _kwargs ):
30
83
'''Handle new AppVM created on whonix-ws/whonix-gw template and
@@ -41,41 +94,21 @@ def on_domain_add(self, app, _event, vm, **_kwargs):
41
94
# this is new VM based on whonix-ws, adjust its default settings
42
95
43
96
vm .tags .add ('anon-vm' )
44
-
45
- # look for appropriate whonix-gateway
46
- if 'whonix-default-gw' in template .features :
47
- netvm = template .features ['whonix-default-gw' ]
48
- else :
49
- netvm = 'sys-whonix'
50
- if netvm in app .domains :
51
- vm .netvm = netvm
52
- else :
53
- # expected netvm does not exists, log an error and set netvm
54
- # to None
55
- vm .log .error ('QubesWhonixExtension: netvm \' %s\' does not '
56
- 'exists' , netvm )
57
- vm .netvm = None
58
-
59
- # look for appropriate default dispvm
60
- if 'whonix-default-dispvm' in template .features :
61
- default_dispvm = template .features ['whonix-default-dispvm' ]
62
- else :
63
- # example template.name: whonix-ws-14
64
- # example default_dispvm: whonix-ws-14-dvm
65
- default_dispvm = template .name + '-dvm'
66
-
67
- if default_dispvm in app .domains :
68
- vm .default_dispvm = default_dispvm
69
- else :
70
- # expected default dispvm does not exists, log an error and set
71
- # default dispvm to None
72
- vm .log .error ('QubesWhonixExtension: default dispvm\' %s\' does '
73
- 'not exists' , default_dispvm )
74
- vm .default_dispvm = None
97
+ self .set_ws_netvm (app , vm )
98
+ self .set_ws_dispvm (app , vm )
75
99
76
100
if 'gui-events-max-delay' not in vm .features :
77
101
vm .features ['gui-events-max-delay' ] = 100
78
102
103
+ @qubes .ext .handler ('domain-feature-set:whonix-ws' )
104
+ def on_whonix_ws_feature_set (self , vm , event , feature , value , oldvalue = None ):
105
+ '''Set NetVM and DispVM appropriately on VMs that are newly set as a
106
+ Whonix-Workstation VM (mostly useful for configuring StandaloneVMs
107
+ '''
108
+ if value == '1' :
109
+ self .set_ws_netvm (vm .app , vm )
110
+ self .set_ws_dispvm (vm .app , vm )
111
+
79
112
@qubes .ext .handler ('features-request' )
80
113
def on_features_request (self , vm , _event , untrusted_features ):
81
114
'''Handle whonix-ws/whonix-gw template advertising itself'''
0 commit comments