PAPI Archivos

The PAPI authentication and authorization framework

PAPI@LISTSERV.REDIRIS.ES

Opciones: Vista Clásica

Use Monospaced Font
Mostrar las partes HTML
Mostrar todas las cabeceras de correo

Tema: [<< Primero] [< Prev] [Siguiente >] [Último >>]

Print Responder
Antonio José García Lagar <[log in para visualizar]>
Mon, 6 Apr 2009 10:39:37 +0200
text/plain (170 lines)
El Monday 06 April 2009 00:28:28 Diego R. Lopez escribi:
> Hola,
>
> On 31 Mar 2009, at 13:22, Antonio Jos Garca Lagar wrote:
> > El primero es una duda general: como puedo acceder desde el
> > FormProcessor a
> > valores que vengan en la asercin del AS.
>
> Cada atributo que viene en la asercion esta disponible en un array,
> que esta
> en $poa->{attrList}. El nombre del atributo esta en los elementos 2i y
> el
> valor en los 2i+1 (i va de 0 al numero de atributos).
> Asi que poniendo en las expresiones $poa->{attrList}[X] deberias poder
> accederlos.
>
Gracias, esto ya haba conseguido solucionarlo.
> > Por otro lado estoy teniendo problemas en configurar el proxy para
> > Proquest con
> > el acceso a travs del FormProcessor. Esta es mi configuracin
> >
> > <Server name="proquest.papi.example.org" port="80"
> > independent="false">
> >        <Location path="/" id="proquest" filtered="true"
> > independent="false">
> >            <Hcook_DB>/usr/local/PAPI/etc/hcookdb</Hcook_DB>
> >            <GPoA_URL>wayf:built-in</GPoA_URL>
> >            <Req_DB>/usr/local/PAPI/etc/requestdb</Req_DB>
> >            <Remote_URL>http://proquest.umi.com</Remote_URL>
> >            <Form_Processor url="http://proquest.umi.com/pqdweb"
> > form_index="2">
> >                <Field name="COPT"></Field>
> >                <Field name="Password">pass</Field>
> >                <Field name="RQT">301</Field>
> >                <Field name="UserId">user</Field>
> >                <Field name="int">0</Field>
> >                <Field name="lang">es</Field>
> >            </Form_Processor>
> >
> >            <Eval_Proxy_Redirects>0</Eval_Proxy_Redirects>
> >        </Location>
> >    </Server>
> >
> > Alquien que lo tenga funcionando aunque sea con la versin 1.4 podra
> > enviarme su configuracin o echarme una mano?
> >
> > Lo que quiero con la primera cuestin es que el usuario y la
> > password vinieran
> > en la asercin userid=user,password=pass guardada en el directorio
> > LDAP y
> > poder leerlo desde ah.
>
> Me temo que nunca he configurado ese modo de acceso para ProQuest (ni
> en 1.4 ni 1.5).
> He echado un vistazo por el sitio y lo curioso es que usa un form para
> el username
> y otro para el password, con Javascript por medio. Esto puede hacer
> que el parser del
> proxy se haga un lio a la hora de llenar el form con los valores
> adecuados, porque
> puede que los valores "hidden" no los trate bien. Creo que lo mas
> adecuado seria
> analizar el trafico y ver lo que se envia realmente a traves del proxy.
>
Respecto a esto, he conseguido poner el mod_perl en modo debug interactivo, y 
estoy bastante perdido. En la pgina como tu dices, hay dos formularios, pero 
de ambos, el Form_Processor solo identifica los campos tipo hidden:

userIdForm:
$VAR1 = bless( {       
                 'base' => undef,
                 'link' => '/pqdweb',
                 'selections' => {}, 
                 'buttonvals' => {}, 
                 'allfields' => [    
                                  'RQT',
                                  'COPT',
                                  'Passwd'
                                ],        
                 'name' => 'userIdForm',  
                 'fieldtypes' => {        
                                   'Passwd' => 'input/hidden',
                                   'COPT' => 'input/hidden',  
                                   'RQT' => 'input/hidden'    
                                 },                           
                 'checkboxstate' => {},                       
                 'fieldvals' => {                             
                                  'Passwd' => '',             
                                  'COPT' => '',               
                                  'RQT' => '301'              
                                },                            
                 'fields' => [],                              
                 'upload' => 0,                               
                 'debug' => undef,                            
                 'buttontypes' => {},                         
                 'method' => 'POST',                          
                 'buttons' => []                              
               }, 'HTTP::Request::Form' ); 

mainform:
$VAR1 = bless( {       
                 'base' => undef,
                 'link' => '/pqdweb',
                 'selections' => {},
                 'buttonvals' => {},
                 'allfields' => [
                                  'RQT',
                                  'COPT',
                                  'UserId',
                                  'int'
                                ],
                 'name' => 'mainform',
                 'fieldtypes' => {
                                   'int' => 'input/hidden',
                                   'UserId' => 'input/hidden',
                                   'COPT' => 'input/hidden',
                                   'RQT' => 'input/hidden'
                                 },
                 'checkboxstate' => {},
                 'fieldvals' => {
                                  'int' => '0',
                                  'UserId' => '',
                                  'COPT' => '',
                                  'RQT' => '301'
                                },
                 'fields' => [],
                 'upload' => 0,
                 'debug' => undef,
                 'buttontypes' => {},
                 'method' => 'POST',
                 'buttons' => []
               }, 'HTTP::Request::Form' );

Para solucionar esto he escrito una rutina que lo que hace es que si no 
encuentra un campo en el formulario, que si haya sido definido en la 
configuracin del PoA, lo crea para que el formulario tenga al final al menos 
todos los campos definidos en el PoA. Eso puede ayudar a procesar formularios 
que se ayuden del javascript para crear nuevos elementos al vuelo.

Insertar en lnea 282
       for my $f (keys %{$formProc->{settings}}) {
         my $field = $g->look_down("name",$f);
         if($field == undef) {
           my $h = HTML::Element->new('input', 'name' => $f, 'type' => 
'hidden' );
           $g->push_content($h);
         }
       }

Con esto ya consigo enviar a Proquest el formulario con toda la informacin 
necesaria. An as sigo con problemas porque siempre me responde con un header 
302 que me lleva a un bucle infinito.


> Se geno,
>
> --
> "Esta vez no fallaremos, Doctor Infierno"
>
> Dr Diego R. Lopez
>
> Red.es - RedIRIS
> The Spanish NREN
>
> e-mail: [log in para visualizar]
> jid:        [log in para visualizar]
> Tel:    +34 955 056 621
> Mobile: +34 669 898 094
> -----------------------------------------

ATOM RSS1 RSS2