#
# auth_gui.py: gui authentication configuration dialog
#
# Copyright 2001 Red Hat, Inc.
#
# This software may be freely redistributed under the terms of the GNU
# library public license.
#
# You should have received a copy of the GNU Library Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#

from gtk import *
from iw_gui import *
from translate import _, N_

class AuthWindow (InstallWindow):

    htmlTag = "authconf"
    windowTitle = N_("Authentication Configuration")

    def setSensitivities (self, *args):
	if (not self.nis.get_active()):
	    self.nisDomain.set_sensitive (FALSE)
	    self.nisBroadcast.set_sensitive (FALSE)
	    self.nisServer.set_sensitive (FALSE)
	    self.nisDomainLabel.set_sensitive (FALSE)
	    self.nisServerLabel.set_sensitive (FALSE)
	else:
	    self.nisDomain.set_sensitive (TRUE)
	    self.nisDomainLabel.set_sensitive (TRUE)
	    self.nisBroadcast.set_sensitive (TRUE)

	    if (self.nisBroadcast.get_active()):
		self.nisServerLabel.set_sensitive (FALSE)
		self.nisServer.set_sensitive (FALSE)
	    else:
		self.nisServerLabel.set_sensitive (TRUE)
		self.nisServer.set_sensitive (TRUE)

        ldapactive = self.ldap.get_active()
        self.ldapServerLabel.set_sensitive (ldapactive)
        self.ldapServer.set_sensitive (ldapactive)
        self.ldapBasednLabel.set_sensitive (ldapactive)
        self.ldapBasedn.set_sensitive (ldapactive)
        self.ldapTLS.set_sensitive (ldapactive)

        krb5active = self.krb5.get_active()
        self.krb5RealmLabel.set_sensitive (krb5active)
        self.krb5Realm.set_sensitive (krb5active)
        self.krb5KdcLabel.set_sensitive (krb5active)
        self.krb5Kdc.set_sensitive (krb5active)
        self.krb5AdminLabel.set_sensitive (krb5active)
        self.krb5Admin.set_sensitive (krb5active)

        sambaactive = self.samba.get_active()
        self.sambaLabel1.set_sensitive(sambaactive)
        self.sambaLabel2.set_sensitive(sambaactive)
        self.sambaServer.set_sensitive(sambaactive)
        self.sambaWorkgroup.set_sensitive(sambaactive)

    def getNext(self):
	if not self.__dict__.has_key("md5"):
	    return None

        self.auth.useMD5 = self.md5.get_active ()
        self.auth.useShadow = self.shadow.get_active ()

        self.auth.useNIS = self.nis.get_active ()
        self.auth.nisuseBroadcast = self.nisBroadcast.get_active ()
        self.auth.nisDomain = self.nisDomain.get_text ()
        self.auth.nisServer = self.nisServer.get_text ()

        self.auth.useLdap = self.ldap.get_active ()
        self.auth.useLdapauth = self.ldap.get_active ()
        self.auth.ldapServer = self.ldapServer.get_text ()
        self.auth.ldapBasedn = self.ldapBasedn.get_text ()
        self.auth.ldapTLS = self.ldapTLS.get_active ()

        self.auth.useKrb5 = self.krb5.get_active ()
        self.auth.krb5Realm = self.krb5Realm.get_text ()
        self.auth.krb5Kdc = self.krb5Kdc.get_text ()
        self.auth.krb5Admin = self.krb5Admin.get_text ()

        self.auth.useSamba = self.samba.get_active ()
        self.auth.sambaServer = self.sambaServer.get_text()
        self.auth.sambaWorkgroup = self.sambaWorkgroup.get_text()

    def getScreen (self, auth):
	self.auth = auth

        box = GtkVBox (FALSE, 10)

        nb = GtkNotebook ()

        self.md5 = GtkCheckButton (_("Enable MD5 passwords"))
        self.shadow = GtkCheckButton (_("Enable shadow passwords"))

        # nis
        self.nis = GtkCheckButton (_("Enable NIS"))
        self.nisBroadcast = GtkCheckButton (_("Use broadcast to find NIS server"))
        self.nisDomain = GtkEntry ()
        self.nisServer = GtkEntry ()

        self.md5.set_active (self.auth.useMD5)
        self.shadow.set_active (self.auth.useShadow)

        self.nis.set_active (self.auth.useNIS)
        self.nisDomain.set_text (self.auth.nisDomain)
        self.nisBroadcast.set_active (self.auth.nisuseBroadcast)
        self.nisServer.set_text (self.auth.nisServer )

        self.nisDomainLabel = GtkLabel (_("NIS Domain: "))
        self.nisDomainLabel.set_alignment (0, 0)
        self.nisServerLabel = GtkLabel (_("NIS Server: "))
        self.nisServerLabel.set_alignment (0, 0)

        self.nis.connect ("toggled", self.setSensitivities)
        self.nisBroadcast.connect ("toggled", self.setSensitivities)

        a = GtkAlignment (0, 0)
        a.add (self.nisBroadcast)

        nistable = GtkTable (10, 4, FALSE)
        nistable.attach (self.nis, 0, 10, 0, 1, FILL, SHRINK, 0.0, 0.5)

	spacer = GtkLabel("")
	spacer.set_usize(10, 1)
        nistable.attach (spacer, 0, 1, 1, 2, SHRINK, SHRINK, 0.0, 0.5)
        
        nistable.attach (self.nisDomainLabel, 2, 3, 1, 2, FILL, SHRINK, 0.0, 0.5)
        nistable.attach (self.nisDomain, 3, 15, 1, 2, SHRINK, SHRINK, 0.0, 0.5)
        nistable.attach (a, 2, 10, 2, 3, SHRINK, SHRINK, 0.0, 0.5)
        nistable.attach (self.nisServerLabel, 2, 5, 3, 4, FILL, SHRINK, 0.0, 0.5)
        nistable.attach (self.nisServer, 3, 10, 3, 4, SHRINK, SHRINK, 0.0, 0.5)

        # ldap
        self.ldap = GtkCheckButton (_("Enable LDAP"))
        self.ldapServer = GtkEntry ()
        self.ldapBasedn = GtkEntry ()
        self.ldapTLS = GtkCheckButton (_("Use TLS lookups"))
        self.ldapServerLabel = GtkLabel (_("LDAP Server:"))
        self.ldapServerLabel.set_alignment (0, 0)
        self.ldapBasednLabel = GtkLabel (_("LDAP Base DN:"))
        self.ldapBasednLabel.set_alignment (0, 0)

	# restore ldap settings
        self.ldap.set_active (self.auth.useLdap)
	self.ldapServer.set_text (self.auth.ldapServer)
        self.ldapBasedn.set_text (self.auth.ldapBasedn)
         
        ldaptable = GtkTable (10, 4, FALSE)

        ldaptable.attach (self.ldap, 0, 10, 0, 1, FILL, SHRINK, 0.0, 0.5)

	spacer = GtkLabel("")
	spacer.set_usize(10, 1)
        ldaptable.attach (spacer, 0, 1, 1, 2, SHRINK, SHRINK, 0.0, 0.5)
        ldaptable.attach (self.ldapServerLabel, 2, 3, 1, 2, FILL, SHRINK, 0.0, 0.5)
        ldaptable.attach (self.ldapServer, 3, 10, 1, 2, SHRINK, SHRINK, 0.0, 0.5)

        ldaptable.attach (self.ldapBasednLabel, 2, 3, 2, 3, FILL, SHRINK, 0.0, 0.5)
        ldaptable.attach (self.ldapBasedn, 3, 10, 2, 3, SHRINK, SHRINK, 0.0, 0.5)
        a = GtkAlignment (0, 0)
        a.add (self.ldapTLS)
        ldaptable.attach (a, 2, 3, 3, 4, SHRINK, SHRINK, 0.0, 0.5) 
        
        self.ldap.connect ("toggled", self.setSensitivities)

        # krb5
        self.krb5 = GtkCheckButton (_("Enable Kerberos"))
        self.krb5Realm = GtkEntry ()
        self.krb5Kdc = GtkEntry ()
        self.krb5Admin = GtkEntry ()
        self.krb5RealmLabel = GtkLabel (_("Realm:"))
        self.krb5RealmLabel.set_alignment (0, 0)
        self.krb5KdcLabel = GtkLabel (_("KDC:"))
        self.krb5KdcLabel.set_alignment (0, 0)
        self.krb5AdminLabel = GtkLabel (_("Admin Server:"))
        self.krb5AdminLabel.set_alignment (0, 0)

        # restore krb5 settings
        self.krb5.set_active (self.auth.useKrb5)
        self.krb5Realm.set_text (self.auth.krb5Realm)
        self.krb5Kdc.set_text (self.auth.krb5Kdc)
        self.krb5Admin.set_text (self.auth.krb5Admin)
        
        krb5table = GtkTable (10, 4, FALSE)

        krb5table.attach (self.krb5, 0, 10, 0, 1, FILL, SHRINK, 0.0, 0.5)

	spacer = GtkLabel("")
	spacer.set_usize(10, 1)
        krb5table.attach (spacer, 0, 1, 1, 2, SHRINK, SHRINK, 0.0, 0.5)
        krb5table.attach (self.krb5RealmLabel, 2, 3, 1, 2, FILL, SHRINK, 0.0, 0.5)
        krb5table.attach (self.krb5Realm, 3, 10, 1, 2, SHRINK, SHRINK, 0.0, 0.5)

        krb5table.attach (self.krb5KdcLabel, 2, 3, 2, 3, FILL, SHRINK, 0.0, 0.5)
        krb5table.attach (self.krb5Kdc, 3, 10, 2, 3, SHRINK, SHRINK, 0.0, 0.5)

        krb5table.attach (self.krb5AdminLabel, 2, 3, 3, 4, FILL, SHRINK, 0.0, 0.5)
        krb5table.attach (self.krb5Admin, 3, 10, 3, 4, SHRINK, SHRINK, 0.0, 0.5)

        self.krb5.connect ("toggled", self.setSensitivities)

        # samba
        self.samba = GtkCheckButton (_("Enable SMB Authentication"))
        self.sambaServer = GtkEntry ()
        self.sambaWorkgroup = GtkEntry ()
        self.sambaLabel1 = GtkLabel (_("SMB Server:"))
        self.sambaLabel1.set_alignment (0, 0)
        self.sambaLabel2 = GtkLabel (_("SMB Workgroup:"))
        self.sambaLabel2.set_alignment (0, 0)

 	# restore ldap settings
        self.samba.set_active (self.auth.useSamba)
 	self.sambaServer.set_text (self.auth.sambaServer)
        self.sambaWorkgroup.set_text (self.auth.sambaWorkgroup)
         
        sambatable = GtkTable (10, 3, FALSE)

        sambatable.attach (self.samba, 0, 10, 0, 1, FILL, SHRINK, 0.0, 0.5)

        spacer = GtkLabel("")
        spacer.set_usize(10, 1)
        sambatable.attach (spacer, 0, 1, 1, 2, SHRINK, SHRINK, 0.0, 0.5)
        sambatable.attach (self.sambaLabel1, 2, 3, 1, 2, FILL, SHRINK, 0.0, 0.5)
        sambatable.attach (self.sambaServer, 3, 10, 1, 2, SHRINK, SHRINK, 0.0, 0.5)

        sambatable.attach (self.sambaLabel2, 2, 3, 2, 3, FILL, SHRINK, 0.0, 0.5)
        sambatable.attach (self.sambaWorkgroup, 3, 10, 2, 3, SHRINK, SHRINK, 0.0, 0.5)
        
        self.samba.connect ("toggled", self.setSensitivities)

# pack everything

	self.setSensitivities()

        nisLabel = GtkLabel (_("NIS"))
        ldapLabel = GtkLabel (_("LDAP"))
        krb5Label = GtkLabel (_("Kerberos 5"))
        sambaLabel = GtkLabel (_("SMB"))

        nb.append_page(nistable, nisLabel)
        nb.append_page(ldaptable, ldapLabel)
        nb.append_page(krb5table, krb5Label)
        nb.append_page(sambatable, sambaLabel)


        box.pack_start (self.md5, FALSE)
        box.pack_start (self.shadow, FALSE)
        box.pack_start (nb, TRUE)
        
	box.set_border_width (5)
        
        return box

