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

Last change on this file since 131 was 131, checked in by hectorgh, 5 years ago

adding project files

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