[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