3333from qubesadmin import utils
3434from qubesadmin .tools import qvm_start
3535
36+ # pylint: disable=import-error
37+ from PyQt6 import QtWidgets
38+
3639# pylint: disable=import-error
3740from PyQt6 .QtCore import (Qt , QAbstractTableModel , QObject , pyqtSlot , QEvent ,
3841 QSettings , QRegularExpression , QSortFilterProxyModel ,
@@ -959,6 +962,32 @@ def change_template(self, template):
959962
960963 def change_network (self , netvm_name ):
961964 selected_vms = self .get_selected_vms ()
965+
966+ if netvm_name :
967+ check_power = any (info .state ['power' ] == 'Running' for info
968+ in self .get_selected_vms ())
969+ if netvm_name == 'default' :
970+ netvm = self ._get_default_netvm ()
971+ else :
972+ netvm = self .qubes_cache .get_vm (name = netvm_name )
973+ netvm = netvm .vm
974+
975+ if netvm :
976+ vms_tags = {tag
977+ for selected_vm in selected_vms
978+ for tag in selected_vm .vm .tags }
979+ if 'anon-vm' in vms_tags and not 'anon-gateway' in netvm .tags :
980+ QtWidgets .QMessageBox .warning (
981+ self ,
982+ self .tr ("Warning!" ),
983+ self .tr (
984+ "Anonymous qubes must be connected to an anonymous "
985+ "gateway to ensure privacy and anonymity. By "
986+ "changing the net qube to a gateway that does not "
987+ "provide anonymity, your IP address will be leaked "
988+ "on the Internet. Continue at your own risk." )
989+ )
990+
962991 reply = QMessageBox .question (
963992 self , self .tr ("Network Change Confirmation" ),
964993 self .tr ("Do you want to change '{0}'<br>"
@@ -969,27 +998,20 @@ def change_network(self, netvm_name):
969998 if reply != QMessageBox .StandardButton .Yes :
970999 return
9711000
972- if netvm_name :
973- check_power = any (info .state ['power' ] == 'Running' for info
974- in self .get_selected_vms ())
975- if netvm_name == 'default' :
976- netvm = self ._get_default_netvm ()
977- else :
978- netvm = self .qubes_cache .get_vm (name = netvm_name )
979- netvm = netvm .vm
980- if check_power and netvm and not netvm .is_running ():
981- reply = QMessageBox .question (
982- self , self .tr ("Qube Start Confirmation" ),
983- self .tr ("<br>Can not change netvm to a halted Qube.<br>"
984- "Do you want to start the Qube <b>'{0}'</b>?" ).format (
985- netvm_name ),
986- QMessageBox .StandardButton .Yes |
987- QMessageBox .StandardButton .Cancel )
1001+ # pylint: disable=possibly-used-before-assignment
1002+ if netvm_name and check_power and netvm and not netvm .is_running ():
1003+ reply = QMessageBox .question (
1004+ self , self .tr ("Qube Start Confirmation" ),
1005+ self .tr ("<br>Can not change netvm to a halted Qube.<br>"
1006+ "Do you want to start the Qube <b>'{0}'</b>?" ).format (
1007+ netvm_name ),
1008+ QMessageBox .StandardButton .Yes |
1009+ QMessageBox .StandardButton .Cancel )
9881010
989- if reply == QMessageBox .StandardButton .Yes :
990- self .start_vm (netvm , True )
991- else :
992- return
1011+ if reply == QMessageBox .StandardButton .Yes :
1012+ self .start_vm (netvm , True )
1013+ else :
1014+ return
9931015
9941016 errors = []
9951017 for info in self .get_selected_vms ():
0 commit comments