123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- <?php
- /*
- * Valida usuario con el webservice BD y devuelve contraseña para validar con PHP
- *
- * Recibe:
- * POST: usuario, password
- *
- * Error:
- * 0 - No se recibieron datos
- * 1 - Usuario/Contraseña incorrectos
- * 2 - Usuario no esta en BD
- * 3 - No existe usuario
- *
- * Success:
- * Redirecciona a index.php
- *
- * Result (del webservice): result es un arreglo con los campos:
- * 'error' => 'xsd:boolean',
- * 'resultMessage'=>'xsd:string',
- * 'usuario_nombre' => 'xsd:string',
- * 'usuario_apellidos' => 'xsd:string',
- * 'usuario_clave' => 'xsd:string',
- * 'usuario_id' => 'xsd:integer',
- * 'usuario_esProfesor' => 'xsd:boolean',
- * 'usuario_esAdministrativo' => 'xsd:boolean'
- */
- session_start();
- //require_once("../classes/Log.php");
- require_once("../include/nusoap/nusoap.php");
- require_once('../classes/Concurso.php');
- require_once('../classes/Usuario.php');
- require_once('../classes/ValidaSesion.php');
- require_once("../include/bd_pdo.php");
- define("SECURITY", 'P4$$w0rd.S3gura#CiDit&2020');//token de seguridad
- $token = SECURITY;
- $pag = explode('?', $_SERVER["HTTP_REFERER"]);
- $pag = explode('/', $pag[0]);
- $pag = $pag[count($pag)-1];
- $errorBD = false;
- if (is_null($pdo))
- $errorBD = true;
- if(!isset($_POST['username']) || !isset($_POST['passwd'])){
- header('Location: ../' . $pag . '?errorIni=0');
- exit;
- }
- $user = trim(filter_input(INPUT_POST, 'username'));//limpia texto
- $pass = $_POST['passwd']; //trim(filter_input(INPUT_POST, "passwd"));//limpia texto
- $externo = false;
- if (intval(substr($user, 2)) == 0)
- $externo = true;
- if (!$errorBD){
- $_SESSION['timeout'] = time();
- if (!$externo){
- $client = new nusoap_client('http://200.13.89.27/webservice/valida_cidit.php?wsdl', 'wsdl');//dirección del webservice
- if ($client->getError()) {
- header('Location: ../' . $pag . '?errorIni=1');
- exit;
- }else{
- $result = $client->call('valida_user', array($user, $pass));//función en el webservice. user necesita ad, do
- if (!$result){
- header('Location: ../' . $pag . '?errorIni=1');
- exit;
- } else {
- $userId = $result['usuario_id'];
- }
- }
- }
- switch (obtenerDatos($pdo, $userId, $pass, $externo)){
- case 'ok':
- $accesos = new ValidaSesion($pdo, 242);
- if ($accesos->tieneAcceso())
- header('Location: ../home.php');
- else {
- header('Location: ../salir.php');
- }
- exit;
- break;
- case 'no-acceso':
- if ($userId > 0){
- if (substr($user, 0, 2) == 'al'){
- $newUsr = agregaUsuarioInterno($pdo,'ALUMNO',$userId);
- if($newUsr > 0){
- if (obtenerDatos($pdo, $userId, $pass, $externo) == 'ok'){
- $accesos = new ValidaSesion($pdo, 242);
- if ($accesos->tieneAcceso())
- header('Location: ../home.php');
- else {
- header('Location: ../salir.php');
- }
- } else
- header('Location: ../' . $pag . '?errorIni=3');
- } else
- header('Location: ../' . $pag . '?errorIni=3');
- } else {
- $newUsr = agregaUsuarioInterno($pdo,'BASICO',$userId);
- if($newUsr > 0){
- if (obtenerDatos($pdo, $userId, $pass, $externo) == 'ok'){
- $accesos = new ValidaSesion($pdo, 242);
- if ($accesos->tieneAcceso())
- header('Location: ../home.php');
- else {
- header('Location: ../salir.php');
- }
- } else
- header('Location: ../' . $pag . '?errorIni=3');
- } else
- header('Location: ../' . $pag . '?errorIni=3');
- }
- } else
- header('Location: ../' . $pag . '?errorIni=3');
- exit;
- break;
- case 'no-validado':
- header('Location: ../' . $pag . '?errorIni=3');
- exit;
- break;
- default:
- header('Location: ../' . $pag . '?errorIni=0');
- exit;
- break;
- }
- } else{
- header('Location: ../' . $pag . '?errorIni=1');
- exit;
- }
- function obtenerDatos($pdo, $user, $pass, $externo){
- $situacion = 'error';
- $usr = Usuario::datosUsuario($pdo, $user, $pass, $externo);
- if (is_null($usr))
- $situacion = 'no-validado';
- else {
- if (count($usr) > 0){
- $_SESSION['usuario_id'] = $usr['iduser'];
- $_SESSION['usuario_nombre'] = $usr['nombre'];
- $_SESSION['usuario_apellidos'] = $usr['apellidos'];
- if ($usr['cvepuesto'] == 'ANTERIOR'){
- $concurso = new Concurso();
- $concurso->getConcursoAnterior($pdo);
- $_SESSION['puesto'] = $usr['puesto'] . '(' .$concurso->getNombre() . 'CIDIT)';
- } else
- $_SESSION['puesto'] = $usr['puesto'];
- $_SESSION['icono'] = $usr['icono'];
- $situacion = 'ok';
- } else {
- $situacion = 'no-acceso';
- }
- }
- return $situacion;
- }
- function agregaUsuarioInterno($pdo,$puestoTxt, $idinterno){
- $idusr = 0;
- $idusr = Usuario::agregaUsuarioInterno($pdo, $idinterno);
- if ($idusr > 0){
- $puesto = Usuario::getPuestoXClave($pdo, $puestoTxt);
- if (count($puesto) > 0){
- if(Usuario::agregaUsuarioPuesto($pdo,$idusr,$puesto['idpuesto'])) {
- $rol = Usuario::getIdRol($pdo, $puestoTxt);
- if (!Usuario::agregaUsuarioRol($pdo, $idusr, $rol['idrol'], null)){
- Usuario::eliminaUsuarioInterno ($pdo, $idusr);
- $idusr = 0;
- }
- } else
- Usuario::eliminaUsuarioInterno ($pdo, $idusr);
- }
- }
- return $idusr;
- }
|