public function get_usuario(request $request = null) { $api_key = $request->get('api_key', ''); $username = $this->api_keys->get_usuario_api_key($api_key); if ($username !== null) { $usuario = new rest_usuario(); $usuario->set_usuario($username); return $usuario; } if (isset($api_key)) { $this->mensaje = "No se encontro usuario para '?api_key={$api_key}'"; } else { $this->mensaje = 'Debe proveer una api_key en la URL ?api_key='; } return; //anonimo }
/** * Obtiene un usuario si está logueado o si lo puede obtener del request o cualquier otro medio. * Si el usuario es nulo, se puede llegar a llamar a requerir_autenticacion (si la operacion lo requiere). * En caso de errores, guardarlos y enviarlos en la respuesta. * * @param request $request * * @return rest_usuario el usuario logueado o null si es anonimo */ public function get_usuario(request $request = null) { $auth_header = $request->headers('HTTP_AUTHORIZATION', null); if ($auth_header === null) { return; } $well_formed_header = preg_match('/Bearer (.+)/i', $auth_header, $result); if ($well_formed_header === 0 || $well_formed_header === false) { return; } $token = $result[1]; $info = $this->decoder->decode($token); if ($info === null) { return; } $usuario = new rest_usuario(); $usuario->set_usuario($info->get_user_id()); $usuario->set_perfiles($info->get_scopes()); return $usuario; }
public function __construct($settings = array()) { self::$instancia = $this; // $this->autoload(); $this->container = new Set(); $this->container['settings'] = array_merge(static::get_default_settings(), $settings); // Request default $this->container->singleton('request', function ($c) { $req = new request(); $req->set_encoding_datos($c['settings']['encoding']); return $req; }); // Respuesta default $this->container->singleton('response', function ($c) { $respuesta = new respuesta_rest(); $respuesta->set_encoding_datos($c['settings']['encoding']); $respuesta->set_api_version($c['settings']['api_version']); return $respuesta; }); // Ruteador default $this->container->singleton('router', function ($c) { $r = new ruteador($c->lector_recursos, new rest_instanciador()); return $r; }); // Proveedor de autenticacion --> SE DEBE INDICAR UNO EXTERNAMEN $this->container->singleton('autenticador', function ($c) { throw new rest_error_interno("Se debe indicar un autenticador que provea los usuarios del negocio"); }); // Proveedor de autorizacion $this->container->singleton('autorizador', function ($c) { $autorizador = new autorizacion_anonima(); return $autorizador; }); // Firewall default $this->container->singleton('firewall', function ($c) { $autorizador = new firewall($c->autenticador, $c->autorizador, $c->settings['url_protegida']); return $autorizador; }); // Logger $this->container->singleton('logger', function ($c) { return new logger_vacio(); }); $this->container->singleton('lector_recursos', function ($c) { return new lector_recursos_archivo($c['settings']['path_controladores'], $c['settings']['prefijo_controladores']); }); $this->container->singleton('controlador_documentacion', function ($c) { return new controlador_docs($c['settings']['path_controladores'], $c['settings']['url_api']); }); // Vistas default $this->container->singleton('vista', function ($c) { $formato = $c['settings']['formato_respuesta']; $respuesta = $c['response']; switch ($formato) { case 'json': return new vista_json($respuesta); case 'xml': return new vista_xml($respuesta); } }); }