Просмотр исходного кода

Extended firewall tab gui - not implemented.

Agnieszka Kostrzewa 12 лет назад
Родитель
Сommit
82001fe51f
4 измененных файлов с 224 добавлено и 100 удалено
  1. 160 71
      newfwruledlg.ui
  2. 28 1
      qubesmanager/firewall.py
  3. 1 1
      qubesmanager/settings.py
  4. 35 27
      settingsdlg.ui

+ 160 - 71
newfwruledlg.ui

@@ -10,7 +10,7 @@
     <x>0</x>
     <y>0</y>
     <width>381</width>
-    <height>121</height>
+    <height>193</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -19,78 +19,167 @@
   <property name="modal">
    <bool>true</bool>
   </property>
-  <widget class="QDialogButtonBox" name="buttonBox">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>80</y>
-     <width>361</width>
-     <height>32</height>
-    </rect>
-   </property>
-   <property name="orientation">
-    <enum>Qt::Horizontal</enum>
-   </property>
-   <property name="standardButtons">
-    <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-   </property>
-  </widget>
-  <widget class="QLabel" name="label_2">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>14</y>
-     <width>62</width>
-     <height>17</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Address</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="label_4">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>44</y>
-     <width>61</width>
-     <height>21</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Service</string>
-   </property>
-  </widget>
-  <widget class="QComboBox" name="serviceComboBox">
-   <property name="geometry">
-    <rect>
-     <x>70</x>
-     <y>40</y>
-     <width>301</width>
-     <height>27</height>
-    </rect>
-   </property>
-   <property name="editable">
-    <bool>true</bool>
-   </property>
-  </widget>
-  <widget class="QComboBox" name="addressComboBox">
-   <property name="geometry">
-    <rect>
-     <x>70</x>
-     <y>10</y>
-     <width>301</width>
-     <height>27</height>
-    </rect>
-   </property>
-   <property name="editable">
-    <bool>true</bool>
-   </property>
-  </widget>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <layout class="QGridLayout" name="gridLayout_2">
+     <property name="leftMargin">
+      <number>0</number>
+     </property>
+     <property name="rightMargin">
+      <number>0</number>
+     </property>
+     <property name="verticalSpacing">
+      <number>6</number>
+     </property>
+     <item row="2" column="0">
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Protocol</string>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="0">
+      <widget class="QLabel" name="label_3">
+       <property name="text">
+        <string>Port</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="label_4">
+       <property name="text">
+        <string>Service</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1" colspan="3">
+      <widget class="QComboBox" name="serviceComboBox">
+       <property name="editable">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="0">
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>Address</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1" colspan="3">
+      <widget class="QComboBox" name="addressComboBox">
+       <property name="editable">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1">
+      <widget class="QRadioButton" name="tcp_radio">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>0</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>TCP</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="2">
+      <widget class="QRadioButton" name="udp_radio">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>0</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>UDP</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="3">
+      <widget class="QRadioButton" name="any_radio">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>71</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="text">
+        <string> Any   </string>
+       </property>
+       <property name="checked">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="1">
+      <widget class="QLineEdit" name="tcp_port_lineedit">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="inputMethodHints">
+        <set>Qt::ImhDigitsOnly</set>
+       </property>
+       <property name="maxLength">
+        <number>5</number>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="2">
+      <widget class="QLineEdit" name="udp_port_lineedit">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="inputMethodHints">
+        <set>Qt::ImhDigitsOnly</set>
+       </property>
+       <property name="maxLength">
+        <number>5</number>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
  </widget>
  <tabstops>
-  <tabstop>addressComboBox</tabstop>
-  <tabstop>serviceComboBox</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>
  <resources/>

+ 28 - 1
qubesmanager/firewall.py

@@ -81,7 +81,7 @@ class NewFwRuleDlg (QDialog, ui_newfwruledlg.Ui_NewFwRuleDlg):
         self.set_ok_enabled(False)
         self.addressComboBox.setValidator(QIPAddressValidator())
         self.addressComboBox.editTextChanged.connect(self.address_editing_finished)
-        self.serviceComboBox.setValidator(QRegExpValidator(QRegExp("[a-z][a-z0-9-]+|[0-9]+(-[0-9]+)?", Qt.CaseInsensitive), None))
+        self.serviceComboBox.setValidator(QRegExpValidator(QRegExp("\*|[a-z][a-z0-9-]+|[0-9]+(-[0-9]+)?", Qt.CaseInsensitive), None))
 
         self.serviceComboBox.setInsertPolicy(QComboBox.InsertAtBottom)
         self.populate_combos()
@@ -115,6 +115,21 @@ class NewFwRuleDlg (QDialog, ui_newfwruledlg.Ui_NewFwRuleDlg):
         if ok_button is not None:
             ok_button.setEnabled(on)
 
