source: lliurex-cdlocker/trunk/fuentes/lliurex-cdlocker.install/usr/share/lliurex-cdlocker/LliurexCDLocker.py @ 6008

Last change on this file since 6008 was 6008, checked in by hectorgh, 2 years ago

removed user test

File size: 4.5 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,GObject, GLib
7
8import signal
9import gettext
10import sys
11import threading
12import copy
13import os
14
15import N4dManager
16
17signal.signal(signal.SIGINT, signal.SIG_DFL)
18gettext.textdomain('lliurex-shutdowner')
19_ = gettext.gettext
20
21
22class LliurexCDLocker:
23       
24        def __init__(self,args_dic):
25               
26                self.n4d_man=N4dManager.N4dManager()
27                self.n4d_man.set_server(args_dic["server"])
28                #self.n4d_man.set_server(args_dic["172.20.9.246"])
29               
30                if args_dic["gui"]:
31                       
32                        self.start_gui()
33                        GObject.threads_init()
34                        Gtk.main()
35               
36        #def __init__(self):
37       
38       
39        def start_gui(self):
40
41                builder=Gtk.Builder()
42                builder.set_translation_domain('lliurex-cdlocker')
43                if os.path.exists("/srv/svn/xenial/lliurex-cdlocker/trunk/fuentes/lliurex-cdlocker.install/usr/share/lliurex-cdlocker/rsrc/lliurex-cdlocker.ui"):
44                        builder.add_from_file("/srv/svn/xenial/lliurex-cdlocker/trunk/fuentes/lliurex-cdlocker.install/usr/share/lliurex-cdlocker/rsrc/lliurex-cdlocker.ui")
45                else:
46                        builder.add_from_file("/usr/share/lliurex-cdlocker/rsrc/lliurex-cdlocker.ui")
47                       
48                self.main_window=builder.get_object("main_window")
49               
50                self.main_box=builder.get_object("main_box")
51                self.login_box=builder.get_object("login_box")
52                self.cdlocker_box=builder.get_object("cdlocker_box")
53
54                self.stack=Gtk.Stack()
55                self.stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
56                self.stack.set_transition_duration(200)
57                self.stack.add_titled(self.login_box,"login","Login")
58                self.stack.add_titled(self.cdlocker_box,"cdlocker","CD Locker")
59                self.stack.show_all()
60               
61                self.main_box.pack_start(self.stack,True,True,0)
62               
63                self.close_button=builder.get_object("close_button")
64                self.login_button=builder.get_object("login_button")
65                self.shutdown_button=builder.get_object("shutdown_button")
66               
67                self.user_entry=builder.get_object("user_entry")
68                self.password_entry=builder.get_object("password_entry")
69                self.server_ip_entry=builder.get_object("server_ip_entry")
70                self.login_msg_label=builder.get_object("login_msg_label")
71               
72                self.lock_switch=builder.get_object("lock_switch")
73               
74                               
75                self.login_button.grab_focus()
76               
77                self.connect_signals()
78                self.main_window.show()
79               
80        #def start_gui
81       
82       
83        def connect_signals(self):
84               
85                self.main_window.connect("destroy",Gtk.main_quit)
86                self.close_button.connect("clicked",Gtk.main_quit)
87                self.login_button.connect("clicked",self.login_clicked)
88                self.user_entry.connect("activate",self.entries_press_event)
89                self.password_entry.connect("activate",self.entries_press_event)
90                self.server_ip_entry.connect("activate",self.entries_press_event)
91               
92        #def connect_signals
93       
94       
95        # SIGNALS ########################################################
96       
97        def entries_press_event(self,widget):
98               
99                self.login_clicked(None)
100               
101        #def entries_press_event
102       
103       
104        def login_clicked(self,widget):
105               
106                user=self.user_entry.get_text()
107                password=self.password_entry.get_text()
108                server=self.server_ip_entry.get_text()
109       
110                '''     
111                # HACK
112               
113                user="lliurex"
114                password="lliurex"
115                server="172.20.9.246"
116                '''
117
118                if server!="":
119                        self.n4d_man.set_server(server)
120               
121               
122                self.login_msg_label.set_text(_("Validating user..."))
123               
124                self.login_button.set_sensitive(False)
125                self.validate_user(user,password)
126               
127               
128        #def login_clicked
129       
130        def lock_switch_changed(self,widget,data):
131               
132                self.n4d_man.set_lock_status(self.lock_switch.get_state())
133               
134        #def lock_switch_changed
135       
136        # ##################### ##########################################
137       
138        def validate_user(self,user,password):
139               
140               
141                t=threading.Thread(target=self.n4d_man.validate_user,args=(user,password,))
142                t.daemon=True
143                t.start()
144                GLib.timeout_add(500,self.validate_user_listener,t)
145               
146        #def validate_user
147       
148       
149        def validate_user_listener(self,thread):
150                       
151                if thread.is_alive():
152                        return True
153                               
154                self.login_button.set_sensitive(True)
155                if not self.n4d_man.user_validated:
156                        self.login_msg_label.set_markup("<span foreground='red'>"+_("Invalid user")+"</span>")
157                else:
158                        group_found=False
159                        for g in ["adm","admins","teachers"]:
160                                if g in self.n4d_man.user_groups:
161                                        group_found=True
162                                        break
163                                       
164                        if group_found:
165                                self.login_msg_label.set_text("")
166                                self.lock_switch.set_state(self.n4d_man.status)
167                                self.lock_switch.connect("notify::active",self.lock_switch_changed)
168                               
169                                self.stack.set_visible_child_name("cdlocker")
170                               
171                        else:
172                                self.login_msg_label.set_markup("<span foreground='red'>"+_("Invalid user")+"</span>")
173                               
174                return False
175                       
176        #def validate_user_listener
177       
178               
179#class LliurexShutdowner
180
181
182if __name__=="__main__":
183       
184        pass
185       
Note: See TracBrowser for help on using the repository browser.