package ISPMan::UserMan; use strict; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $Config); require Exporter; @ISA = qw(Exporter AutoLoader); @EXPORT = qw( newUser addUser editUser updateUser deleteUser getUsers createUser ); $VERSION = '0.01'; use ISPMan::Config; $Config=ISPMan::Config->new(); sub createUser { my $self=shift; my $r=shift; my $dn=$r->param("dn"); my $template=$self->getTemplate("adduser.tmpl"); print $template->fill_in(PACKAGE => "ISPMan"); } sub newUser{ my $self=shift; if ($self->addUser(@_)){ print $self->refreshSignal(); $self->editUser(@_); }; } sub addUser{ my $self=shift; my $r=shift; my $userid=$r->param("uid"); $userid=lc($userid); $userid=~s/[^a-z]//g; $r->param("userid", $userid); # lets crypt the pass my $userpassword=$r->param("userpassword"); if ($userpassword!~ /^\{crypt\}/) { $userpassword='{crypt}' . crypt($userpassword, join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64]); } $r->param("userpassword", $userpassword); my $domain=$r->param("domain"); my $_uid=join '_', ($r->param("uid"), $r->param("domain")); $_uid=~s/\./_/g; $r->param("uid", $_uid); my $dn="uid=$_uid, ou=users, domain=$domain, " . $self->{'Config'}{'ldapBaseDN'}; $r->param("dn", $dn); if ($r->param("maildrophost")) { $self->{'imap'}->add($_uid, $r->param("maildrophost")); } return $self->{'ldap'}->AddUser($r); } sub editUser { my $self=shift; my $r=shift; my $dn=$r->param("dn"); $self->{'user'}=$self->{'ldap'}->getEntryAsHashRef($r->param("dn")); my $template=$self->getTemplate("edituser.tmpl"); print $template->fill_in(PACKAGE => "ISPMan"); } sub deleteUser{ my $self=shift; my $r=shift; my $uid=$r->param("uid"); my $domain=$r->param("domain"); $self->{'user'}=$self->{'ldap'}->getEntryAsHashRef($r->param("dn")); if ($self->{'user'}{"maildrophost"}=~/\S/) { $self->{'imap'}->delete($r->param("uid"),$r->param("maildrophost")) || die $!; } if ( $self->{'ldap'}->DeleteUser($r->param("dn"))){ print $self->refreshSignal(); } } sub updateUser { my $self=shift; my $r=shift; my $dn=$r->param("dn"); my $userpassword=$r->param("userpassword"); if ($userpassword!~ /^\{crypt\}/) { $userpassword='{crypt}' . crypt($userpassword, join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64]); } $r->param("userpassword", $userpassword); $r->param("cn", join ' ', ($r->param("givenname"), $r->param("sn"))); my $mailacceptinggeneralid=[split(/\s+/, $r->param("mailacceptinggeneralid"))]; $r->delete("mailacceptinggeneralid"); $r->param("mailacceptinggeneralid", $mailacceptinggeneralid); my $maildrop=[split(/\s*\n\s*/, $r->param("maildrop"))]; $r->delete("maildrop"); $r->param("maildrop", $maildrop); $self->{'ldap'}->updateEntry($r); } sub getUsers{ my $self=shift; my $dn=shift; my $userhash=$self->{'ldap'}->getEntriesAsHashRef($dn, "objectclass=person", ["cn", "uid"]); my $user; for (keys %$userhash) { ($userhash->{$_}{'cn'})?$user->{$userhash->{$_}{'cn'}}=$_: $user->{$userhash->{$_}{'uid'}}=$_; } return $user; } 1; __END__