[Jifty-commit] r2611 - in jifty/trunk/plugins: Users Users-Identity-File Users-Identity-File/doc Users-Identity-File/lib Users-Identity-File/lib/Jifty Users-Identity-File/lib/Jifty/Plugin Users-Identity-File/lib/Jifty/Plugin/Users Users-Identity-File/lib/Jifty/Plugin/Users/Identity Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File/Action Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File/Model Users-Identity-File/share Users-Identity-File/share/po Users-Identity-File/share/web Users-Identity-File/share/web/static Users-Identity-File/share/web/templates Users-Identity-File/t Users/doc Users/lib Users/lib/Jifty Users/lib/Jifty/Plugin Users/lib/Jifty/Plugin/Users Users/lib/Jifty/Plugin/Users/Action Users/lib/Jifty/Plugin/Users/Model Users/share Users/share/po Users/share/web Users/share/web/templates Users/t

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Fri Jan 26 10:47:48 EST 2007


Author: yves
Date: Fri Jan 26 10:47:46 2007
New Revision: 2611

Added:
   jifty/trunk/plugins/Users/
   jifty/trunk/plugins/Users-Identity-File/
   jifty/trunk/plugins/Users-Identity-File/Makefile.PL
   jifty/trunk/plugins/Users-Identity-File/doc/
   jifty/trunk/plugins/Users-Identity-File/lib/
   jifty/trunk/plugins/Users-Identity-File/lib/Jifty/
   jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/
   jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/
   jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/
   jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File/
   jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File.pm
   jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File/Action/
   jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File/Action/Login.pm
   jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File/Dispatcher.pm
   jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File/Model/
   jifty/trunk/plugins/Users-Identity-File/share/
   jifty/trunk/plugins/Users-Identity-File/share/po/
   jifty/trunk/plugins/Users-Identity-File/share/web/
   jifty/trunk/plugins/Users-Identity-File/share/web/static/
   jifty/trunk/plugins/Users-Identity-File/share/web/templates/
   jifty/trunk/plugins/Users-Identity-File/share/web/templates/login
   jifty/trunk/plugins/Users-Identity-File/t/
   jifty/trunk/plugins/Users/Makefile.PL
   jifty/trunk/plugins/Users/doc/
   jifty/trunk/plugins/Users/lib/
   jifty/trunk/plugins/Users/lib/Jifty/
   jifty/trunk/plugins/Users/lib/Jifty/Plugin/
   jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users/
   jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users.pm
   jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users/Action/
   jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users/CurrentUser.pm
   jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users/Dispatcher.pm
   jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users/Model/
   jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users/Model/User.pm
   jifty/trunk/plugins/Users/share/
   jifty/trunk/plugins/Users/share/po/
   jifty/trunk/plugins/Users/share/web/
   jifty/trunk/plugins/Users/share/web/static/
   jifty/trunk/plugins/Users/share/web/templates/
   jifty/trunk/plugins/Users/t/

Log:
 * first shot (and not workable) for plugins 2.0 auth plugins


Added: jifty/trunk/plugins/Users-Identity-File/Makefile.PL
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/Users-Identity-File/Makefile.PL	Fri Jan 26 10:47:46 2007
@@ -0,0 +1,8 @@
+use inc::Module::Install;
+name('Jifty-Plugin-Users-Identity-File');
+version('0.01');
+requires('Jifty' => '0.70117');
+
+install_share;
+
+WriteAll;

Added: jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File.pm	Fri Jan 26 10:47:46 2007
@@ -0,0 +1,13 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::Users::Identity::File;
+use base qw/Jifty::Plugin Jifty::Plugin::Users/;
+
+# Your plugin goes here.  If takes any configuration or arguments, you
+# probably want to override L<Jifty::Plugin/init>.
+
+# ?? TODO
+# in init load file name
+
+1;

