source: branches/2.3/preferences/handlecertificate.php @ 5010

Revision 5010, 12.9 KB checked in by rafaelraymundo, 10 years ago (diff)

Ticket #2251 - No login/ "acolhimento" do certificado, não esta sendo testado se o mesmo esta revogado.

Line 
1<?php
2$GLOBALS['phpgw_info']['flags'] = array(
3        'noheader'   => True,
4        'nonavbar'   => True,
5        'currentapp' => 'preferences'
6);
7if(file_exists('../header.inc.php'))
8    {
9        include('../header.inc.php');
10    }
11else
12    {
13        echo '1'.chr(0x0D).chr(0x0A).lang('Error. header.inc.php not found');
14        exit();
15    }
16if($_POST['certificado'])
17    {
18        $GLOBALS['phpgw_info']['flags']['app_header'] = lang('Digital Certificate Registration');
19        $GLOBALS['phpgw']->common->phpgw_header();
20        echo parse_navbar();
21        echo '<form id="answerForm" name="answerForm" method="POST" action="index.php" >';
22        echo '<BR/><BR/><BR/>';
23       
24        require_once('../security/classes/CertificadoB.php');
25        require_once('../security/classes/Verifica_Certificado.php');
26        include('../security/classes/Verifica_Certificado_conf.php');
27        $cert = troca_espaco_por_mais($_POST['certificado']);
28        $c = new certificadoB();
29        $c->certificado($cert);
30        if (!$c->apresentado)
31            {
32                echo '<div align="center"><h2>'.lang('Fail to get certificate').'</h2>';
33                exit();
34            }
35        $b = new Verifica_Certificado($c->dados,$cert);
36        // Testa se Certificado OK.
37        if(!$b->status)
38            {
39               $msg = '3'.chr(0x0D).chr(0x0A).$b->msgerro;
40               foreach($b->erros_ssl  as $linha)
41                   {
42                        $msg .= "\n" . $linha;
43                   }
44                   echo '<div align="center"><h2>'.$msg.'</h2>';
45               exit();
46            }
47        if ( (!empty($GLOBALS['phpgw_info']['server']['ldap_master_host'])) &&
48                (!empty($GLOBALS['phpgw_info']['server']['ldap_master_root_dn'])) &&
49                (!empty($GLOBALS['phpgw_info']['server']['ldap_master_root_pw'])) )
50            {
51                $ds = $GLOBALS['phpgw']->common->ldapConnect($GLOBALS['phpgw_info']['server']['ldap_master_host'],
52                $GLOBALS['phpgw_info']['server']['ldap_master_root_dn'],
53                $GLOBALS['phpgw_info']['server']['ldap_master_root_pw']);
54            }
55        else
56            {
57                $ds = $GLOBALS['phpgw']->common->ldapConnect();
58            }
59        if (!$ds)
60             {
61                 echo '<div align="center"><h2>'.lang('Failure when get user data to login').'</h2>';
62                exit();
63             }
64        $cert_atrib_cpf = isset($GLOBALS['phpgw_info']['server']['certificado_atributo_cpf'])&&$GLOBALS['phpgw_info']['server']['certificado_atributo_cpf']!=''?$GLOBALS['phpgw_info']['server']['certificado_atributo_cpf']:"uid";
65        // CPF he valor obrigatório no certificado ICP-BRASIL.
66        $filtro = $cert_atrib_cpf .'='. $c->dados['2.16.76.1.3.1']['CPF'];
67        $atributos = array();
68        if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao']) && $GLOBALS['phpgw_info']['server']['atributoexpiracao'])
69            {
70                $atributos[] = $GLOBALS['phpgw_info']['server']['atributoexpiracao'];
71            }
72        else
73            {
74                $atributos[] = 'phpgwlastpasswdchange';
75            }
76         $atributos[] = "userCertificate";
77         $atributos[] = "uid";
78        $sr=ldap_search($ds, $GLOBALS['phpgw_info']['server']['ldap_context'],$filtro,$atributos);
79        // Pega resultado ....
80        $info = ldap_get_entries($ds, $sr);
81        // Tem de achar só uma entrada.....ao menos uma....
82        if($info["count"]!=1)
83            {
84                echo '<div align="center"><h2>'.lang('Invalid data from users directory').'('.$cert_atrib_cpf.' = ' . $c->dados['2.16.76.1.3.1']['CPF'] . ')'.'</h2>';
85                ldap_close($ds);
86                exit();
87            }
88            if($info[0]["uid"][0] != $GLOBALS['phpgw_info']['user']['userid'])
89            {
90                echo '<div align="center"><h2>'.lang('Invalid data from users directory').'('.$cert_atrib_cpf.' = ' . $c->dados['2.16.76.1.3.1']['CPF'] . ' - ' . $info[0]["uid"][0] . ' - ' . $GLOBALS['phpgw_info']['user']['userid'] . ')'.'</h2>';
91                ldap_close($ds);
92                exit();
93            }
94            if($info[0]["userCertificate"][0] && $cert == $info[0]["userCertificate"][0] )
95            {
96                //echo '0'.chr(0x0D).chr(0x0A).$info[0]["uid"][0].chr(0x0D).chr(0x0A).$info[0]["cryptpassword"][0];
97                echo '<div align="center"><h2>'.lang('Certificate already registered').'</h2>';
98                ldap_close($ds);
99                exit();
100            }
101        $user_info = array();
102        $aux1 = $info[0]["dn"];
103        $user_info['userCertificate'] = $cert;
104        if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao']) && $GLOBALS['phpgw_info']['server']['atributoexpiracao'])
105            {
106                if(substr($info[0][$GLOBALS['phpgw_info']['server']['atributoexpiracao']][0],-1,1)=="Z")
107                    {
108                        $user_info[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = '19800101000000Z';
109                    }
110                else
111                    {
112                        $user_info[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = '0';
113                    }
114            }
115        else
116            {
117                $user_info['phpgwlastpasswdchange'] = '0';
118            }
119        if(!ldap_modify($ds,$aux1,$user_info))
120            {
121                echo '<div align="center"><h2>'.lang('Error in Certificate registration'). '  -  ' . $aux1.'</h2>';
122            }
123        else
124            {
125                echo '<div align="center"><h2>'.lang('To conclude your Certificate registration change your password').'</h2>';
126            }
127
128            echo '<h2><img style="border:0px;margin:31px 0px 58px 0px;" src="../phpgwapi/templates/default/images/acao.gif" /></h2>';
129            echo '<input type="submit" name="ok" value="' . lang('ok') . '" ></div></form>';
130            $GLOBALS['phpgw']->common->phpgw_footer();
131        ldap_close($ds);
132        exit();
133    }
134else
135    {
136        $GLOBALS['phpgw_info']['flags']['app_header'] = lang('Digital Certificate Registration');
137        $GLOBALS['phpgw']->common->phpgw_header();
138        echo parse_navbar();
139        if ($GLOBALS['phpgw_info']['server']['certificado']==1)
140            {
141                    $var_tokens = '';
142                    for($ii = 1; $ii < 11; $ii++)
143                    {
144                            if($GLOBALS['phpgw_info']['server']['test_token' . $ii . '1'])
145                                    $var_tokens .= $GLOBALS['phpgw_info']['server']['test_token' . $ii . '1'] . ',';
146                    }
147                    if(!$var_tokens)
148                    {
149                            $var_tokens = 'ePass2000Lx;/usr/lib/libepsng_p11.so,ePass2000Win;c:/windows/system32/ngp11v211.dll';
150                    }
151                    $param1 = "
152                                                                                            '<param name=\"token\" value=\"" . substr($var_tokens,0,strlen($var_tokens)) . "\"> ' +
153                                                                                       ";
154                    $param2 = "
155                                                                                            'token=\"" . substr($var_tokens,0,strlen($var_tokens)) . "\" ' +
156                                                                                       ";
157                    $cod_applet =
158        /*    // com debug ativado
159                '<script type="text/javascript">
160                                            if (navigator.userAgent.match(\'MSIE\')){
161                                                    document.write(\'<object style="display:yes;width:0;height:0;vertical-align:bottom;" id="login_applet" \' +
162                                                    \'classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"> \' +
163                                                    \'<param name="type" value="application/x-java-applet;version=1.5"> \' +
164                                                    \'<param name="code" value="LoginApplet.class"> \' +
165                                                    \'<param name="locale" value="' . $lang . '"> \' +
166                                                    \'<param name="mayscript" value="true"> \' + '
167                                                    . $param1
168                                                    . ' \'<param name="archive" value="ExpressoCertLogin.jar,ExpressoCert.jar,commons-httpclient-3.1.jar,commons-logging-1.1.1.jar,commons-codec-1.3.jar,bcmail-jdk15-142.jar,mail.jar,activation.jar,bcprov-jdk15-142.jar"> \' +
169                            \'<param name="debug" value="true"> \' +
170                                                    \'</object>\');
171                                            }
172                                            else {
173                                                    document.write(\'<embed style="display:yes;width:0;height:0;vertical-align:bottom;" id="login_applet" code="LoginApplet.class" locale="' . $lang . '"\' +
174                                                    \'archive="ExpressoCertLogin.jar,ExpressoCert.jar,commons-httpclient-3.1.jar,commons-logging-1.1.1.jar,commons-codec-1.3.jar,bcmail-jdk15-142.jar,mail.jar,activation.jar,bcprov-jdk15-142.jar" \' + '
175                                                    . $param2
176                                                    . ' \'type="application/x-java-applet;version=1.5" debug= "true" mayscript > \' +
177                                                    \'<noembed> \' +
178                                                    \'No Java Support. \' +
179                                                    \'</noembed> \' +
180                                                    \'</embed> \');
181                                            }
182                                    </script>';
183        */
184                // sem debug ativado
185                '<script type="text/javascript">
186                                            if (navigator.userAgent.match(\'MSIE\')){
187                                                    document.write(\'<object style="display:yes;width:0;height:0;vertical-align:bottom;" id="login_applet" \' +
188                                                    \'classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"> \' +
189                                                    \'<param name="type" value="application/x-java-applet;version=1.5"> \' +
190                                                    \'<param name="codebase" value="/security/">\' +
191                                                    \'<param name="code" value="LoginApplet.class"> \' +
192                                                    \'<param name="locale" value="' . $lang . '"> \' +
193                                                    \'<param name="mayscript" value="true"> \' + '
194                                                    . $param1
195                                                    . ' \'<param name="archive" value="ExpressoCertLogin.jar,ExpressoCert.jar,commons-httpclient-3.1.jar,commons-logging-1.1.1.jar,commons-codec-1.3.jar,bcmail-jdk15-142.jar,mail.jar,activation.jar,bcprov-jdk15-142.jar"> \' +
196                                                    \'</object>\');
197                                            }
198                                            else {
199                                                    document.write(\'<embed style="display:yes;width:0;height:0;vertical-align:bottom;" id="login_applet" codebase="/security/" code="LoginApplet.class" locale="' . $lang . '"\' +
200                                                    \'archive="ExpressoCertLogin.jar,ExpressoCert.jar,commons-httpclient-3.1.jar,commons-logging-1.1.1.jar,commons-codec-1.3.jar,bcmail-jdk15-142.jar,mail.jar,activation.jar,bcprov-jdk15-142.jar" \' + '
201                                                    . $param2
202                                                    . ' \'type="application/x-java-applet;version=1.5" mayscript > \' +
203                                                    \'<noembed> \' +
204                                                    \'No Java Support. \' +
205                                                    \'</noembed> \' +
206                                                    \'</embed> \');
207                                            }
208                                    </script>';
209                  echo $cod_applet;
210                  echo '<form id="certificateForm" name="certificateForm" method="POST" action="handlecertificate.php" >';
211                  echo '<BR/><BR/><BR/>';
212                  echo '<div align="center"><h2>'.lang('Getting your Certificate').'</h2>';
213                  echo '<h2><img style="border:0px;margin:31px 0px 58px 0px;" src="../phpgwapi/templates/default/images/acao.gif" /></h2>';
214                  echo '<input type="hidden" name="certificado" value="" />';
215                  echo '<input type="submit" name="cancel" value="' . lang('cancel') . '" ></div></form>';
216                  $GLOBALS['phpgw']->common->phpgw_footer();
217        }
218    }
219?>
Note: See TracBrowser for help on using the repository browser.