/**
  * Dado el username, retorna el api_key.
  * @param $api_key
  * @return mixed string\null. El api_key o NULL si el usuario no existe
  */
 function get_usuario_api_key($api_key)
 {
     $usuarios_ini = toba_modelo_rest::get_ini_usuarios($this->modelo_proyecto);
     foreach ($usuarios_ini->get_entradas() as $username => $u) {
         if (isset($u['api_key']) && $u['api_key'] === $api_key) {
             return $username;
         }
     }
     rest::app()->logger->info("No se encontro 'api_key = {$api_key}' para ningún usuario de rest_usuarios.ini");
     return NULL;
 }
 static function conectar($id_servicio, $opciones = array(), $proyecto = null)
 {
     if (!isset($proyecto)) {
         $proyecto = toba_editor::activado() ? toba_editor::get_proyecto_cargado() : toba::proyecto()->get_id();
     }
     self::get_modelo_proyecto($proyecto);
     $ini = toba_modelo_rest::get_ini_cliente(self::$modelo_proyecto, $id_servicio);
     $opciones_ini = $ini->get_datos_entrada('conexion');
     //Convierte todos los '1' de texto en true
     foreach (array_keys($opciones_ini) as $id_opcion) {
         if ($opciones_ini[$id_opcion] === '1' || $opciones_ini[$id_opcion] === 1) {
             $opciones_ini[$id_opcion] = true;
         }
     }
     //-- Mezcla con las opciones recibidas y crea el objeto
     $opciones = array_merge($opciones_ini, $opciones);
     if (!isset($opciones['to'])) {
         throw new toba_error_def("Debe indicar la URL destino en el campo 'to'");
     }
     toba::logger()->debug("Invocando servicio {$id_servicio}. Opciones:<br>" . var_export($opciones, true));
     $servicio = new toba_servicio_web_cliente_rest($opciones, $id_servicio);
     return $servicio;
 }
Exemple #3
0
 protected function get_conf()
 {
     if (!isset($this->conf_ini)) {
         $this->conf_ini = toba_modelo_rest::get_ini_server($this->get_modelo_proyecto());
     }
     return $this->conf_ini;
 }
 protected function preProvideApi(Provision $feature)
 {
     $optionsFijas = $feature->getOptions();
     $autoconfigurar = isset($optionsFijas) && isset($optionsFijas['auto-configurar']) && $optionsFijas['auto-configurar'];
     $options = array();
     $modeloProyecto = $this->getModeloProyecto();
     $iniServer = \toba_modelo_rest::get_ini_server($modeloProyecto);
     $iniUsuarios = \toba_modelo_rest::get_ini_usuarios($modeloProyecto);
     if ($autoconfigurar && !$iniServer->existe_entrada("autenticacion")) {
         echo "Autoconfigurando API...";
         $iniServer->agregar_entrada("autenticacion", "digest");
         $iniServer->guardar();
     }
     if ($autoconfigurar && empty($iniUsuarios->get_entradas())) {
         $iniUsuarios->agregar_entrada($this->getProyectoId(), array("password" => md5(uniqid(rand(), true))));
         $iniUsuarios->guardar();
     }
     if ($iniServer->existe_entrada("autenticacion")) {
         $options['auth']['type'] = $iniServer->get_datos_entrada("autenticacion");
     }
     //TODO: esta tomando el primer usuario y lo manda. Es totalmente inseguro, esto tiene que ir hacia un modelo clave privada/crt
     $usuarios = $iniUsuarios->get_entradas();
     if (!empty($usuarios)) {
         foreach ($usuarios as $usuario => $datos) {
             $options['auth']['userId'] = $usuario;
             $options['auth']['userPass'] = $datos['password'];
             break;
         }
     }
     $endpoint = $this->getProyectoUrl() . '/rest/';
     if (isset($_SERVER['DOCKER_NAME'])) {
         //HACK: en el caso de docker la IP interna difiere de la externa. Se trata de sacar con la variable DOCKER_NAME
         $parts = parse_url($endpoint);
         if (isset($parts['host'])) {
             $parts['host'] = $_SERVER['DOCKER_NAME'];
         }
         if (isset($parts['port'])) {
             unset($parts['port']);
         }
         $endpoint = unparse_url($parts);
     }
     $feature->setEndpoint($endpoint);
     $feature->setOptions($options);
 }