source: export-web-sites/trunk/fuentes/export-web-sites.install/usr/share/export-web-sites/ExportWebSites.py @ 7859

Last change on this file since 7859 was 7859, checked in by daduve, 16 months ago

adding postinstall to server service

File size: 10.2 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*
3
4import gi
5gi.require_version('Gtk', '3.0')
6from gi.repository import Gtk, Pango, GdkPixbuf, Gdk, Gio, GObject,GLib
7
8import signal
9import gettext
10import sys
11import threading
12import copy
13import subprocess
14import os
15import N4dManager
16import xmlrpc.client
17import ssl
18import time
19import Dialog
20#import ExportWebSitesServer
21
22signal.signal(signal.SIGINT, signal.SIG_DFL)
23gettext.textdomain('export-web-sites-gui')
24_ = gettext.gettext
25
26
27
28
29class ExportWebSites:
30       
31
32       
33        #log="/var/log/home_eraser.log"
34       
35        # ********HACKKKKKK
36        #server="server"
37        moodle="moodle"
38        jclic="jclic"
39        pmb="pmb"
40        web_sites=[moodle,jclic,pmb]
41        initial_state=[]
42       
43        DEBUG=True
44       
45        def dprint(self,arg):
46                #self.n4d_man.lprint(self.user_val, "[ExportWebSitesGUI] %s"%arg)
47                if ExportWebSites.DEBUG:
48                        print("[ExportWebSitesGUI] %s"%arg)
49               
50        #def dprint     
51       
52       
53        def __init__(self,args_dic):
54               
55                self.n4d_man=N4dManager.N4dManager()
56                #self.n4d_man.set_server(args_dic[self.server])
57               
58                if args_dic["gui"]:
59                       
60                        self.start_gui()
61                        GObject.threads_init()
62                        Gtk.main()
63               
64        #def __init__(self):
65       
66       
67        def start_gui(self):
68
69                builder=Gtk.Builder()
70                builder.set_translation_domain('export-web-sites')
71                builder.add_from_file("/usr/share/export-web-sites/rsrc/export-web-sites.ui")
72                self.main_window=builder.get_object("main_window")
73                self.main_window.set_icon_from_file('/usr/share/export-web-sites/rsrc/export-web-sites-icon.svg')
74
75                self.main_box=builder.get_object("main_box")
76                self.login_box=builder.get_object("login_box")
77                self.main_content_box=builder.get_object("main_content_box")
78               
79                self.stack=Gtk.Stack()
80                self.stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
81                self.stack.set_transition_duration(500)
82                self.stack.add_titled(self.login_box,"login","login")
83                self.stack.add_titled(self.main_content_box,"main","main")
84               
85                self.stack.show_all()
86               
87                self.main_box.pack_start(self.stack,True,True,5)
88               
89                self.login_button=builder.get_object("login_button")
90                self.entry_user=builder.get_object("entry1")
91                self.entry_password=builder.get_object("entry2")
92                self.entry_server=builder.get_object("entry3")
93                self.login_msg_label=builder.get_object("login_msg_label")
94               
95                #self.separator3 = builder.get_object("separator3")
96                #self.separator4 = builder.get_object("separator4")
97               
98                self.switch_moodle = builder.get_object("checkbutton1")
99                self.switch_jclic = builder.get_object("checkbutton2")
100                self.switch_pmb = builder.get_object("checkbutton3")
101               
102                self.apply_button=builder.get_object("apply_button")
103                self.txt_apply=builder.get_object("txt_apply")
104                self.spinner=builder.get_object("spinner")
105               
106                self.set_css_info()
107               
108                self.connect_signals()
109                self.main_window.show()
110               
111                self.apply_button.set_sensitive(False)
112               
113        #def start_gui
114       
115        def set_css_info(self):
116               
117                self.style_provider=Gtk.CssProvider()
118                f=Gio.File.new_for_path("/usr/share/export-web-sites/ExportWebSites.css")
119                self.style_provider.load_from_file(f)
120                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
121                self.main_window.set_name("WINDOW")
122               
123                self.apply_button.set_name("OPTION_BUTTON")
124                self.login_button.set_name("OPTION_BUTTON")
125                       
126        #def set-css_info
127       
128       
129        def connect_signals(self):
130                       
131                self.main_window.connect("destroy",Gtk.main_quit)
132               
133                self.apply_button.connect("clicked",self.apply_button_clicked)
134               
135                self.login_button.connect("clicked",self.login_clicked)
136                self.entry_password.connect("activate",self.entries_press_event)
137                self.entry_server.connect("activate",self.entries_press_event)
138               
139                self.switch_moodle.connect("notify::active",self.activate_apply_button)
140                self.switch_pmb.connect("notify::active",self.activate_apply_button)
141                self.switch_jclic.connect("notify::active",self.activate_apply_button)
142               
143        #def connect_signals
144
145        # SIGNALS #######################################################       
146       
147        def entries_press_event(self,entry):
148               
149                self.login_clicked(None)
150               
151        #def entries_press_event
152       
153        def activate_apply_button(self,entry,event):
154               
155                self.apply_button.set_sensitive(True)
156                self.txt_apply.set_markup("")
157               
158        #def activate_apply_button
159       
160        def login_clicked(self,button):
161               
162                self.login_button.set_sensitive(False)
163                self.login_msg_label.set_text(_("Validating user..."))
164               
165                user=self.entry_user.get_text()
166                password=self.entry_password.get_text()
167                #user="netadmin"
168                #password="lliurex"
169                self.user_val=(user,password)
170                server=self.entry_server.get_text()
171               
172                self.n4d_man.set_server(server)
173               
174                self.validate_user(user,password)
175                # HACKED DELETE THIS LINE and delete commnet before
176                self.initial_state=self.n4d_man.read_export_sites(self.user_val,self.web_sites)
177                self.dprint(self.initial_state[1])
178                for service in self.web_sites:
179                        self.dprint("Testing if is active service: %s "%service)
180                        self.dprint(self.initial_state[1][service])
181                        state=self.initial_state[1][service]["install"]
182                        exec("self.switch_%s.set_active(state)"%service)
183                self.apply_button.set_sensitive(False)
184               
185                self.stack.set_visible_child_name("main")
186               
187        #def login_clicked
188       
189        def validate_user(self,user,password):
190               
191                t=threading.Thread(target=self.n4d_man.validate_user,args=(user,password,))
192                t.daemon=True
193                t.start()
194                GLib.timeout_add(500,self.validate_user_listener,t)
195               
196        #def validate_user
197       
198        def validate_user_listener(self,thread):
199                       
200                if thread.is_alive():
201                        return True
202                               
203               
204                if not self.n4d_man.user_validated:
205                        self.login_msg_label.set_markup("<span foreground='red'>"+_("Invalid user, please only net admin users.")+"</span>")
206                else:
207                        group_found=False
208                        for g in ["admins"]:
209                                if g in self.n4d_man.user_groups:
210                                        group_found=True
211                                        break
212                                       
213                        if group_found:
214
215                                # ***START LOG
216                                self.dprint("")
217                                self.dprint("** START EXPORT WEB SITES GUI **")
218                                self.dprint("   ---------------------")
219                                self.dprint("")
220                                # ##########
221                               
222                                self.stack.set_visible_child_name("main")
223                               
224                        else:
225                                self.login_msg_label.set_markup("<span foreground='red'>"+_("Invalid user, please only netadmin users.")+"</span>")
226               
227        #validate_user_listener
228
229
230
231       
232        def apply_button_clicked(self,widget=True):
233               
234                try:                   
235                        self.apply_button.set_sensitive(False)
236                        self.switch_moodle.set_sensitive(False)
237                        self.switch_jclic.set_sensitive(False)
238                        self.switch_pmb.set_sensitive(False)
239                               
240                        export={}
241                        export[self.moodle]=False
242                        export[self.jclic]=False
243                        export[self.pmb]=False
244                       
245                        self.dprint("")
246                        self.dprint("RESUME APPLY")
247                        self.dprint("-------------")
248                        export[self.moodle]=self.switch_moodle.get_active()
249                        if export[self.moodle]:
250                                self.dprint("Export Moodle....")
251                        else:
252                                self.dprint("Unexport Moodle....")
253                        export[self.jclic]=self.switch_jclic.get_active()
254                        if export[self.jclic]:
255                                self.dprint("Export jclic")
256                        else:
257                                self.dprint("Unexport Jclic....")
258                        export[self.pmb]=self.switch_pmb.get_active()
259                        if export[self.pmb]:
260                                self.dprint("Export pmb")       
261                        else:
262                                self.dprint("Unexport Pmb....")
263                       
264                        self.dprint("")
265                       
266                        self.apply_export_web_sites_thread(export)
267                       
268                except Exception as e:
269                        self.dprint(e)
270                        print ("[ExportWebSitesGUI] %s"%e)
271                        return [False,str(e)]
272               
273        #def check_changes
274       
275       
276       
277        def apply_export_web_sites_thread(self,export):
278               
279                t=threading.Thread(target=self.apply_export_web_sites,args=(export,))
280                t.daemon=True
281                t.start()
282                self.spinner.start()
283                GLib.timeout_add(500,self.sure_export,t)
284               
285        #apply_delete_methods_thread
286       
287               
288        def sure_export(self,thread):
289               
290                try:
291                        if thread.is_alive():
292                                self.apply_button.set_sensitive(False)
293                                return True
294                       
295                        self.switch_moodle.set_sensitive(True)
296                        self.switch_jclic.set_sensitive(True)
297                        self.switch_pmb.set_sensitive(True)
298                               
299                        self.spinner.stop()
300                        self.txt_apply.set_markup("<span foreground='blue'>"+_("Finished. Log is found in /var/log/export-web-sites.log ")+"</span>")
301                       
302                        #Gtk.main_quit()
303                        #sys.exit(0)
304                       
305                except Exception as e:
306                        self.dprint(e)
307                        print ("[ExportWebSitesGUI] %s"%e)
308                        return [False,str(e)]
309               
310        #def_sure_delete
311               
312       
313       
314        def apply_export_web_sites(self,export):
315               
316                try:
317                        exec_error=False
318                        resume={}
319                        resume[self.moodle]=[]
320                        resume[self.jclic]=[]
321                        resume[self.pmb]=[]
322                        export_service=False
323                        restart_apache=False
324                       
325                        self.dprint("---------------------WORKING---------------------------")
326                       
327                        for service in self.web_sites:
328                                self.dprint("Service: %s "%service)
329                                #self.dprint(self.initial_state[1][service])
330                                state=self.initial_state[1][service]["install"]
331                               
332                                if ( state != export[service] ):
333                                        self.dprint("Operating in server....")
334                                        if export[service]:
335                                                self.dprint("Calling N4D to export %s"%service)
336                                                resume[service]=self.n4d_man.export_web_sites(self.user_val,service)
337                                                export_service=True
338                                                restart_apache=True
339                                        else:
340                                                self.dprint("Calling N4D to remove %s"%service)
341                                                resume[service]=self.n4d_man.un_export_web_sites(self.user_val,service)
342                                                restart_apache=True
343                                        if resume[service][0]:
344                                                self.dprint("Work in server, did it.")
345                                        else:
346                                                self.dprint("Something wrong")
347                                                exec_error=True
348                                else:
349                                        self.dprint("Do nothing")
350                       
351                        if export_service:
352                                if self.n4d_man.export_active(self.user_val)[0]:
353                                        self.dprint("Apache Export Service is avaiable")
354                                else:
355                                        self.dprint("Error with Apache Export Service")
356                                       
357                        if self.n4d_man.sites_configuration(self.user_val)[0]:
358                                self.dprint("Sites-configuration is configured")
359                        else:
360                                self.dprint("Error Sites-configuration")
361                       
362                       
363                        if restart_apache:
364                                apache2_restart=self.n4d_man.apache2_restart(self.user_val)
365                                self.dprint(apache2_restart)
366                                if ( apache2_restart[2] == "" ):
367                                        self.dprint("Apache Service has been restarted")
368                                else:
369                                        self.dprint("Apache Service has a problem please contact with adminsitrator")
370                                        self.dprint("Apache Service Status: %s"%apache2_restart[1])
371                                        self.dprint("Apache Service Error: %s"%apache2_restart[2])
372                       
373                        self.dprint("")
374                        self.dprint("---------------------RESUME---------------------------")
375                       
376                        self.initial_state=self.n4d_man.read_export_sites(self.user_val,self.web_sites)
377                        self.dprint("---------------------FINISHED---------------------------")
378                        self.dprint("")
379                        return[True,resume,exec_error]
380                                       
381                except Exception as e:
382                        self.dprint(e)
383                        print ("[ExportWebSitesGUI] %s"%e)
384                        return [False,str(e)]
385               
386               
387        #def_apply_delete_methods
388
389
390#class LliurexPerfilreset
391
392
393if __name__=="__main__":
394       
395        pass
396       
Note: See TracBrowser for help on using the repository browser.