From: <de...@de...> - 2007-06-28 22:48:21
|
Author: SvenDowideit Date: 2007-06-28 17:48:13 -0500 (Thu, 28 Jun 2007) New Revision: 14306 Added: twiki/branches/MAIN/twikiplugins/HTTPDUserAdminContrib/lib/TWiki/Contrib/HTTPDUserAdminContrib/Config.spec twiki/branches/MAIN/twikiplugins/HTTPDUserAdminContrib/lib/TWiki/Users/HTTPDUserAdminUser.pm Log: Item4317: spec file and password impl Added: twiki/branches/MAIN/twikiplugins/HTTPDUserAdminContrib/lib/TWiki/Contrib/HTTPDUserAdminContrib/Config.spec =================================================================== --- twiki/branches/MAIN/twikiplugins/HTTPDUserAdminContrib/lib/TWiki/Contrib/HTTPDUserAdminContrib/Config.spec (rev 0) +++ twiki/branches/MAIN/twikiplugins/HTTPDUserAdminContrib/lib/TWiki/Contrib/HTTPDUserAdminContrib/Config.spec 2007-06-28 22:48:13 UTC (rev 14306) @@ -0,0 +1,72 @@ +# ---+ Extensions +# ---++ HTTPDUserAdminContrib +#more feature rich password handleing, using HTTPD::UserAdmin - supports Text, DBM and SQL backends + +# **SELECT blue rinse,mullet,beehive** +#DBType - The type of database, one of 'DBM', 'Text', or 'SQL' (Default is 'DBM') +$TWiki::cfg{HTTPDUserAdminContrib}{DBType} = "Text"; + +# **STRING 200** +#DB - The database name (Default is '.htpasswd' for DBM & Text databases) +$TWiki::cfg{HTTPDUserAdminContrib}{DB} = $TWiki::cfg{Htpasswd}{FileName}; + +# **STRING 30** +#Server - HTTP server name (Default is the generic class, that works with NCSA, Apache and possibly others) +#Note: run 'perl t/support.t matrix' to see what support is currently available +$TWiki::cfg{HTTPDUserAdminContrib}{Server} = ""; + +# **SELECT crypt,MD5,none** +#Encrypt - One of 'crypt', 'MD5', or 'none' (no encryption. Defaults to 'crypt' +$TWiki::cfg{HTTPDUserAdminContrib}{Encrypt} = "crypt"; + +# **BOOLEAN** +#Locking - Boolean, Lock Text and DBM files (Default is true) +$TWiki::cfg{HTTPDUserAdminContrib}{Locking} = ""; + +# **PATH** +#Path - Relative DB files are resolved to this value (Default is '.') +$TWiki::cfg{HTTPDUserAdminContrib}{Path} = "."; + +# **BOOLEAN** +#Debug - Boolean, Turn on debug mode +$TWiki::cfg{HTTPDUserAdminContrib}{Debug} = ""; + +# **SELECT rwc,rw,r,w** +#Flags - The read, write and create flags. There are four modes: rwc - the default, open for reading, writing and creating. rw - open for reading and writing. r - open for reading only. w - open for writing only. +$TWiki::cfg{HTTPDUserAdminContrib}{Flags} = "rwc"; + +# ---+++ Specific to DBM files: +# **STRING 30** +#DBMF - The DBM file implementation to use (Default is 'NDBM') +$TWiki::cfg{HTTPDUserAdminContrib}{DBMF} = "NDBM"; +# **STRING 30** +#Mode - The file creation mode, defaults to '0644' +$TWiki::cfg{HTTPDUserAdminContrib}{Mode} = "0644"; + +# ---+++ Specific to DBI +# We talk to an SQL server via Tim Bunce's DBI interface. For more info see: http://www.hermetica.com/technologia/DBI/ +# **STRING 30** +#Host - Server hostname +$TWiki::cfg{HTTPDUserAdminContrib}{Host} = ""; +# **STRING 30** +#Port - Server port +$TWiki::cfg{HTTPDUserAdminContrib}{Port} = ""; +# **STRING 30** +#User - Database login name +$TWiki::cfg{HTTPDUserAdminContrib}{User} = ""; +# **PASSWORD** +#Auth - Database login password +$TWiki::cfg{HTTPDUserAdminContrib}{Auth} = ""; +# **STRING 30** +#Driver - Driver for DBI (Default is 'mSQL') +$TWiki::cfg{HTTPDUserAdminContrib}{Driver} = "mSQL"; +# **STRING 30** +#UserTable - Table with field names below +$TWiki::cfg{HTTPDUserAdminContrib}{UserTable} = ""; +# **STRING 30** +#NameField - Field for the name (Default is 'user') +$TWiki::cfg{HTTPDUserAdminContrib}{NameField} = "user"; +# **STRING 30** +#PasswordField - Field for the password (Default is 'password') +$TWiki::cfg{HTTPDUserAdminContrib}{PasswordField} = "password"; + Property changes on: twiki/branches/MAIN/twikiplugins/HTTPDUserAdminContrib/lib/TWiki/Contrib/HTTPDUserAdminContrib/Config.spec ___________________________________________________________________ Name: svn:executable + * Added: twiki/branches/MAIN/twikiplugins/HTTPDUserAdminContrib/lib/TWiki/Users/HTTPDUserAdminUser.pm =================================================================== --- twiki/branches/MAIN/twikiplugins/HTTPDUserAdminContrib/lib/TWiki/Users/HTTPDUserAdminUser.pm (rev 0) +++ twiki/branches/MAIN/twikiplugins/HTTPDUserAdminContrib/lib/TWiki/Users/HTTPDUserAdminUser.pm 2007-06-28 22:48:13 UTC (rev 14306) @@ -0,0 +1,192 @@ +# Module of TWiki Enterprise Collaboration Platform, http://TWiki.org/ +# +# Copyright (C) 2007 Sve...@ho... +# All Rights Reserved. +# TWiki Contributors are listed in the AUTHORS file in the root of +# this distribution. NOTE: Please extend that file, not this notice. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. For +# more details read LICENSE in the root of this distribution. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# As per the GPL, removal of this notice is prohibited. + +package TWiki::Users::HTTPDUserAdminUser; +use base 'TWiki::Users::Password'; + +use HTTPD::UserAdmin (); +use HTTPD::Authen (); +use Assert; +use strict; +use TWiki::Users::Password; +use Error qw( :try ); + +=pod + +---+ package TWiki::Users::HTTPDUserAdminUser + +Password manager that uses HTTPD::UserAdmin to manage users and passwords. + +Subclass of [[TWikiUsersPasswordDotPm][ =TWiki::Users::Password= ]]. +See documentation of that class for descriptions of the methods of this class. + +Duplicates functionality of +[[TWikiUsersHtPasswdUserDotPm][ =TWiki::Users::HtPasswdUser=]]; +and Adds the possiblilty of using DBM files, and databases to store the user information. + +see http://search.cpan.org/~lds/HTTPD-User-Manage-1.66/lib/HTTPD/UserAdmin.pm + +=cut + +sub new { + my( $class, $session ) = @_; + + my $this = $class->SUPER::new( $session ); + #$this->{apache} = new Apache::Htpasswd + # ( { passwdFile => $TWiki::cfg{Htpasswd}{FileName} } ); + my @configuration = ( + DBType => $TWiki::cfg{HTTPDUserAdminContrib}{DBType} | 'Text', + Host => $TWiki::cfg{HTTPDUserAdminContrib}{Host} | '', + Port => $TWiki::cfg{HTTPDUserAdminContrib}{Port} | '', + DB => $TWiki::cfg{HTTPDUserAdminContrib}{DB} | $TWiki::cfg{Htpasswd}{FileName}, + #uncommenting User seems to crash when using Text DBType :( + #User => $TWiki::cfg{HTTPDUserAdminContrib}{User}, + Auth => $TWiki::cfg{HTTPDUserAdminContrib}{Auth} | '', + Encrypt => $TWiki::cfg{HTTPDUserAdminContrib}{Encrypt} | 'crypt', + Locking => $TWiki::cfg{HTTPDUserAdminContrib}{Locking} | '', + Path => $TWiki::cfg{HTTPDUserAdminContrib}{Path} | '', + Debug => $TWiki::cfg{HTTPDUserAdminContrib}{Debug}, + Flags => $TWiki::cfg{HTTPDUserAdminContrib}{Flags} | '', + Driver => $TWiki::cfg{HTTPDUserAdminContrib}{Driver} | '', + Server => $TWiki::cfg{HTTPDUserAdminContrib}{Server}, #undef == go detect + UserTable => $TWiki::cfg{HTTPDUserAdminContrib}{UserTable} | '', + NameField => $TWiki::cfg{HTTPDUserAdminContrib}{NameField} | '', + PasswordField => $TWiki::cfg{HTTPDUserAdminContrib}{PasswordField} | '', + ); + + $this->{userDatabase} = new HTTPD::UserAdmin(@configuration); + + print STDERR "new HTTPDAuth".join(', ', $this->{userDatabase}->list())."\n"; + + return $this; +} + +=begin twiki + +---++ ObjectMethod finish() +Break circular references. + +=cut + +# Note to developers; please undef *all* fields in the object explicitly, +# whether they are references or not. That way this method is "golden +# documentation" of the live fields in the object. +sub finish { + my $this = shift; + $this->SUPER::finish(); + undef $this->{userDatabase}; +} + +sub fetchUsers { + my $this = shift; + my @users = $this->{userDatabase}->list(); + return new ListIterator(\@users); +} + +sub fetchPass { + my( $this, $login ) = @_; + ASSERT( $login ) if DEBUG; + my $r = $this->{userDatabase}->password( $login ); + $this->{error} = undef; + return $r; +} + +sub checkPassword { + my ( $this, $login, $password ) = @_; + + #TODO: this should be extracted to a new LoginManager i think + my $authen = new HTTPD::Authen ($this->{userDatabase}); + return $authen->check($login, $password); +} + +sub removeUser { + my( $this, $login ) = @_; + ASSERT( $login ) if DEBUG; + + $this->{error} = undef; + my $r; + try { + $r = $this->{userDatabase}->delete( $login ); + #$this->{error} = $this->{apache}->error() unless (defined($r)); + } catch Error::Simple with { + $this->{error} = 'problem deleting user'; + }; + return $r; +} + +sub setPassword { + my( $this, $login, $newPassU, $oldPassU ) = @_; + ASSERT( $login ) if DEBUG; + + if( defined($oldPassU)) { + my $ok = 0; + try { + $ok = $this->checkPassword( $login, $oldPassU ); + } catch Error::Simple with { + }; + unless( $ok ) { + $this->{error} = "Wrong password"; + return 0; + } + } + + my $added = 0; + try { + $added = $this->{userDatabase}->add( $login, $newPassU ); + $this->{error} = undef; + } catch Error::Simple with { + $this->{error} = 'problem changing password'; + }; + + return $added; +} + +sub error { + my $this = shift; + return $this->{error} || undef; +} + +sub isManagingEmails { + return 0;#until i figure out the bug... +} + +# emails are stored in extra info field as a ; separated list +sub getEmails { + my( $this, $login) = @_; + my %settings = $this->{userDatabase}->fetch($login, ('emails', '')); + + use Data::Dumper; + + + + #print STDERR "\nsettings . ".%settings." ..".Dumper(%settings, keys(%settings)); + my @r = split(/;/, $settings{emails}); + $this->{error} = undef; + return @r; +} + +sub setEmails { + my $this = shift; + my $login = shift; + my $r = $this->{userDatabase}->update($login, undef, join(';', @_) ); + $this->{error} = undef; + return $r; +} + +1; Property changes on: twiki/branches/MAIN/twikiplugins/HTTPDUserAdminContrib/lib/TWiki/Users/HTTPDUserAdminUser.pm ___________________________________________________________________ Name: svn:executable + * |