OpenID SREG in progress

This commit is contained in:
Xavier Guimard 2010-09-24 14:21:19 +00:00
parent dab3aaa07f
commit e7fdfb79ed
6 changed files with 28 additions and 24 deletions

View File

@ -225,7 +225,6 @@ BEGIN {
my @keys = $redis->keys('*');
my %res;
foreach my $k (@keys) {
my $v = $redis->get($k);
my $v =
eval { thaw( MIME::Base64::decode_base64( $redis->get($k) ) ) };
next if ($@);

View File

@ -18,22 +18,22 @@ sub new {
sub extensions {
my $self = shift;
$self->{_extensions} = @_;
$self->{_extensions} = shift;;
}
sub signed_return_url {
my ( $self, %opts ) = splice @_;
my $extra;
if ( ref $self->{_extensions} ) {
my $list = $self->args();
my @list = $self->get_args();
my @list = $self->get_args->();
my %h;
foreach my $arg (@list) {
next unless ( $arg =~ /^openid\.(\w+)(\.[\w\.]+)?/ );
print STDERR "ARG: $arg\n";
next unless ( $arg =~ /^openid\.(\w+)\.([\w\.]+)?/ );
my $tmp = $1;
my $val = $2;
if ( defined $self->{_extensions}->{$tmp} ) {
push @{ $h{$tmp} }, $val, scalar self->get_args($arg);
push @{ $h{$tmp} }, $val, scalar $self->args->($arg);
}
}
my %vars;
@ -43,7 +43,7 @@ sub signed_return_url {
$vars{"openid.$ns.$k"} = $v;
}
}
$opts{extra_fields} = \%vars;
$opts{additional_fields} = \%vars;
}
return $self->SUPER::signed_return_url(%opts);
}

View File

@ -1104,7 +1104,7 @@ sub testStruct {
},
},
exportedVars => {
keyTest => qr/^[a-zA-Z][\w-]*$/,
keyTest => qr/^!?[a-zA-Z][\w-]*$/,
keyMsgFail => 'Bad variable name',
test => qr/^[a-zA-Z][\w-]*$/,
msgFail => 'Bad attribute name',

View File

@ -128,12 +128,12 @@ sub extractFormInfo {
or $self->{stack}->[1]->[0]->{m} =~ /^OpenID/ )
{
my ( @r, @o );
foreach my $k ( values %{ $self->{exportedVars} } ) {
while ( my ( $v, $k ) = each %{ $self->{exportedVars} } ) {
if ( $k =~
/^(?:(?:(?:full|nick)nam|languag|postcod|timezon)e|country|gender|email|dob)$/
)
{
if (s/^!//) { push @r, $k }
if ( $v =~ s/^!// ) { push @r, $k }
else { push @o, $k }
}
else {
@ -143,9 +143,9 @@ sub extractFormInfo {
);
}
}
my @tmp =
( @r ? ( 'openid.sreg.required' => join( ',', @r ) ) : () ),
( @o ? ( 'openid.sreg.optional' => join( ',', @o ) ) : () );
my @tmp;
push @tmp, 'openid.sreg.required' => join( ',', @r ) if (@r);
push @tmp, 'openid.sreg.optional' => join( ',', @o ) if (@o);
OpenID::util::push_url_arg( \$check_url, @tmp ) if (@tmp);
}
print $self->redirect($check_url);

View File

@ -1104,7 +1104,7 @@ sub printImage {
sub stamp {
my $self = shift;
return $self->{cipher}->encrypt( time() );
return $self->{cipher} ? $self->{cipher}->encrypt( time() ) : 1;
}
###############################################################
@ -1170,15 +1170,17 @@ sub controlUrlOrigin {
my $self = shift;
if ( my $c = $self->param('confirm') ) {
$c =~ s/^(-?)(.*)$/${1}1/;
my $time = time() - $self->{cipher}->decrypt($2);
if ( $time < 600 ) {
$self->lmLog( "Confirm parameter accepted $c", 'debug' );
$self->param( 'confirm', $c );
print STDERR "DEBUG ".$self->param('confirm')."\n";
}
else {
$self->lmLog( 'Confirmation to old, refused', 'notice' );
$self->param( 'confirm', 0 );
if($self->{cipher}) {
my $time = time() - $self->{cipher}->decrypt($2);
if ( $time < 600 ) {
$self->lmLog( "Confirm parameter accepted $c", 'debug' );
$self->param( 'confirm', $c );
print STDERR "DEBUG ".$self->param('confirm')."\n";
}
else {
$self->lmLog( 'Confirmation to old, refused', 'notice' );
$self->param( 'confirm', 0 );
}
}
}
$self->{_url} ||= '';

View File

@ -45,12 +45,15 @@ sub setSessionInfo {
my $self = shift;
if ( ref( $self->{exportedVars} ) eq 'HASH' ) {
foreach my $k ( keys %{ $self->{exportedVars} } ) {
$k =~ s/^!//;
my $required = ($k =~ s/^!//);
$self->{sessionInfo}->{$k} =
$self->param("openid.sreg.$self->{exportedVars}->{$k}")
if ( $k =~
/^(?:(?:(?:full|nick)nam|languag|postcod|timezon)e|country|gender|email|dob)$/
);
$self->lmLog( "Required parameter $k is not provided by OpenID server, aborted", 'warn' ) if($required);
return PE_ERROR;
}
}
else {