[Jifty-commit] r2169 - in jifty/trunk/plugins: AuthLDAPLogin AuthLDAPLogin/doc AuthLDAPLogin/lib AuthLDAPLogin/lib/Jifty AuthLDAPLogin/lib/Jifty/Plugin AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Action AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Model AuthLDAPLogin/share AuthLDAPLogin/share/po AuthLDAPLogin/share/web AuthLDAPLogin/share/web/static AuthLDAPLogin/share/web/templates AuthLDAPLogin/t AuthLDAPOnly AuthLDAPOnly/doc AuthLDAPOnly/lib AuthLDAPOnly/lib/Jifty AuthLDAPOnly/lib/Jifty/Plugin AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Action AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Model AuthLDAPOnly/share AuthLDAPOnly/share/po AuthLDAPOnly/share/web AuthLDAPOnly/share/web/static AuthLDAPOnly/t

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Thu Nov 16 12:26:17 EST 2006


Author: yves
Date: Thu Nov 16 12:26:16 2006
New Revision: 2169

Added:
   jifty/trunk/plugins/AuthLDAPLogin/
   jifty/trunk/plugins/AuthLDAPLogin/MANIFEST
   jifty/trunk/plugins/AuthLDAPLogin/Makefile.PL
   jifty/trunk/plugins/AuthLDAPLogin/doc/
   jifty/trunk/plugins/AuthLDAPLogin/lib/
   jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/
   jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/
   jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/
   jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin.pm
   jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Action/
   jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Action/LDAPLogin.pm
   jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Action/LDAPLogout.pm
   jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Dispatcher.pm
   jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Model/
   jifty/trunk/plugins/AuthLDAPLogin/share/
   jifty/trunk/plugins/AuthLDAPLogin/share/po/
   jifty/trunk/plugins/AuthLDAPLogin/share/web/
   jifty/trunk/plugins/AuthLDAPLogin/share/web/static/
   jifty/trunk/plugins/AuthLDAPLogin/share/web/templates/
   jifty/trunk/plugins/AuthLDAPLogin/share/web/templates/ldaplogin
   jifty/trunk/plugins/AuthLDAPLogin/share/web/templates/ldaplogout
   jifty/trunk/plugins/AuthLDAPLogin/t/
   jifty/trunk/plugins/AuthLDAPOnly/
   jifty/trunk/plugins/AuthLDAPOnly/MANIFEST
   jifty/trunk/plugins/AuthLDAPOnly/Makefile.PL
   jifty/trunk/plugins/AuthLDAPOnly/doc/
   jifty/trunk/plugins/AuthLDAPOnly/lib/
   jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/
   jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/
   jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/
   jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly.pm
   jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Action/
   jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Action/LDAPLogin.pm
   jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Action/LDAPLogout.pm
   jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/CurrentUser.pm
   jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Dispatcher.pm
   jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Model/
   jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Model/LDAPUser.pm
   jifty/trunk/plugins/AuthLDAPOnly/share/
   jifty/trunk/plugins/AuthLDAPOnly/share/po/
   jifty/trunk/plugins/AuthLDAPOnly/share/web/
   jifty/trunk/plugins/AuthLDAPOnly/share/web/static/
   jifty/trunk/plugins/AuthLDAPOnly/share/web/templates/
   jifty/trunk/plugins/AuthLDAPOnly/share/web/templates/ldaplogin
   jifty/trunk/plugins/AuthLDAPOnly/share/web/templates/ldaplogout
   jifty/trunk/plugins/AuthLDAPOnly/t/

Log:
First release for plugins AuthLDAPOnly and AuthLDAPLogin, all comments are welcome


Added: jifty/trunk/plugins/AuthLDAPLogin/MANIFEST
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPLogin/MANIFEST	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,18 @@
+inc/Module/Install.pm
+inc/Module/Install/Base.pm
+inc/Module/Install/Can.pm
+inc/Module/Install/Fetch.pm
+inc/Module/Install/Makefile.pm
+inc/Module/Install/Metadata.pm
+inc/Module/Install/Share.pm
+inc/Module/Install/Win32.pm
+inc/Module/Install/WriteAll.pm
+lib/Jifty/Plugin/AuthLDAPLogin.pm
+lib/Jifty/Plugin/AuthLDAPLogin/Action/LDAPLogin.pm
+lib/Jifty/Plugin/AuthLDAPLogin/Action/LDAPLogout.pm
+lib/Jifty/Plugin/AuthLDAPLogin/Dispatcher.pm
+Makefile.PL
+MANIFEST
+META.yml
+share/web/templates/ldaplogin
+share/web/templates/ldaplogout

