96 lines
3.0 KiB
Python
96 lines
3.0 KiB
Python
import urwid, ldap, pwd, os
|
|
from ceo import members, terms, ldapi
|
|
from ceo.urwid.widgets import *
|
|
from ceo.urwid.window import *
|
|
|
|
class IntroPage(WizardPanel):
|
|
def init_widgets(self):
|
|
self.widgets = [
|
|
urwid.Text( "Changing Login Shell" ),
|
|
urwid.Divider(),
|
|
urwid.Text( "You can change your shell here. Request more shells "
|
|
"by emailing systems-committee." )
|
|
]
|
|
def focusable(self):
|
|
return False
|
|
|
|
class YouPage(WizardPanel):
|
|
def init_widgets(self):
|
|
you = pwd.getpwuid(os.getuid()).pw_name
|
|
self.userid = LdapWordEdit(csclub_uri, csclub_base, 'uid',
|
|
"Username: ", you)
|
|
|
|
self.widgets = [
|
|
urwid.Text( "Member Information" ),
|
|
urwid.Divider(),
|
|
self.userid,
|
|
]
|
|
def check(self):
|
|
self.state['userid'] = self.userid.get_edit_text()
|
|
self.state['member'] = None
|
|
if self.state['userid']:
|
|
self.state['member'] = members.get(self.userid.get_edit_text())
|
|
if not self.state['member']:
|
|
set_status("Member not found")
|
|
self.focus_widget(self.userid)
|
|
return True
|
|
|
|
class ShellPage(WizardPanel):
|
|
def init_widgets(self):
|
|
self.midtext = urwid.Text("")
|
|
|
|
self.widgets = [
|
|
urwid.Text("Choose a Shell"),
|
|
urwid.Divider(),
|
|
]
|
|
|
|
def set_shell(radio_button, new_state, shell):
|
|
if new_state:
|
|
self.state['shell'] = shell
|
|
|
|
radio_group = []
|
|
self.shells = members.get_shells()
|
|
self.shellw = [ urwid.RadioButton(radio_group, shell,
|
|
on_state_change=set_shell, user_data=shell)
|
|
for shell in self.shells ]
|
|
|
|
self.widgets.extend(self.shellw)
|
|
def set_shell(self, shell):
|
|
i = self.shells.index(shell)
|
|
self.shellw[i].set_state(True)
|
|
def focusable(self):
|
|
return True
|
|
def activate(self):
|
|
self.set_shell(self.state['member']['loginShell'][0])
|
|
|
|
class EndPage(WizardPanel):
|
|
def init_widgets(self):
|
|
self.headtext = urwid.Text("")
|
|
self.midtext = urwid.Text("")
|
|
|
|
self.widgets = [
|
|
self.headtext,
|
|
urwid.Divider(),
|
|
self.midtext,
|
|
]
|
|
def focusable(self):
|
|
return False
|
|
def activate(self):
|
|
problem = None
|
|
try:
|
|
user, shell = self.state['userid'], self.state['shell']
|
|
members.set_shell(user, shell)
|
|
self.headtext.set_text("Login Shell Changed")
|
|
self.midtext.set_text("The shell for %s has been changed to %s."
|
|
% (user, shell))
|
|
except ldap.LDAPError, e:
|
|
problem = ldapi.format_ldaperror(e)
|
|
except members.MemberException, e:
|
|
problem = str(e)
|
|
if problem:
|
|
self.headtext.set_text("Failed to Change Shell")
|
|
self.midtext.set_text("Perhaps you don't have permission to change %s's shell? "
|
|
"The error was:\n\n%s" % (user, problem))
|
|
def check(self):
|
|
pop_window()
|