source: n4d-network/trunk/fuentes/n4d-nat-frontend.install/usr/share/n4d-nat-frontend/nat_manager.py @ 6784

Last change on this file since 6784 was 6784, checked in by hectorgh, 3 years ago

Adding CLIENT_PROXY_ENABLED support

File size: 5.4 KB
Line 
1import gi
2gi.require_version('Gtk','3.0')
3
4from gi.repository import Gtk
5import xmlrpclib
6import sys
7import os
8import os.path
9
10import signal
11
12signal.signal(signal.SIGINT, signal.SIG_DFL)
13
14import gettext
15gettext.textdomain('n4d-nat-frontend')
16_ = gettext.gettext
17
18class NatManager:
19       
20        def __init__(self,ip="localhost"):
21               
22                status=self.read_key()
23                self.client=xmlrpclib.ServerProxy("https://"+ip+":9779")
24               
25                if not status:
26                        print("[!] You need root privileges to run this program [!]")
27                        label = Gtk.Label(_("You need root privileges to run nat-manager"))
28                        dialog = Gtk.Dialog("Warning", None, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
29                        dialog.vbox.pack_start(label,True,True,10)
30                        label.show()
31                        dialog.set_border_width(6)
32                        response = dialog.run()
33                        dialog.destroy()
34                        sys.exit(0)
35                self.status={}
36                self.get_status_list()
37                self.build_gui()
38       
39        def read_key(self):
40               
41                try:
42                        f=open("/etc/n4d/key")
43                        self.key=f.readline().strip("\n")
44                        f.close()
45                        return True
46                except:
47                        return False
48
49        #def check_perms
50       
51        def get_status_list(self):
52               
53                try:
54                       
55                        ret=self.client.get_nat("","NetworkManager")
56                       
57                        self.status["nat"]=ret["status"]
58                        ret=self.client.get_routing("","NetworkManager")
59                        self.status["routing"]=ret["status"]
60                        self.status["nat_persistence"]=True
61                        self.status["routing_persistence"]=True
62                        proxy_status=self.client.get_variable("","VariablesManager","CLIENT_PROXY_ENABLED")
63                        if proxy_status==None:
64                                self.proxy_var_initialized=False
65                                proxy_status=True
66                        else:
67                                self.proxy_var_initialized=True
68                        self.status["proxy"]=proxy_status
69                        print self.status
70                       
71                       
72                except Exception as e:
73                        self.msg_label.set_text(_("N4D error: ") + str(e))
74                        #set msg error
75               
76        #def get_status_list
77
78       
79        def build_gui(self):
80               
81                builder=Gtk.Builder()
82                builder.set_translation_domain('n4d-nat-frontend')
83                if os.path.exists("/srv/svn/pandora/n4d-network/trunk/n4d-nat-frontend.install/usr/share/n4d-nat-frontend/rsrc/nat-manager.glade"):
84                        builder.add_from_file("/srv/svn/pandora/n4d-network/trunk/n4d-nat-frontend.install/usr/share/n4d-nat-frontend/rsrc/nat-manager.glade")
85                else:
86                        builder.add_from_file("/usr/share/n4d-nat-frontend/rsrc/nat-manager.ui")
87                       
88                self.window=builder.get_object("window")
89               
90                self.routing_enabled_rbutton=builder.get_object("routing_enabled_radiobutton")
91                self.routing_disabled_rbutton=builder.get_object("routing_disabled_radiobutton")
92               
93                self.routing_enabled_rbutton.set_active(self.status["routing"])
94                self.routing_disabled_rbutton.set_active(not self.status["routing"])
95               
96                self.nat_enabled_rbutton=builder.get_object("nat_enabled_radiobutton")
97                self.nat_disabled_rbutton=builder.get_object("nat_disabled_radiobutton")
98               
99                self.nat_enabled_rbutton.set_active(self.status["nat"])
100                self.nat_disabled_rbutton.set_active(not self.status["nat"])
101
102                self.msg_label=builder.get_object("msg_label")
103               
104                self.apply_button=builder.get_object("apply_button")
105                self.close_button=builder.get_object("close_button")
106               
107                self.apply_button.connect("clicked",self.apply_changes)
108                self.close_button.connect("clicked",self.close_window)
109                self.window.connect("destroy",self.close_window)
110               
111                self.proxy_frame=builder.get_object("proxy_frame")
112                self.proxy_enabled_rb=builder.get_object("proxy_enabled_radiobutton")
113                self.proxy_disabled_rb=builder.get_object("proxy_disabled_radiobutton")
114                self.proxy_enabled_rb.set_active(self.status["proxy"])
115                self.proxy_disabled_rb.set_active(not self.status["proxy"])
116               
117                self.nat_enabled_rbutton.connect("toggled",self.routing_changed)
118                self.routing_enabled_rbutton.connect("toggled",self.routing_changed)
119               
120                if not self.status["nat"] or not self.status["routing"]:
121                        self.proxy_frame.set_sensitive(False)
122               
123               
124                self.window.show_all()
125                Gtk.main()
126               
127        #def build_gui
128       
129       
130        def apply_changes(self,widget):
131               
132                self.status["routing"]=self.routing_enabled_rbutton.get_active()
133                self.status["nat"]=self.nat_enabled_rbutton.get_active()
134                self.status["proxy"]=self.proxy_enabled_rb.get_active()
135               
136                try:
137                        self.client.set_nat(self.key,"NetworkManager",self.status["nat"],self.status["nat_persistence"])
138                        self.client.set_routing(self.key,"NetworkManager",self.status["routing"],self.status["routing_persistence"])
139                       
140                        if self.status["routing"] and self.status["nat"]:
141                                self.set_client_proxy(self.status["proxy"])
142                        else:
143                                self.set_client_proxy(True)
144                               
145                        self.msg_label.set_text(_("Changes saved successfuly"))
146                except Exception as e:
147                        self.msg_label.set_text(_("Operation failed because: ") + str(e))
148               
149               
150        #def apply_changes
151       
152        def set_client_proxy(self,status):
153               
154                if not self.proxy_var_initialized:
155                        #INIT VALUE
156                        self.client.add_variable(self.key,"VariablesManager","CLIENT_PROXY_ENABLED",status,"","Variable to enable or disable proxy in classroom clients",[])
157                        self.proxy_var_initialized=True
158                        return True
159               
160                self.client.set_variable(self.key,"VariablesManager","CLIENT_PROXY_ENABLED",status)
161               
162        #def set_client_proxy
163       
164        def routing_changed(self,widget):
165               
166                if self.routing_enabled_rbutton.get_active() and self.nat_enabled_rbutton.get_active():
167                        self.proxy_frame.set_sensitive(True)
168                else:
169                        self.proxy_frame.set_sensitive(False)
170               
171        #def routing_changed
172       
173        def close_window(self,widget):
174               
175                Gtk.main_quit()
176                sys.exit(0)
177               
178        #def close_window
179       
180       
181#class NatManager
182
183def usage():
184        print("USAGE:")
185        print("\tnat-manager [ -ip TEMPLATE_FILE -u USER -p PASSWORD ]")
186
187if __name__=="__main__":
188       
189        nm=NatManager()
190       
Note: See TracBrowser for help on using the repository browser.