inicia_action.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. /*
  3. * Valida usuario con el webservice BD y devuelve contraseña para validar con PHP
  4. *
  5. * Recibe:
  6. * POST: usuario, password
  7. *
  8. * Error:
  9. * 0 - No se recibieron datos
  10. * 1 - Usuario/Contraseña incorrectos
  11. * 2 - Usuario no esta en BD
  12. * 3 - No existe usuario
  13. *
  14. * Success:
  15. * Redirecciona a index.php
  16. *
  17. * Result (del webservice): result es un arreglo con los campos:
  18. * 'error' => 'xsd:boolean',
  19. * 'resultMessage'=>'xsd:string',
  20. * 'usuario_nombre' => 'xsd:string',
  21. * 'usuario_apellidos' => 'xsd:string',
  22. * 'usuario_clave' => 'xsd:string',
  23. * 'usuario_id' => 'xsd:integer',
  24. * 'usuario_esProfesor' => 'xsd:boolean',
  25. * 'usuario_esAdministrativo' => 'xsd:boolean'
  26. */
  27. session_start();
  28. //require_once("../classes/Log.php");
  29. require_once("../include/nusoap/nusoap.php");
  30. require_once('../classes/Concurso.php');
  31. require_once('../classes/Usuario.php');
  32. require_once('../classes/ValidaSesion.php');
  33. require_once("../include/bd_pdo.php");
  34. define("SECURITY", 'P4$$w0rd.S3gura#CiDit&2020');//token de seguridad
  35. $token = SECURITY;
  36. $pag = explode('?', $_SERVER["HTTP_REFERER"]);
  37. $pag = explode('/', $pag[0]);
  38. $pag = $pag[count($pag)-1];
  39. $errorBD = false;
  40. if (is_null($pdo))
  41. $errorBD = true;
  42. if(!isset($_POST['username']) || !isset($_POST['passwd'])){
  43. header('Location: ../' . $pag . '?errorIni=0');
  44. exit;
  45. }
  46. $user = trim(filter_input(INPUT_POST, 'username'));//limpia texto
  47. $pass = $_POST['passwd']; //trim(filter_input(INPUT_POST, "passwd"));//limpia texto
  48. $externo = false;
  49. if (intval(substr($user, 2)) == 0)
  50. $externo = true;
  51. if (!$errorBD){
  52. $_SESSION['timeout'] = time();
  53. if (!$externo){
  54. $client = new nusoap_client('http://200.13.89.27/webservice/valida_cidit.php?wsdl', 'wsdl');//dirección del webservice
  55. if ($client->getError()) {
  56. header('Location: ../' . $pag . '?errorIni=1');
  57. exit;
  58. }else{
  59. $result = $client->call('valida_user', array($user, $pass));//función en el webservice. user necesita ad, do
  60. if (!$result){
  61. header('Location: ../' . $pag . '?errorIni=1');
  62. exit;
  63. } else {
  64. $userId = $result['usuario_id'];
  65. }
  66. }
  67. }
  68. switch (obtenerDatos($pdo, $userId, $pass, $externo)){
  69. case 'ok':
  70. $accesos = new ValidaSesion($pdo, 242);
  71. if ($accesos->tieneAcceso())
  72. header('Location: ../home.php');
  73. else {
  74. header('Location: ../salir.php');
  75. }
  76. exit;
  77. break;
  78. case 'no-acceso':
  79. if ($userId > 0){
  80. if (substr($user, 0, 2) == 'al'){
  81. $newUsr = agregaUsuarioInterno($pdo,'ALUMNO',$userId);
  82. if($newUsr > 0){
  83. if (obtenerDatos($pdo, $userId, $pass, $externo) == 'ok'){
  84. $accesos = new ValidaSesion($pdo, 242);
  85. if ($accesos->tieneAcceso())
  86. header('Location: ../home.php');
  87. else {
  88. header('Location: ../salir.php');
  89. }
  90. } else
  91. header('Location: ../' . $pag . '?errorIni=3');
  92. } else
  93. header('Location: ../' . $pag . '?errorIni=3');
  94. } else {
  95. $newUsr = agregaUsuarioInterno($pdo,'BASICO',$userId);
  96. if($newUsr > 0){
  97. if (obtenerDatos($pdo, $userId, $pass, $externo) == 'ok'){
  98. $accesos = new ValidaSesion($pdo, 242);
  99. if ($accesos->tieneAcceso())
  100. header('Location: ../home.php');
  101. else {
  102. header('Location: ../salir.php');
  103. }
  104. } else
  105. header('Location: ../' . $pag . '?errorIni=3');
  106. } else
  107. header('Location: ../' . $pag . '?errorIni=3');
  108. }
  109. } else
  110. header('Location: ../' . $pag . '?errorIni=3');
  111. exit;
  112. break;
  113. case 'no-validado':
  114. header('Location: ../' . $pag . '?errorIni=3');
  115. exit;
  116. break;
  117. default:
  118. header('Location: ../' . $pag . '?errorIni=0');
  119. exit;
  120. break;
  121. }
  122. } else{
  123. header('Location: ../' . $pag . '?errorIni=1');
  124. exit;
  125. }
  126. function obtenerDatos($pdo, $user, $pass, $externo){
  127. $situacion = 'error';
  128. $usr = Usuario::datosUsuario($pdo, $user, $pass, $externo);
  129. if (is_null($usr))
  130. $situacion = 'no-validado';
  131. else {
  132. if (count($usr) > 0){
  133. $_SESSION['usuario_id'] = $usr['iduser'];
  134. $_SESSION['usuario_nombre'] = $usr['nombre'];
  135. $_SESSION['usuario_apellidos'] = $usr['apellidos'];
  136. if ($usr['cvepuesto'] == 'ANTERIOR'){
  137. $concurso = new Concurso();
  138. $concurso->getConcursoAnterior($pdo);
  139. $_SESSION['puesto'] = $usr['puesto'] . '(' .$concurso->getNombre() . 'CIDIT)';
  140. } else
  141. $_SESSION['puesto'] = $usr['puesto'];
  142. $_SESSION['icono'] = $usr['icono'];
  143. $situacion = 'ok';
  144. } else {
  145. $situacion = 'no-acceso';
  146. }
  147. }
  148. return $situacion;
  149. }
  150. function agregaUsuarioInterno($pdo,$puestoTxt, $idinterno){
  151. $idusr = 0;
  152. $idusr = Usuario::agregaUsuarioInterno($pdo, $idinterno);
  153. if ($idusr > 0){
  154. $puesto = Usuario::getPuestoXClave($pdo, $puestoTxt);
  155. if (count($puesto) > 0){
  156. if(Usuario::agregaUsuarioPuesto($pdo,$idusr,$puesto['idpuesto'])) {
  157. $rol = Usuario::getIdRol($pdo, $puestoTxt);
  158. if (!Usuario::agregaUsuarioRol($pdo, $idusr, $rol['idrol'], null)){
  159. Usuario::eliminaUsuarioInterno ($pdo, $idusr);
  160. $idusr = 0;
  161. }
  162. } else
  163. Usuario::eliminaUsuarioInterno ($pdo, $idusr);
  164. }
  165. }
  166. return $idusr;
  167. }