source: zero-server-wizard/trunk/fuentes/install-files/usr/share/zero-server-wizard/core.py @ 159

Last change on this file since 159 was 159, checked in by mabarracus, 5 years ago

Fixed warnings

File size: 7.8 KB
Line 
1# -*- coding: utf-8 -*-
2
3import os
4import os.path
5import sys
6import datetime
7import signal
8import platform
9
10#CUSTOM IMPORTS
11import ConfigurationManager
12import TemplateManager
13try:
14        import gi
15        gi.require_version('Gtk', '3.0')
16        from gi.repository import Gtk, Gdk, GObject
17       
18        GUI_READY=True
19       
20except:
21       
22        GUI_READY=False
23
24
25
26import independent
27import master
28import slave
29
30
31#VARIABLES
32signal.signal(signal.SIGINT, signal.SIG_DFL)
33
34CONF_PATH="/etc/zero-server-wizard/enabled.d/"
35ZSW_LOG="/var/log/zero-server-wizard/zsw-log"
36
37
38class Core:
39       
40        def __init__(self,mode="cli",template=None):
41       
42                print("[CORE] Initializing ZSW Core...")
43                self.lang=self.get_lang()
44                self.servers=self.load_configuration_files(CONF_PATH)
45               
46                self.platform=platform.machine()
47               
48                if mode!="cli" and mode!="gui":
49                                mode="gui"
50                self.mode=mode
51               
52                if template!=None:
53                        self.template=self.parse_template_file(template)
54                else:
55                        self.template=None
56
57                self.independent=independent.Independent(self)                 
58                self.master=master.Master(self)
59                self.slave=slave.Slave(self)
60               
61                       
62                print("[CORE] " + self.mode.upper() + " MODE READY")
63                if self.template!=None:
64                                       
65                        print("[CORE] Loading " + self.template["id"] + " module...")
66                        try:
67                                execfile(self.servers[self.template["id"]]["folder"],locals())
68                        except Exception as e:
69                                print(e)
70                                self.log("[CORE] Error loading " + self.template["id"])
71                                sys.exit(1)
72                               
73                        id=self.template["id"]
74                        s=locals()[self.servers[id]["class_name"]](self,self.servers[id])
75                       
76                        f=open("/etc/n4d/key")
77                        key=f.readline().strip("\n")
78                        f.close()
79                        self.template["masterkey"]=key
80                       
81                       
82                        if mode=="cli":
83                                ret=s.execute(self.template)
84                                if ret:
85                                        print("[CORE] Initialization complete!!")
86                                else:
87                                        print("[CORE] [!] Initialization failed [!]")
88               
89                if self.mode=="cli" and self.template==None:
90                        print("[CORE][!] Cli mode needs a template file to start initialization.")
91                        sys.exit(0)
92               
93                if self.mode=="gui":
94                        self.template={}
95                       
96                        f=open("/etc/n4d/key")
97                        key=f.readline().strip("\n")
98                        f.close()
99                        self.template["masterkey"]=key                 
100                       
101                        self.start_gui()
102                       
103                       
104       
105        #def __init__
106       
107        def start_gui(self):
108               
109                builder = Gtk.Builder()
110                builder.set_translation_domain("zero-server-wizard")
111               
112                self.builder=builder
113               
114                if os.path.exists("/srv/svn/pandora/zero-server-wizard/trunk/install-files/usr/share/zero-server-wizard/rsrc/main.glade"):
115                        builder.add_from_file("/srv/svn/pandora/zero-server-wizard/trunk/install-files/usr/share/zero-server-wizard/rsrc/main.glade")
116                else:
117                        builder.add_from_file("/usr/share/zero-server-wizard/rsrc/main.glade")
118               
119               
120               
121                       
122                self.window=builder.get_object("window1")
123                self.window.set_name("Window2")
124                self.window.connect("destroy",self.close_window)
125                self.notebook=builder.get_object("notebook1")
126               
127               
128                #background-image: -gtk-gradient (linear,       left top, left bottom, from (#f86f05),  to (#8f4103));
129                #background-image: -gtk-gradient (linear,       left top, left bottom, from (rgba(255,255,255,1)),  to (rgba(210,210,210,1)));
130                #background-image: -gtk-gradient (linear,       left top, right top, from (rgba(255,255,255,1)),  to (rgba(210,210,210,0)));
131
132                css = """
133                #ButtonBox {
134                        background-image: -gtk-gradient (linear,        left top, right top, from (rgba(255,255,255,0.6)),  to (rgba(210,210,210,0)));
135                }
136               
137                #Window2 {
138                        background-image: -gtk-gradient (linear,        left top, left bottom, from (#f86f05),  to (#d17e08));
139                }
140               
141                #Custom{
142                        border-radius: 50px;
143                }
144               
145               
146                GtkButton {
147               
148                        border-radius:50px;
149                }
150               
151                #Button{
152                        background-image: -gtk-gradient (linear,        left top, left bottom, from (#f5f5f5),  to (#dedede));
153                       
154                        border-radius: 0px;
155                       
156                }
157               
158                .entry{
159                        border-radius: 50px;
160                }
161               
162                GtkViewport{
163                       
164                        background-image: -gtk-gradient (linear,        left top, left bottom, from (rgba(255,255,255,1)),  to (rgba(210,210,210,1)));
165                }
166
167
168                """
169               
170                self.style_provider=Gtk.CssProvider()
171                self.style_provider.load_from_data(css)
172               
173                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
174                self.window_box=builder.get_object("box1")
175
176
177                self.exit_button=builder.get_object("quit_button")
178                self.exit_button.set_name("Button")
179                self.exit_button.connect("clicked",self.close_window)
180               
181                self.window.show_all()
182               
183                if "INDEPENDENT" in self.servers:
184                        self.independent.start_gui()
185                else:
186                        self.notebook.get_nth_page(0).hide()
187                       
188                if "MASTER" in self.servers:
189                        self.master.start_gui()
190                else:
191                        self.notebook.get_nth_page(1).hide()
192                       
193                       
194                if "SLAVE" in self.servers:
195                        self.slave.start_gui()
196                else:
197                        self.notebook.get_nth_page(2).hide()   
198               
199                GObject.threads_init()
200                Gtk.main()
201                GObject.threads_leave()
202               
203        #def start_gui
204       
205        def apply_clicked(self,widget):
206               
207                try:
208                        self.template=self.parse_template_file(self.file_chooser.get_filename())
209                except Exception as e:
210                        self.msg_label.set_text("Error parsing template")
211
212        #def apply_clicked
213       
214       
215        def populate_buttons(self):
216               
217                for server in self.servers:
218                        button=Gtk.Button(server)
219                        button.show()
220                        #button.set_name("Button")
221                        button.connect("clicked",self.button_click,server)
222                        self.buttons_box.pack_start(button,False,False  ,5)
223               
224        #def populate_buttons
225
226       
227        def button_click(self,widget,id):
228               
229                print("[CORE] Loading " + id+ " module...")
230                try:
231                        execfile(self.servers[id]["folder"]+"/main.py",locals())
232                except Exception as e:
233                        print(e)
234                        self.log("[CORE] Error loading " + id)
235                        sys.exit(1)
236                               
237                s=locals()[self.servers[id]["class_name"]](self,self.servers[id])
238                s.start_gui(False)
239               
240        #def button_click
241       
242       
243        def close_window(self,widget):
244               
245                Gtk.main_quit()
246                sys.exit(0)
247               
248        #def close_window
249
250       
251        def log(self,line):
252               
253                log_file="/tmp/zsw"
254                f=open(log_file,"a")
255                f.write( "[ "+datetime.datetime.today().strftime("%d/%m/%y %H:%M:%S") + " ] " + line + "\n")
256                f.close()
257               
258        #def log       
259       
260       
261        def get_lang(self):
262               
263                print("[CORE] Getting system language...")
264                lang=os.environ["LANG"].split("_")[0].split(".")[0]
265                if lang!="en" and lang!="es" and lang!="qcv":
266                        return "en"
267                else:
268                        return lang
269               
270        #def get_lang
271
272       
273        def load_configuration_files(self,conf):
274               
275                print("[CORE] Reading configuration files...")
276                c=ConfigurationManager.ConfigurationManager(conf)
277                return c.servers
278               
279        #def load_configuration_files
280
281       
282        def parse_template_file(self,template_file):
283               
284                print("[CORE] Parsing template file...")
285                self.tm=TemplateManager.TemplateManager()
286                tmp=self.tm.get_info(template_file,self.servers)
287                if tmp!=None:
288                        print("[CORE] Template for server type " + tmp["id"] + " loaded.")
289                        '''
290                        for key in tmp:
291                                if key!="id":
292                                        print("\t"+key+"="+tmp[key])
293                        '''
294                return tmp
295               
296        #def template_file
297
298       
299       
300#class Core
301
302
303def try_root():
304       
305        try:
306               
307                f=open("/etc/n4d/key")
308                f.close()
309               
310                return True
311               
312               
313        except:
314               
315                print("You need root privileges to run Zero-Server-Wizard.")
316               
317                if GUI_READY:
318                       
319                        try:
320                                label = Gtk.Label("You need root privileges to run Zero-Server-Wizard.")
321                                dialog = Gtk.Dialog("Warning", None, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
322                                dialog.vbox.pack_start(label,True,True,10)
323                                label.show()
324                                dialog.set_border_width(6)
325                                response = dialog.run()
326                                dialog.destroy()                               
327                        except Exception as e:
328                                print e
329               
330                return False
331
332
333def usage():
334        print("USAGE:")
335        print("\t/usr/share/zero-server-wizard/core.py -m {cli|gui} -t TEMPLATE_FILE")
336
337if __name__=="__main__":
338       
339       
340        if try_root():
341       
342                mode=None
343                template=None
344               
345                counter=0
346                for item in sys.argv:
347                        if item=="-m" or item=="--mode":
348                                try:
349                                        mode=sys.argv[counter+1]
350                                except Exception as e:
351                                        print e
352                                        usage()
353                                        sys.exit(1)
354                        if item=="-t" or item=="--template":
355                                try:
356                                        template=sys.argv[counter+1]
357                                except Exception as e:
358                                        usage()
359                                        sys.exit(1)
360               
361               
362                        counter+=1
363                       
364               
365                if mode!=None:
366                       
367                        core=Core(mode,template)
368
369                else:
370                        usage()
371
Note: See TracBrowser for help on using the repository browser.