Added: jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File/Action/Login.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File/Action/Login.pm	Fri Jan 26 10:47:46 2007
@@ -0,0 +1,90 @@
+use warnings;
+use strict;
+
+=head1 NAME
+
+Jifty::Plugin::Users::Identity::File::Action::Login
+
+=cut
+
+package Jifty::Plugin::Users::Identity::File::Action::Login;
+use base qw/Jifty::Action Jifty::Plugin::Users Jifty::Plugin::Users::Identity::File/;
+
+
+=head2 arguments
+
+Return the ticket form field
+
+=cut
+
+sub arguments {
+    return (
+        {
+            login => {
+                label          => 'login',
+                mandatory      => 1,
+                ajax_validates => 1,
+            },
+            password => {
+                label          => 'password',
+                mandatory      => 1,
+            },
+
+        }
+    );
+
+}
+
+=head2 validate_ticket ST
+
+for ajax_validates
+Makes sure that the ticket submitted is legal.
+
+
+=cut
+
+sub validate_login {
+    my $self  = shift;
+    my $login = shift;
+
+    unless ( $login && $login !~ /^[A-Za-z0-9-]+$/ ) {
+        return $self->validation_error(
+            ticket => _("That doesn't look like a valid ticket.") );
+    }
+
+
+    return $self->validation_ok('login');
+}
+
+
+=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 $login = $self->argument_value('login');
+    my $password = $self->argument_value('password');
+
+    my $LoginUser = $self->UserClass();
+    my $CurrentUser = $self->CurrentUserClass();
+    my $u = $LoginUser->new( current_user => $CurrentUser->superuser );
+
+    $u->load_by_cols( display_name => $login, realm => 'file' );
+    my $id = $u->id;
+    if (!$id) { 
+   	($id) = $u->create(display_name => $login, realm => 'file' ); 
+	}
+    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/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File/Dispatcher.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/Users-Identity-File/lib/Jifty/Plugin/Users/Identity/File/Dispatcher.pm	Fri Jan 26 10:47:46 2007
@@ -0,0 +1,21 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::Users::Identity::File::Dispatcher;
+use Jifty::Dispatcher -base;
+
+# Put any plugin-specific dispatcher rules here.
+
+# Login
+on 'login' => run {
+    set 'action' =>
+        Jifty->web->new_action(
+        class => 'Login',  #File login
+        moniker => 'fileloginbox'
+    );
+    set 'next' => Jifty->web->request->continuation
+        || Jifty::Continuation->new(
+        request => Jifty::Request->new( path => "/" ) );
+};
+
+1;

Added: jifty/trunk/plugins/Users-Identity-File/share/web/templates/login
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/Users-Identity-File/share/web/templates/login	Fri Jan 26 10:47:46 2007
@@ -0,0 +1,20 @@
+<%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 => "fileloginbox") %>
+<% $action->form_field('login') %>
+<% $action->form_field('password') %>
+<div class="submit_button">
+<% Jifty->web->return(label => _('Login'), to => '/', submit => $action) %>
+</div>
+<% Jifty->web->form->end %>
+% }
+% else {
+<% _("You're already logged in.") %>
+% }
+</&>

Added: jifty/trunk/plugins/Users/Makefile.PL
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/Users/Makefile.PL	Fri Jan 26 10:47:46 2007
@@ -0,0 +1,8 @@
+use inc::Module::Install;
+name('Jifty-Plugin-Users');
+version('0.01');
+requires('Jifty' => '0.70117');
+
+install_share;
+
+WriteAll;

Added: jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users.pm	Fri Jan 26 10:47:46 2007
@@ -0,0 +1,52 @@
+use strict;
+use warnings;
+
+=head1 NAME
+
+Jifty::Plugin::Users;
+
+=cut
+
+package Jifty::Plugin::Users;
+use base qw/Jifty::Plugin/;
+
+=head1 SYNOPSIS
+
+EXPERIMENTAL DON'T USE IT
+EXPERIMENTAL DON'T USE IT
+EXPERIMENTAL DON'T USE IT
+
+ in etc/config.yml
+     Plugins:
+	   - Users: {}
+       - Users-Identity-File:
+			store: no
+
+=cut
+
+# Your plugin goes here.  If takes any configuration or arguments, you
+# probably want to override L<Jifty::Plugin/init>.
+
+{
+    my ($CurrentUserClass, $UserClass);
+
+    sub init {
+    my $self = shift;
+    my %args = @_;
+    my $appname = Jifty->config->framework('ApplicationClass');
+    $UserClass = $args{UserClass}
+        || Jifty->app_class('Model','Users');
+    $CurrentUserClass = Jifty->app_class('CurrentUser')
+    }
+
+    sub CurrentUserClass {
+    return $CurrentUserClass;
+    }
+
+    sub UserClass {
+    return $UserClass;
+    }
+}
+
+
+1;

