src/Service/AuthClaveUnicaService.php line 204

Open in your IDE?
  1. <?php
  2. // src/Service/ClaveUnicaService.php
  3. namespace App\Service;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Session\Session;
  6. class AuthClaveUnicaService
  7. {
  8.     private $clientId;
  9.     private $urlBase;
  10.     private $secret;
  11.     private $redirect_uri;
  12.     private $redirect_uri_cu;
  13.     private $scope;
  14.     private $state;
  15.     private $userLoginClaveUnica;
  16.     private $accessTokenCU;
  17.     public function __construct(){
  18.         $this->urlBase=$_ENV['CLAVE_UNICA_API_URL'];
  19.         $this->clientId $_ENV['CLAVE_UNICA_API_CLIENT_ID'];
  20.         $this->secret=$_ENV['CLAVE_UNICA_API_SECRET'];
  21.         $this->redirect_uri=$_ENV['CLAVE_UNICA_API_REDIRECT_URI'];
  22.         $this->redirect_uri_cu=$_ENV['CLAVE_UNICA_API_REDIRECT_URI_CU'];
  23.         $this->scope=$_ENV['CLAVE_UNICA_API_SCOPE'];
  24.         $this->accessTokenCU="";
  25.         $this->userLoginClaveUnica = new userLoginClaveUnica();
  26.     }
  27.     public function byPassActive(){
  28.         if ($_ENV['CLAVE_UNICA_BYPASS_ACTIVE']=="true"){
  29.             return true;
  30.         }else{
  31.             return false;
  32.         }
  33.     }
  34.     public function getUrlToLogin(): string
  35.     {
  36.         $this->state mt_rand(1,9999999999);
  37.         $urlClaveUnica $this->urlBase."/openid/authorize?client_id=".$this->clientId."&redirect_uri=".urlencode($this->redirect_uri)."&response_type=code&scope=".$this->scope."&state=".$this->state;
  38.         return $urlClaveUnica;
  39.     }
  40.     public function getUrlToLoginCu(): string
  41.     {
  42.         $this->state 'pu-' . (string) mt_rand(1,9999999999);
  43.         $urlClaveUnica $this->urlBase."/openid/authorize?client_id=".$this->clientId."&redirect_uri=".urlencode($this->redirect_uri)."&response_type=code&scope=".$this->scope."&state=".$this->state;
  44.         return $urlClaveUnica;
  45.     }
  46.     public function getTokenConexionCU($code,$state){
  47.         if ($this->byPassActive()){
  48.             $this->accessTokenCU $_ENV['CLAVE_UNICA_BYPASS_ACCESSTOKENCU'];
  49.             return true;
  50.         }
  51.         $ch curl_init();
  52.         curl_setopt($chCURLOPT_URL$this->urlBase.'/openid/token/');
  53.         curl_setopt($chCURLOPT_POSTtrue);
  54.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  55.         curl_setopt($chCURLOPT_POSTFIELDShttp_build_query(array(
  56.                      'client_id' => $this->clientId,
  57.                      'client_secret' => $this->secret,
  58.                      'redirect_uri' => $this->redirect_uri,
  59.                      'grant_type' => 'authorization_code',
  60.                      'code' => $code,
  61.                      'state' => $state
  62.                      )
  63.         ));
  64.         $result json_decode(curl_exec($ch));
  65.         curl_close($ch);
  66.         if ( isset($result->access_token) ) {
  67.             $this->accessTokenCU $result->access_token;
  68.             return true;
  69.         }else{
  70.             $this->accessTokenCU null;
  71.             return false;
  72.         }
  73.     }
  74.     public function loadUserLoging(){
  75.         if ( isset($this->accessTokenCU) ) {
  76.             $ch curl_init();
  77.             curl_setopt($chCURLOPT_URL$this->urlBase.'/openid/userinfo/');
  78.             curl_setopt($chCURLOPT_POSTtrue);
  79.             curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  80.             curl_setopt($chCURLOPT_HTTPHEADER, array('Content-Type: application/json'"Authorization: Bearer " $this->accessTokenCU ));
  81.             $data json_decode(curl_exec($ch));
  82.             curl_close($ch);
  83.             $this->userLoginClaveUnica->setNombres(implode(' ',$data->name->nombres));
  84.             $this->userLoginClaveUnica->setApellidos(implode(' ',$data->name->apellidos));
  85.             $this->userLoginClaveUnica->setRolNumero($data->RolUnico->numero);
  86.             $this->userLoginClaveUnica->setRolDv($data->RolUnico->DV);
  87.             $this->userLoginClaveUnica->setRolTipo($data->RolUnico->tipo);
  88.             $this->userLoginClaveUnica->setSub($data->sub);
  89.             return true;
  90.         }else{
  91.             return false;
  92.         }
  93.     }
  94.     public function getUrlToLogout(): string
  95.     {
  96.         $url $this->urlBase."/api/v1/accounts/app/logout";
  97.         return $url;
  98.     }
  99.     public function getUserLogin(){
  100.         return $this->userLoginClaveUnica;
  101.     }
  102.     public function getAccessTokenCU(){
  103.         return $this->accessTokenCU;
  104.     }
  105.     public function isValidaSessionCuActiva(
  106.         Request $request
  107.         ){
  108.             if ($this->byPassActive()){
  109.                 return true;
  110.             }
  111.             $session $request->getSession();
  112.             $user_cu $session->get('user_cu');
  113.             $valida=false;
  114.             if (isset($user_cu->token)){
  115.                 if ($user_cu->token!=""){
  116.                     $valida=true;
  117.                 }
  118.             }
  119.             return $valida;
  120.     }
  121.     public function setUserLoginCUEnvToSession(Request $request){
  122.         $session $request->getSession();
  123.         $user_cu = new \stdClass;
  124.         $user_cu->code="";
  125.         $user_cu->state="";
  126.         $user_cu->token="";
  127.         $user_cu->urlToLogout="/logout";
  128.         //$userLogin = $this->getUserLogin();
  129.         $user_cu->nombres=$_ENV['CLAVE_UNICA_BYPASS_NOMBRES'];
  130.         $user_cu->apellidos=$_ENV['CLAVE_UNICA_BYPASS_NOMBRES'];
  131.         $user_cu->rolNumero=$_ENV['CLAVE_UNICA_BYPASS_ROLNUMERO'];
  132.         $user_cu->rolDv=$_ENV['CLAVE_UNICA_BYPASS_ROLDV'];
  133.         $user_cu->rolTipo=$_ENV['CLAVE_UNICA_BYPASS_ROLTIPO'];
  134.         $user_cu->sub=$_ENV['CLAVE_UNICA_BYPASS_SUB'];
  135.         $session->set('user_cu'$user_cu);
  136.         $session->set('is_autentificado_cu'true);
  137.         return true;
  138.     }
  139.     public function setUserLoginCUToSession(Request $request,$urlCallBack){
  140.         $session $request->getSession();
  141.         $user_cu = new \stdClass;
  142.         $user_cu->code=$_GET['code'];
  143.         $user_cu->state=$_GET['state'];
  144.         $user_cu->token=$this->getAccessTokenCU();
  145.         $user_cu->urlToLogout=$this->getUrlToLogout($urlCallBack);
  146.         $userLogin $this->getUserLogin();
  147.         $user_cu->nombres=$userLogin->getNombres();
  148.         $user_cu->apellidos=$userLogin->getApellidos();
  149.         $user_cu->rolNumero=$userLogin->getRolNumero();
  150.         $user_cu->rolDv=$userLogin->getRolDv();
  151.         $user_cu->rolTipo=$userLogin->getRolTipo();
  152.         $user_cu->sub=$userLogin->getSub();
  153.         $session->set('user_cu'$user_cu);
  154.         $session->set('is_autentificado_cu'true);
  155.         return true;
  156.     }
  157.     public function getUserLoginCUToSession(Request $request){
  158.         $session $request->getSession();
  159.         if ($this->byPassActive()){
  160.             if ($session->get('user_cu')==null){
  161.                 $this->setUserLoginCUEnvToSession($request);
  162.                 $session $request->getSession();
  163.             }
  164.         }
  165.         return $session->get('user_cu');
  166.     }
  167.     public function limpiarSession(Request $request){
  168.         $session $request->getSession();
  169.         $session->set('user_cu'null);
  170.         $session->set('is_autentificado_cu'false);
  171.         $session->clear();
  172.         return true;
  173.     }
  174. }
  175. class userLoginClaveUnica {
  176.     private $nombres "";
  177.     private $apellidos "";
  178.     private $rolNumero "";
  179.     private $rolDv "";
  180.     private $rolTipo "";
  181.     private $sub "";
  182.     public function __toString(){
  183.         $stringRetorno="";
  184.         $stringRetorno $stringRetorno.'{';
  185.         $stringRetorno $stringRetorno.'"nombre"": "'.$this->nombres.'", ';
  186.         $stringRetorno $stringRetorno.'"apellidos": "'.$this->apellidos.'", ';
  187.         $stringRetorno $stringRetorno.'"rolNumero": '.$this->rolNumero.'", ';
  188.         $stringRetorno $stringRetorno.'"rolDv": "'.$this->rolDv.'", ';
  189.         $stringRetorno $stringRetorno.'"rolTipo": "'.$this->rolTipo.'", ';
  190.         $stringRetorno $stringRetorno.'"sub": "'.$this->sub.'"';
  191.         $stringRetorno $stringRetorno.'}';
  192.         return $stringRetorno;
  193.     }
  194.     public function getNombres(){
  195.         return $this->nombres;
  196.     }
  197.     public function setNombres($nombres){
  198.         $this->nombres $nombres;
  199.     }
  200.     public function getApellidos(){
  201.         return $this->apellidos;
  202.     }
  203.     public function setApellidos($apellidos){
  204.         $this->apellidos $apellidos;
  205.     }
  206.     public function getRolNumero(){
  207.         return $this->rolNumero;
  208.     }
  209.     public function setRolNumero($rolNumero){
  210.         $this->rolNumero $rolNumero;
  211.     }
  212.     public function getRolDv(){
  213.         return $this->rolDv;
  214.     }
  215.     public function setRolDv($rolDv){
  216.         $this->rolDv $rolDv;
  217.     }
  218.     public function getRolTipo(){
  219.         return $this->rolTipo;
  220.     }
  221.     public function setRolTipo($rolTipo){
  222.         $this->rolTipo $rolTipo;
  223.     }
  224.     public function getSub(){
  225.         return $this->sub;
  226.     }
  227.     public function setSub($sub){
  228.         $this->sub $sub;
  229.     }
  230. }