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

Last change on this file since 6789 was 6789, checked in by hectorgh, 20 months ago

removing print

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                       
70                except Exception as e:
71                        self.msg_label.set_text(_("N4D error: ") + str(e))
72                        #set msg error
73               
74        #def get_status_list
75
76       
77        def build_gui(self):
78               
79                builder=Gtk.Builder()
80                builder.set_translation_domain('n4d-nat-frontend')
81                if os.path.exists("/srv/svn/pandora/n4d-network/trunk/n4d-nat-frontend.install/usr/share/n4d-nat-frontend/rsrc/nat-manager.glade"):
82                        builder.add_from_file("/srv/svn/pandora/n4d-network/trunk/n4d-nat-frontend.install/usr/share/n4d-nat-frontend/rsrc/nat-manager.glade")
83                else:
84                        builder.add_from_file("/usr/share/n4d-nat-frontend/rsrc/nat-manager.ui")
85                       
86                self.window=builder.get_object("window")
87               
88                self.routing_enabled_rbutton=builder.get_object("routing_enabled_radiobutton")
89                self.routing_disabled_rbutton=builder.get_object("routing_disabled_radiobutton")
90               
91                self.routing_enabled_rbutton.set_active(self.status["routing"])
92                self.routing_disabled_rbutton.set_active(not self.status["routing"])
93               
94                self.nat_enabled_rbutton=builder.get_object("nat_enabled_radiobutton")
95                self.nat_disabled_rbutton=builder.get_object("nat_disabled_radiobutton")
96               
97                self.nat_enabled_rbutton.set_active(self.status["nat"])
98                self.nat_disabled_rbutton.set_active(not self.status["nat"])
99
100                self.msg_label=builder.get_object("msg_label")
101               
102                self.apply_button=builder.get_object("apply_button")
103                self.close_button=builder.get_object("close_button")
104               
105                self.apply_button.connect("clicked",self.apply_changes)
106                self.close_button.connect("clicked",self.close_window)
107                self.window.connect("destroy",self.close_window)
108               
109                self.proxy_frame=builder.get_object("proxy_frame")
110                self.proxy_enabled_rb=builder.get_object("proxy_enabled_radiobutton")
111                self.proxy_disabled_rb=builder.get_object("proxy_disabled_radiobutton")
112                self.proxy_enabled_rb.set_active(self.status["proxy"])
113                self.proxy_disabled_rb.set_active(not self.status["proxy"])
114               
115                self.nat_enabled_rbutton.connect("toggled",self.routing_changed)
116                self.routing_enabled_rbutton.connect("toggled",self.routing_changed)
117               
118                if not self.status["nat"] or not self.status["routing"]:
119                        self.proxy_frame.set_sensitive(False)
120               
121               
122                self.window.show_all()
123                Gtk.main()
124               
125        #def build_gui
126       
127       
128        def apply_changes(self,widget):
129               
130                self.status["routing"]=self.routing_enabled_rbutton.get_active()
131                self.status["nat"]=self.nat_enabled_rbutton.get_active()
132                self.status["proxy"]=self.proxy_enabled_rb.get_active()
133               
134                try:
135                        self.client.set_nat(self.key,"NetworkManager",self.status["nat"],self.status["nat_persistence"])
136                        self.client.set_routing(self.key,"NetworkManager",self.status["routing"],self.status["routing_persistence"])
137                       
138                        if self.status["routing"] and self.status["nat"]:
139                                self.set_client_proxy(self.status["proxy"])
140                        else:
141                                self.set_client_proxy(True)
142                               
143                        self.msg_label.set_text(_("Changes saved successfuly"))
144                except Exception as e:
145                        self.msg_label.set_text(_("Operation failed because: ") + str(e))
146               
147               
148        #def apply_changes
149       
150        def set_client_proxy(self,status):
151               
152                if not self.proxy_var_initialized:
153                        #INIT VALUE
154                        self.client.add_variable(self.key,"VariablesManager","CLIENT_PROXY_ENABLED",status,"","Variable to enable or disable proxy in classroom clients",[])
155                        self.proxy_var_initialized=True
156                        return True
157               
158                self.client.set_variable(self.key,"VariablesManager","CLIENT_PROXY_ENABLED",status)
159               
160        #def set_client_proxy
161       
162        def routing_changed(self,widget):
163               
164                if self.routing_enabled_rbutton.get_active() and self.nat_enabled_rbutton.get_active():
165                        self.proxy_frame.set_sensitive(True)
166                else:
167                        self.proxy_frame.set_sensitive(False)
168               
169        #def routing_changed
170       
171        def close_window(self,widget):
172               
173                Gtk.main_quit()
174                sys.exit(0)
175               
176        #def close_window
177       
178       
179#class NatManager
180
181def usage():
182        print("USAGE:")
183        print("\tnat-manager [ -ip TEMPLATE_FILE -u USER -p PASSWORD ]")
184
185if __name__=="__main__":
186       
187        nm=NatManager()
188       
Note: See TracBrowser for help on using the repository browser.