Relacionado al tutorial Kumbiaphp : Login de la aplicacion utilizando una cuenta de correo [ phpmail ]
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