Added: jifty/trunk/plugins/AuthLDAPLogin/Makefile.PL
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPLogin/Makefile.PL	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,10 @@
+use inc::Module::Install;
+name('Jifty-Plugin-AuthLDAPLogin');
+license('Perl');
+version('0.01');
+requires('Jifty' => '0.60912');
+requires('Net::LDAP');
+
+install_share;
+
+WriteAll;

Added: jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin.pm	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,82 @@
+use strict;
+use warnings;
+
+=head1 NAME
+
+ Jifty::Plugin::AuthLDAPLogin
+
+=head1 DESCRIPTION
+
+ MUST BE USED WITH LOGIN PLUGIN
+
+=head1 CONFIG
+
+ in etc/config.yml
+
+  Plugins: 
+    - Login: {}
+    - AuthLDAPLogin: 
+       LDAPserver: ldap.univ.fr
+       LDAPbase: ou=people,dc=.....
+       LDAPuid: uid
+       LDAPemail: mailLocalAddress
+
+
+=cut
+
+package Jifty::Plugin::AuthLDAPLogin;
+use base qw/Jifty::Plugin/;
+use Net::LDAP;
+
+# Your plugin goes here.  If takes any configuration or arguments, you
+# probably want to override L<Jifty::Plugin/init>.
+
+{
+    my ($CurrentLDAPUserClass, $AuthLDAPUserClass, $LDAP, %params);
+
+    sub init {
+        my $self = shift;
+        my %args = @_;
+        my $appname = Jifty->config->framework('ApplicationName');
+        $CurrentLDAPUserClass = $args{CurrentUserClass}
+            || "${appname}::CurrentUser";
+        $AuthLDAPUserClass = $args{AuthLDAPUserClass}
+            || "${appname}::Model::LDAPUser";
+
+	my ($conf);
+    	foreach (@{Jifty->config->framework('Plugins')}) {
+        	$conf = $_ if (defined $_->{'AuthLDAPLogin'});
+    	}
+    	$params{'Hostname'} = $conf->{'AuthLDAPLogin'}->{'LDAPserver'};
+    	$params{'base'} = $conf->{'AuthLDAPLogin'}->{'LDAPbase'};
+    	$params{'uid'} = $conf->{'AuthLDAPLogin'}->{'LDAPuid'};
+    	$params{'email'} = $conf->{'AuthLDAPLogin'}->{'LDAPemail'};
+    	$LDAP = Net::LDAP->new($params{Hostname},async=>1,onerror => 'undef',timeout => 3600, debug => 0);
+    }
+
+    sub CurrentLDAPUserClass {
+        return $CurrentLDAPUserClass;
+    }
+
+    sub AuthLDAPUserClass {
+        return $AuthLDAPUserClass;
+    }
+
+    sub LDAP {
+	    return $LDAP;
+    }
+
+    sub base {
+        return $params{'base'};
+    }
+
+    sub uid {
+        return $params{'uid'};
+    }
+
+    sub email {
+        return $params{'email'};
+    }
+}
+
+1;

