miércoles, 20 de octubre de 2010

Clase smtp_auth [ Clase para autenticar via mail ]

Clase smtp_auth, clase para autenticar los usuarios a través de sus cuentas de email.



class SmtpAuth implements AuthInterface
{
    /**
    * Nombre del archivo (si es utilizado)
    *
    * @var string
    */
    private $filename;
    /**
    * Servidor de autenticación (si es utilizado)
    *
    * @var string
    */
    private $server;
    /**
    * Nombre de usuario para conectar al servidor de autenticacion (si es utilizado)
    *
    * @var string
    */
    private $username;
    /**
    * Password de usuario para conectar al servidor de autenticacion (si es utilizado)
    *
    * @var string
    */
    private $password;
    /**
    * Atributos del modelo a comparar para autenticacion valida
    */
    private $compare_attributes = array();
    /**
    * Identidad encontrara
    */
    private $identity = array();
    /**
    * Constructor del adaptador
    *
    * @param $auth
    * @param $extra_args
    */
    public function __construct ($auth, $extra_args)
    {
        foreach (array('class') as $param) {
            if (isset($extra_args[$param])) {
                $this->$param = $extra_args[$param];
            } else {
                throw new AuthException("Debe especificar el parametro '$param' en los parámetros");
            }
        }

        Load::models($extra_args['class']);
        unset($extra_args[0]);
        unset($extra_args['class']);
        $this->compare_attributes = $extra_args;
    }
    /**
    * Obtiene los datos de identidad obtenidos al autenticar
    * 
    */
    public function get_identity ()
    {        
        return $this->identity;
    }
    
    /**
    * Autentica un usuario usando el adaptador
    *
    * @return boolean
    */
    public function authenticate ()
    {
        Load::lib("phpmailer");
        $result=null;        
        if( $this->compare_attributes['login']!="" && $this->compare_attributes['password']!="" && $this->compare_attributes['server']!=""){//comprobar existencia de parametros                                    
            $login=$this->compare_attributes['login'];
            $password=$this->compare_attributes['password'];
            $server=$this->compare_attributes['server'];        
            
            /**
            *    Configuramos la conexion con el SMTP
            */
            $mail=new phpmailer();        
            $mail->Mailer = "smtp";
            $mail->Host = "$server";
            $mail->Port = 25;
            $mail->SMTPAuth = true;
            
            $domain=substr($server,5);
            
            $mail->Username = "$login@$domain"; // SMTP username
            $mail->Password = "$password"; // SMTP password
            
            /**
            *    Valido los datos con la funcion SmtpConnect()
            */
            try{                
                if($mail->SmtpConnect()==true){                        
                    $identity = array();                        
                    $result=$usuario;                        
                    foreach ($usuario->fields as $field) {
                        /**
                            * Trata de no incluir en la identidad el password del usuario
                            */
                        if (! in_array($field, array('password' , 'clave' , 'contrasena' , 'passwd' , 'pass'))) {
                            $identity[$field] = $usuario->$field;
                        }                            
                    }
                }
                $this->identity = $identity;                
            }catch(phpmailerException $ex){
                Flash::error($ex->errorMessage() . "[$mail->Username | Server: $mail->Host]" );
            }            
        }        
        return $result;
    }
    
    /**
    * Asigna los valores de los parametros al objeto autenticador
    *
    * @param array $extra_args
    */
    public function set_params ($extra_args)
    {
        foreach (array('login','server', 'secret' , 'principal' , 'password' , 'port' , 'max_retries') as $param) {
            if (isset($extra_args[$param])) {
                $this->$param = $extra_args[$param];
            }
        }
    }
}

No hay comentarios:

Publicar un comentario

 
Powered by Blogger