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
 }
Beispiel #2
0
 /**
  * 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;
 }
Beispiel #3
0
 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);
         }
     });
 }