/** * 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; }
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); }