2 from csc.apps.urwid.widgets import *
3 from csc.apps.urwid.window import *
5 from csc.adm import accounts, members
6 from csc.common.excep import InvalidArgument
8 class IntroPage(WizardPanel):
9 def init_widgets(self):
11 urwid.Text( "Joining the Computer Science Club" ),
13 urwid.Text( "CSC membership is $2.00 for one term. Please ensure "
14 "the fee is deposited into the safe before continuing." ),
19 class InfoPage(WizardPanel):
20 def init_widgets(self):
21 self.userid = WordEdit("UWdir ID: ")
22 self.name = SingleEdit("Full name: ")
23 self.program = SingleEdit("Program of Study: ")
25 urwid.Text( "Member Information - Please Check ID" ),
32 self.state['userid'] = self.userid.get_edit_text()
33 self.state['name'] = self.name.get_edit_text()
34 self.state['program'] = self.program.get_edit_text()
36 if len( self.state['userid'] ) < 4:
37 self.focus_widget( self.userid )
38 set_status("Username is too short")
40 elif len( self.state['name'] ) < 4:
41 self.focus_widget( self.name )
42 set_status("Name is too short")
46 class SignPage(WizardPanel):
47 def init_widgets(self):
49 urwid.Text( "Machine Usage Policy" ),
51 urwid.Text( "Ensure the new member has signed the "
52 "Machine Usage Policy. Accounts of users who have not "
53 "signed will be suspended if discovered." ),
58 class PassPage(WizardPanel):
59 def init_widgets(self):
60 self.password = PassEdit("Password: ")
61 self.pwcheck = PassEdit("Re-enter: ")
63 urwid.Text( "Member Password" ),
68 def focus_widget(self, widget):
69 self.box.set_focus( self.widgets.index( widget ) )
70 def clear_password(self):
71 self.focus_widget( self.password )
72 self.password.set_edit_text("")
73 self.pwcheck.set_edit_text("")
75 self.state['password'] = self.password.get_edit_text()
76 pwcheck = self.pwcheck.get_edit_text()
78 if self.state['password'] != pwcheck:
80 set_status("Passwords do not match")
82 elif len(self.state['password']) < 5:
84 set_status("Password is too short")
88 class EndPage(WizardPanel):
89 def init_widgets(self):
90 self.headtext = urwid.Text("")
91 self.midtext = urwid.Text("")
103 if not members.connected(): members.connect()
104 members.new( self.state['userid'], self.state['name'], self.state['program'] )
106 except members.InvalidRealName:
107 problem = "Invalid real name"
108 except InvalidArgument, e:
109 if e.argname == 'uid' and e.explanation == 'duplicate uid':
110 problem = 'Duplicate userid'
115 if not accounts.connected(): accounts.connect()
116 accounts.create_member( self.state['userid'], self.state['password'], self.state['name'] )
117 except accounts.NameConflict, e:
119 except accounts.NoAvailableIDs, e:
121 except accounts.InvalidArgument, e:
123 except accounts.LDAPException, e:
125 except accounts.KrbException, e:
128 self.headtext.set_text("Failed to add member")
129 self.midtext.set_text("The error was: '%s'" % problem)
131 self.headtext.set_text("Member Added")
132 self.midtext.set_text("Congratulations, %s has been added "
133 "successfully. Please run 'addhomedir %s'."
134 % (self.state['userid'], self.state['userid']))