Added: jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Action/LDAPLogin.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Action/LDAPLogin.pm	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,108 @@
+use warnings;
+use strict;
+
+=head1 NAME
+
+Jifty::Plugin::AuthLDAPLogin::Action::LDAPLogin
+
+=cut
+
+package Jifty::Plugin::AuthLDAPLogin::Action::LDAPLogin;
+use base qw/Jifty::Action Jifty::Plugin::Login Jifty::Plugin::AuthLDAPLogin/;
+
+
+=head2 arguments
+
+Return the ticket form field
+
+=cut
+
+sub arguments {
+    return (
+        {
+            name => {
+                label          => _('Login'),
+                mandatory      => 1,
+                ajax_validates => 1,
+            },
+
+            password => {
+                type      => 'password',
+                label     => _('Password'),
+                mandatory => 1
+            },
+
+        }
+    );
+
+}
+
+=head2 validate_ticket ST
+
+for ajax_validates
+Makes sure that the ticket submitted is legal.
+
+
+=cut
+
+sub validate_name {
+    my $self  = shift;
+    my $name = shift;
+
+    unless ( $name =~ /^[A-Za-z0-9-]+$/ ) {
+        return $self->validation_error(
+            name => _("That doesn't look like a valid login.") );
+    }
+
+
+    return $self->validation_ok('name');
+}
+
+
+=head2 take_action
+
+Actually check the user's password. If it's right, log them in.
+Otherwise, throw an error.
+
+
+=cut
+
+sub take_action {
+    my $self = shift;
+    my $username = $self->argument_value('name');
+    my $dn = $self->uid().'='.$username.','.
+        $self->base();
+
+    my $msg = $self->LDAP()->bind($dn ,'password' =>$self->argument_value('password'));
+    
+    unless (not $msg->code) {
+        $self->result->error(
+     _('You may have mistyped your login or password. Give it another shot?')
+        );
+        return;
+    }
+
+#    if ($error) {
+#      Jifty->log->info("CAS error: $ticket $username : $error");
+#      return;
+#    }
+      
+    my $LDAPUser = $self->LoginUserClass();
+    my $CurrentUser = $self->CurrentUserClass();
+    my $u = $LDAPUser->new( current_user => $CurrentUser->superuser );
+
+    $u->load_by_cols( email => $username.'@LDAP.user');
+    my $id = $u->id;
+    if (!$id) {
+    ($id) = $u->create(name => $username, email => $username.'@LDAP.user');
+    }
+
+    Jifty->log->debug("Login user id: $id"); 
+
+    # Actually do the signin thing.
+     Jifty->web->current_user( $CurrentUser->new( id => $u->id ) );
+
+    return 1;
+}
+
+1;

Added: jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Action/LDAPLogout.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Action/LDAPLogout.pm	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,35 @@
+use warnings;
+use strict;
+
+=head1 NAME
+
+Jifty::Plugin::AuthLDAPLogin::Action::LDAPLogout
+
+=cut
+
+package Jifty::Plugin::AuthLDAPLogin::Action::LDAPLogout;
+use base qw/Jifty::Action/;
+
+=head2 arguments
+
+Return the email and password form fields
+
+=cut
+
+sub arguments {
+    return ( {} );
+}
+
+=head2 take_action
+
+Nuke the current user object
+
+=cut
+
+sub take_action {
+    my $self = shift;
+    Jifty->web->current_user(undef);
+    return 1;
+}
+
+1;

Added: jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Dispatcher.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPLogin/lib/Jifty/Plugin/AuthLDAPLogin/Dispatcher.pm	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,31 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::AuthLDAPLogin::Dispatcher;
+use Jifty::Dispatcher -base;
+
+# Put any plugin-specific dispatcher rules here.
+
+# Log out
+before 'ldaplogout' => run {
+    Jifty->web->request->add_action(
+        class   => 'LDAPLogout',
+        moniker => 'ldaplogout',
+    );
+};
+
+
+# Login
+on 'ldaplogin' => run {
+    set 'action' =>
+        Jifty->web->new_action(
+        class => 'LDAPLogin',
+        moniker => 'ldaploginbox'
+    );
+    set 'next' => Jifty->web->request->continuation
+        || Jifty::Continuation->new(
+        request => Jifty::Request->new( path => "/" ) );
+};
+
+
+1;

Added: jifty/trunk/plugins/AuthLDAPLogin/share/web/templates/ldaplogin
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPLogin/share/web/templates/ldaplogin	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,19 @@
+<%args>
+$action => undef
+$next => undef
+</%args>
+<&|/_elements/wrapper, title => 'Login' &>
+
+% if (not Jifty->web->current_user->id) {
+<h2><% _('Login') %></h2>
+<% Jifty->web->form->start(call => $next, name => "ldaploginbox") %>
+<% $action->form_field('name') %>
+<% $action->form_field('password') %>
+%#<% $action->form_field('remember') %>
+<% Jifty->web->form->submit(label => _('Login'), submit => $action) %>
+<% Jifty->web->form->end %>
+% }
+% else {
+<% _("You're already logged in.") %>
+% }
+</&>

