auto-create users from SAML memcache sessions
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 26 Jun 2011 19:28:21 +0000 (21:28 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 26 Jun 2011 19:28:21 +0000 (21:28 +0200)
C4/Auth.pm

index b99ddfc..20eb28c 100644 (file)
@@ -33,6 +33,8 @@ use C4::Branch; # GetBranches
 use C4::VirtualShelves;
 use POSIX qw/strftime/;
 
+use Cache::Memcached;
+
 # use utf8;
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $debug $ldap $cas $caslogout);
 
@@ -171,6 +173,53 @@ sub get_template_and_user {
         $borrowernumber = getborrowernumber($user) if defined($user);
 
         my ( $borr ) = GetMemberDetails( $borrowernumber );
+
+       if ( ! $borr ) {
+               # create new user from SAML data
+               if ( my $token = $in->{query}->cookie('AuthMemCookie') ) {
+
+
+                       my $memd = new Cache::Memcached { 'servers' => [ '127.0.0.1:11211' ] };
+                       if ( my $data = $memd->get($token) ) {
+
+                               my $saml;
+                               foreach ( split(/[\n\r]+/,$data) ) {
+                                       my ($n,$v) = split /=/, $_;
+                                       $saml->{$n} = $v;
+                               }
+
+                               if ( $borrowernumber = getborrowernumber($saml->{ATTR_nick}) ) {
+                                       warn "SAML login OK $borrowernumber";
+                               } else {
+                                       my $borrower = {
+                                               cardnumber => 'S' . $saml->{ATTR_code}, # FIXME
+                                               categorycode => 'S',
+
+                                               userid    => $saml->{ATTR_nick},
+                                               firstname => $saml->{ATTR_first_name},
+                                               surname   => $saml->{ATTR_last_name},
+                                               branchcode => 'SRE', # FIXME
+                                               email     => $saml->{ATTR_email},
+                                               dateexpiry => '2020-12-13',
+                                               password => $token, # required so AddMember won't erase userid
+                                       };
+
+                                       AddMember( %$borrower );
+
+                                       warn "ADDED $data";
+
+                                       $borrowernumber = getborrowernumber($borrower->{userid}); # || die "can't find borrower number for $borrower->{userid}";
+                               }
+
+                               $borr = GetMemberDetails( $borrowernumber ); # || die "can't find borrower $borrowernumber";
+                       } else {
+                               die "Can't find SAML token $token for user $user\n";
+                       }
+               } else {
+                       die "Can't find SAML token for user $user\n" unless $borr;
+               }
+       }
+
         my @bordat;
         $bordat[0] = $borr;
         $template->param( "USER_INFO" => \@bordat );