+    def on_tcp_radio_toggled(self, checked):
+        self.tcp_port_lineedit.setEnabled(checked)
+        self.udp_port_lineedit.setEnabled(not checked)
+
+    def on_udp_radio_toggled(self, checked):
+        self.tcp_port_lineedit.setEnabled(not checked)
+        self.udp_port_lineedit.setEnabled(checked)
+
+    def on_any_radio_toggled(self, checked):
+        self.tcp_port_lineedit.setEnabled(not checked)
+        self.udp_port_lineedit.setEnabled(not checked)
+
+
+
+
 class QubesFirewallRuleItem(object):
     def __init__(self, address = str(), netmask = 32, portBegin = 0, portEnd = None):
         self.__address = address
@@ -141,6 +156,8 @@ class QubesFirewallRuleItem(object):
     def hasChildren(self):
         return False
 
+
+
 class QubesFirewallRulesModel(QAbstractItemModel):
     def __init__(self, parent=None):
         QAbstractItemModel.__init__(self, parent)
@@ -168,6 +185,16 @@ class QubesFirewallRulesModel(QAbstractItemModel):
                 self.__services.append( (service["name"], int(service["port"]), service["protocol"]) )
         f.close()
 
+    def sort(self, idx, order):
+        from operator import attrgetter
+
+        rev = (order == Qt.AscendingOrder)
+        if idx==0:
+            self.children.sort(key=attrgetter('address'), reverse = rev)
+        if idx==1:
+            self.children.sort(key=lambda x: self.get_service_name(attrgetter('portBegin')) if attrgetter('portEnd') == None else attrgetter('portBegin'), reverse = rev)
+
+
     def get_service_name(self, port):
         for service in self.__services:
             if service[1] == port:

+ 1 - 1
qubesmanager/settings.py

@@ -144,7 +144,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
             thread_monitor.set_error_msg('\n'.join(ret))
             thread_monitor.set_finished()
             return
-        #self.fw_model.apply_rules()
+        self.fw_model.apply_rules()
         self.AppListManager.save_appmenu_select_changes()
         thread_monitor.set_finished()
 

+ 35 - 27
settingsdlg.ui

@@ -29,7 +29,7 @@
         <locale language="English" country="UnitedStates"/>
        </property>
        <property name="currentIndex">
-        <number>5</number>
+        <number>2</number>
        </property>
        <widget class="QWidget" name="basic_tab">
         <property name="locale">
@@ -470,22 +470,48 @@
         <attribute name="title">
          <string>Firewall rules</string>
         </attribute>
-        <layout class="QVBoxLayout" name="verticalLayout_7">
-         <item>
+        <layout class="QGridLayout" name="gridLayout_8">
+         <item row="0" column="0">
           <widget class="QRadioButton" name="policyAllowRadioButton">
            <property name="text">
             <string>Allow network access except...</string>
            </property>
           </widget>
          </item>
-         <item>
+         <item row="0" column="1">
+          <widget class="QCheckBox" name="icmpCheckBox">
+           <property name="minimumSize">
+            <size>
+             <width>323</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="text">
+            <string>Allow ICMP traffic</string>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="0">
           <widget class="QRadioButton" name="policyDenyRadioButton">
            <property name="text">
             <string>Deny network access except...</string>
            </property>
           </widget>
          </item>
-         <item>
+         <item row="1" column="1">
+          <widget class="QCheckBox" name="dnsCheckBox">
+           <property name="text">
+            <string>Allow DNS queries</string>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="0" colspan="2">
           <layout class="QHBoxLayout" name="horizontalLayout_2">
            <property name="sizeConstraint">
             <enum>QLayout::SetMaximumSize</enum>
@@ -503,6 +529,9 @@
                <property name="itemsExpandable">
                 <bool>false</bool>
                </property>
+               <property name="sortingEnabled">
+                <bool>true</bool>
+               </property>
                <property name="allColumnsShowFocus">
                 <bool>true</bool>
                </property>
@@ -518,28 +547,7 @@
               </widget>
              </item>
              <item>
-              <layout class="QHBoxLayout" name="horizontalLayout_4">
-               <item>
-                <widget class="QCheckBox" name="icmpCheckBox">
-                 <property name="text">
-                  <string>Allow ICMP traffic</string>
-                 </property>
-                 <property name="checked">
-                  <bool>true</bool>
-                 </property>
-                </widget>
-               </item>
-               <item>
-                <widget class="QCheckBox" name="dnsCheckBox">
-                 <property name="text">
-                  <string>Allow DNS queries</string>
-                 </property>
-                 <property name="checked">
-                  <bool>true</bool>
-                 </property>
-                </widget>
-               </item>
-              </layout>
+              <layout class="QHBoxLayout" name="horizontalLayout_4"/>
              </item>
             </layout>
            </item>