Added: jifty/trunk/plugins/AuthLDAPLogin/share/web/templates/ldaplogout
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPLogin/share/web/templates/ldaplogout	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,3 @@
+<&| /_elements/wrapper, title => "Logged out" &>
+<p><% _("Ok, you're now logged out. Have a good day.") %></p>
+</&>

Added: jifty/trunk/plugins/AuthLDAPOnly/MANIFEST
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPOnly/MANIFEST	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,10 @@
+MANIFEST
+lib/Jifty/Plugin/AuthLDAPOnly.pm
+lib/Jifty/Plugin/AuthLDAPOnly/Action/LDAPLogin.pm
+lib/Jifty/Plugin/AuthLDAPOnly/Action/LDAPLogout.pm
+lib/Jifty/Plugin/AuthLDAPOnly/CurrentUser.pm
+lib/Jifty/Plugin/AuthLDAPOnly/Dispatcher.pm
+lib/Jifty/Plugin/AuthLDAPOnly/Model/LDAPUser.pm
+Makefile.PL
+share/web/templates/ldaplogin
+share/web/templates/ldaplogout

Added: jifty/trunk/plugins/AuthLDAPOnly/Makefile.PL
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPOnly/Makefile.PL	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,10 @@
+use inc::Module::Install;
+name('Jifty-Plugin-AuthLDAPOnly');
+license('Perl');
+version('0.01');
+requires('Jifty' => '0.60912');
+requires('Net::LDAP');
+
+install_share;
+
+WriteAll;

Added: jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly.pm	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,81 @@
+use strict;
+use warnings;
+
+=head1 NAME
+
+ Jifty::Plugin::AuthLDAPOnly
+
+=head1 DESCRIPTION
+
+ MUST NOT BE USED WITH LOGIN PLUGIN
+
+=head1 CONFIG
+
+ in etc/config.yml
+  Plugins: 
+    - AuthLDAPOnly: 
+       LDAPserver: ldap1.univ-metz.fr
+       LDAPbase: ou=people, ou=...
+       LDAPuid: uid
+       LDAPemail: mailLocalAddress
+                    
+
+=cut
+
+package Jifty::Plugin::AuthLDAPOnly;
+use base qw/Jifty::Plugin/;
+use Net::LDAP;
+
+# Your plugin goes here.  If takes any configuration or arguments, you
+# probably want to override L<Jifty::Plugin/init>.
+
+{
+    my ($CurrentLDAPUserClass, $AuthLDAPUserClass, $LDAP, %params);
+
+    sub init {
+        my $self = shift;
+        my %args = @_;
+        my $appname = Jifty->config->framework('ApplicationName');
+        $CurrentLDAPUserClass = $args{CurrentUserClass}
+            || "${appname}::CurrentUser";
+        $AuthLDAPUserClass = $args{AuthLDAPUserClass}
+            || "${appname}::Model::LDAPUser";
+
+	my ($conf);
+    	foreach (@{Jifty->config->framework('Plugins')}) {
+        	$conf = $_ if (defined $_->{'AuthLDAPOnly'});
+    	}
+    	$params{'Hostname'} = $conf->{'AuthLDAPOnly'}->{'LDAPserver'};
+    	$params{'base'} = $conf->{'AuthLDAPOnly'}->{'LDAPbase'};
+    	$params{'uid'} = $conf->{'AuthLDAPOnly'}->{'LDAPuid'};
+    	$params{'email'} = $conf->{'AuthLDAPOnly'}->{'LDAPemail'};
+    	$LDAP = Net::LDAP->new($params{Hostname},async=>1,onerror => 'undef',timeout => 3600, debug => 0);
+        #my $msg = $LDAP->bind($params{DN},password => $params{Passwd});
+    }
+
+    sub CurrentLDAPUserClass {
+        return $CurrentLDAPUserClass;
+    }
+
+    sub AuthLDAPUserClass {
+        return $AuthLDAPUserClass;
+    }
+
+    sub LDAP {
+	    return $LDAP;
+    }
+
+    sub base {
+        return $params{'base'};
+    }
+
+    sub uid {
+        return $params{'uid'};
+    }
+
+    sub email {
+        return $params{'email'};
+    }
+}
+
+1;