Added: jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users/CurrentUser.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users/CurrentUser.pm	Fri Jan 26 10:47:46 2007
@@ -0,0 +1,39 @@
+use warnings;
+use strict;
+
+
+package Jifty::Plugin::Users::CurrentUser;
+
+use base qw/Jifty::CurrentUser Jifty::Plugin::Users/;
+
+=head2 new PARAMHASH
+
+Instantiate a new current user object, loading the user by paramhash:
+
+   my $item = Jifty::Plugin::Login::Model::Item->new( Jifty::Plugin::Login::CurrentUser->new(email => 'user at site'));
+
+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 $LoginUserClass = $self->UserClass;
+
+    if (delete $args{'_bootstrap'} ) {
+        $self->is_bootstrap_user(1);
+    } elsif (keys %args) {
+        $self->user_object($LoginUserClass->new(current_user => $self));
+        $self->user_object->load_by_cols(%args);
+    }
+    $self->SUPER::_init(%args);
+}
+
+
+1;

Added: jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users/Dispatcher.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users/Dispatcher.pm	Fri Jan 26 10:47:46 2007
@@ -0,0 +1,9 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::Users::Dispatcher;
+use Jifty::Dispatcher -base;
+
+# Put any plugin-specific dispatcher rules here.
+
+1;

Added: jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users/Model/User.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/Users/lib/Jifty/Plugin/Users/Model/User.pm	Fri Jan 26 10:47:46 2007
@@ -0,0 +1,141 @@
+package Jifty::Plugin::Users::Model::User;
+use base qw/Jifty::Record Jifty::Plugin::Users/;
+use Jifty::DBI::Schema;
+
+use Jifty::Record schema {
+column
+  display_name => type is 'text',
+  label is 'Name',
+  is mandatory;
+
+column
+  realm => type is 'text',
+  label is 'Identity Plugin',
+  is mandatory;
+
+column
+  created_date => type is 'date';
+
+column
+  updated_date => type is 'date';
+
+column
+  created_by => type is 'text';
+
+column
+  updated_by => type is 'text';
+
+column
+  last_login => type is 'date';
+
+## ???
+column
+  auth_token => type is 'text',
+  render_as 'Unrendered';
+};
+
+
+sub create {
+    my $self  = shift;
+    my %args  = (@_);
+    my (@ret) = $self->SUPER::create(%args);
+ # set  created_date and created_by
+	return (@ret);
+}
+
+=head2 password_is STRING
+
+Returns true if and only if the current user's password matches STRING
+
+=cut
+
+#sub password_is {
+#    my $self   = shift;
+#    my $string = shift;
+#    return 1 if ( $self->_value('password') eq $string );
+#    return 0;
+#}
+
+=head2 password
+
+Never display a password
+
+=cut
+
+sub password {
+    return undef;
+
+}
+
+=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 'display_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 );
+}
+
+=head2 auth_token
+
+Returns the user's unique authentication token. If the user 
+doesn't have one, sets one and returns it.
+
+=cut
+
+sub auth_token {
+    my $self = shift;
+    return undef
+      unless ( $self->current_user_can( read => column => 'auth_token' ) );
+    my $value = $self->_value('auth_token');
+    unless ($value) {
+        my $digest = Digest::MD5->new();
+        $digest->add( rand(100) );
+        $self->__set( column => 'auth_token', value => $digest->b64digest );
+    }
+    return $self->_value('auth_token');
+
+}
+
+=head2 record_class
+
+Identifies the correct record class for introspection
+
+=cut
+
+sub record_class {
+    my $self = shift;
+    return $self->UserClass;
+
+}
+
+1;


More information about the Jifty-commit mailing list