Added: jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Action/LDAPLogin.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Action/LDAPLogin.pm	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,107 @@
+use warnings;
+use strict;
+
+=head1 NAME
+
+Jifty::Plugin::AuthLDAPOnly::Action::LDAPLogin
+
+=cut
+
+package Jifty::Plugin::AuthLDAPOnly::Action::LDAPLogin;
+use base qw/Jifty::Action Jifty::Plugin::AuthLDAPOnly/;
+#use AuthCAS;
+
+
+=head2 arguments
+
+Return the ticket form field
+
+=cut
+
+sub arguments {
+    return (
+        {
+            name => {
+                label          => _('Login'),
+                mandatory      => 1,
+                ajax_validates => 1,
+            },
+
+            password => {
+                type      => 'password',
+                label     => _('Password'),
+                mandatory => 1
+            },
+
+        }
+    );
+
+}
+
+=head2 validate_ticket ST
+
+for ajax_validates
+Makes sure that the ticket submitted is legal.
+
+
+=cut
+
+sub validate_name {
+    my $self  = shift;
+    my $name = shift;
+
+    unless ( $name =~ /^[A-Za-z0-9-]+$/ ) {
+        return $self->validation_error(
+            name => _("That doesn't look like a valid login.") );
+    }
+
+
+    return $self->validation_ok('name');
+}
+
+
+=head2 take_action
+
+Actually check the user's password. If it's right, log them in.
+Otherwise, throw an error.
+
+
+=cut
+
+sub take_action {
+    my $self = shift;
+    my $dn = $self->uid().'='.$self->argument_value('name').','.
+        $self->base();
+
+    my $msg = $self->LDAP()->bind($dn ,'password' =>$self->argument_value('password'));
+    
+    unless (not $msg->code) {
+        $self->result->error(
+     _('You may have mistyped your login or password. Give it another shot?')
+        );
+        return;
+    }
+
+#    if ($error) {
+#      Jifty->log->info("CAS error: $ticket $username : $error");
+#      return;
+#    }
+      
+    my $LDAPUser = $self->AuthLDAPUserClass();
+    my $CurrentUser = $self->CurrentLDAPUserClass();
+    my $u = $LDAPUser->new( current_user => $CurrentUser->superuser );
+
+    $u->load_by_cols( name => $self->argument_value('name'));
+    my $id = $u->id;
+    if (!$id) { 
+   	($id) = $u->create(name => $self->argument_value('name'), created_on => DateTime->now); 
+	}
+    Jifty->log->debug("Login user id: $id"); 
+
+    # Actually do the signin thing.
+     Jifty->web->current_user( $CurrentUser->new( id => $u->id ) );
+
+    return 1;
+}
+
+1;

Added: jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Action/LDAPLogout.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Action/LDAPLogout.pm	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,35 @@
+use warnings;
+use strict;
+
+=head1 NAME
+
+Jifty::Plugin::AuthLDAPOnly::Action::LDAPLogout
+
+=cut
+
+package Jifty::Plugin::AuthLDAPOnly::Action::LDAPLogout;
+use base qw/Jifty::Action/;
+
+=head2 arguments
+
+Return the email and password form fields
+
+=cut
+
+sub arguments {
+    return ( {} );
+}
+
+=head2 take_action
+
+Nuke the current user object
+
+=cut
+
+sub take_action {
+    my $self = shift;
+    Jifty->web->current_user(undef);
+    return 1;
+}
+
+1;

Added: jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/CurrentUser.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/CurrentUser.pm	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,39 @@
+use warnings;
+use strict;
+
+
+package Jifty::Plugin::AuthLDAPOnly::CurrentUser;
+
+use base qw/Jifty::CurrentUser Jifty::Plugin::AuthLDAPOnly/;
+
+=head2 new PARAMHASH
+
+Instantiate a new current user object, loading the user by paramhash:
+
+   my $item = Jifty::Plugin::AuthLDAPOnly::Model::Item->new( Jifty::Plugin::AuthCASOnly::CurrentUser->new(name => 'user'));
+
+if you give the param 
+    _bootstrap => 1
+
+your object will be marked as a bootstrap user. You can use that to do an endrun around acls.
+
+=cut
+
+
+
+sub _init {
+    my $self = shift;
+    my %args = (@_);
+    my $AuthLDAPUserClass = $self->AuthLDAPUserClass;
+
+    if (delete $args{'_bootstrap'} ) {
+        $self->is_bootstrap_user(1);
+    } elsif (keys %args) {
+        $self->user_object($AuthLDAPUserClass->new(current_user => $self));
+        $self->user_object->load_by_cols(%args);
+    }
+    $self->SUPER::_init(%args);
+}
+
+
+1;

Added: jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Dispatcher.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Dispatcher.pm	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,31 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::AuthLDAPOnly::Dispatcher;
+use Jifty::Dispatcher -base;
+
+# Put any plugin-specific dispatcher rules here.
+
+# Log out
+before 'ldaplogout' => run {
+    Jifty->web->request->add_action(
+        class   => 'LDAPLogout',
+        moniker => 'ldaplogout',
+    );
+};
+
+
+# Login
+on 'ldaplogin' => run {
+    set 'action' =>
+        Jifty->web->new_action(
+        class => 'LDAPLogin',
+        moniker => 'ldaploginbox'
+    );
+    set 'next' => Jifty->web->request->continuation
+        || Jifty::Continuation->new(
+        request => Jifty::Request->new( path => "/" ) );
+};
+
+
+1;

Added: jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Model/LDAPUser.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Model/LDAPUser.pm	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,71 @@
+package Jifty::Plugin::AuthLDAPOnly::Model::LDAPUser::Schema;
+use Jifty::DBI::Schema;
+use Scalar::Defer;
+
+column
+  name => type is 'text',
+  label is 'Name',
+  is mandatory,
+  is distinct;
+
+column 'created_on' =>
+  type is 'datetime',
+  is immutable,
+  default is defer { DateTime->now },
+  filters are 'Jifty::DBI::Filter::DateTime';
+
+
+package Jifty::Plugin::AuthLDAPOnly::Model::LDAPUser;
+use base qw/Jifty::Record/;
+
+sub create {
+    my $self  = shift;
+    my %args  = (@_);
+    my (@ret) = $self->SUPER::create(%args);
+
+#    if ( $self->id and not $self->email_confirmed ) {
+#        Jifty::Plugin::Login::Notification::ConfirmAddress->new( to => $self )
+#          ->send;
+#    }
+    return (@ret);
+}
+
+=head2 current_user_can
+
+Allows the current user to see all their own attributes and
+everyone else to see their username.
+
+Allows the current user to update any of their own attributes
+except whether or not their email has been confirmed.
+
+Passes everything else off to the superclass.
+
+=cut
+
+sub current_user_can {
+    my $self  = shift;
+    my $right = shift;
+    my %args  = (@_);
+    # This line breaks admin mode. I like admin mode.
+    #    Carp::confess if ( $right eq 'read' and not $args{'column'} );
+    if (    $right eq 'read'
+        and $self->id == $self->current_user->id )
+    {
+        return 1;
+    }
+    elsif ( $right eq 'read' and $args{'column'} eq 'name' ) {
+        return (1);
+
+    }
+    elsif ( $right eq 'update'
+        and $self->id == $self->current_user->id
+#        and $args{'column'} ne 'email_confirmed' 
+        )
+    {
+        return (1);
+    }
+
+    return $self->SUPER::current_user_can( $right, %args );
+}
+
+1;

Added: jifty/trunk/plugins/AuthLDAPOnly/share/web/templates/ldaplogin
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPOnly/share/web/templates/ldaplogin	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,19 @@
+<%args>
+$action => undef
+$next => undef
+</%args>
+<&|/_elements/wrapper, title => 'Login' &>
+
+% if (not Jifty->web->current_user->id) {
+<h2><% _('Login') %></h2>
+<% Jifty->web->form->start(call => $next, name => "ldaploginbox") %>
+<% $action->form_field('name') %>
+<% $action->form_field('password') %>
+%#<% $action->form_field('remember') %>
+<% Jifty->web->form->submit(label => _('Login'), submit => $action) %>
+<% Jifty->web->form->end %>
+% }
+% else {
+<% _("You're already logged in.") %>
+% }
+</&>

Added: jifty/trunk/plugins/AuthLDAPOnly/share/web/templates/ldaplogout
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/AuthLDAPOnly/share/web/templates/ldaplogout	Thu Nov 16 12:26:16 2006
@@ -0,0 +1,3 @@
+<&| /_elements/wrapper, title => "Logged out" &>
+<p><% _("Ok, you're now logged out. Have a good day.") %></p>
+</&>


More information about the Jifty-commit mailing list