Agregando un repositorio privado de GitHub a Composer

Composer

Como agregar un repositorio privado de github a nuestro proyecto utilizando composer para manejar los repositorios usando el token oauth.

Hace poco que tengo algunos proyectos privados en GitHub ya que estaba bastante acostumbrado a usar Bitbucket para esto. La razón de la migración es que había tenido problemas con la carga de las librerías privadas usando Composer desde Bitbucket así que le di una oportunidad a GitHub.

Para los que no saben Composer es repositorio de librerías para php que maneja las dependencias de tus proyectos. Es bastante útil para no reusar código y manejar las actualizaciones de todas tus aplicaciones simplemente con un «Update».

De manera simple se crea un archivo composer.json en donde está la información básica del proyecto y sus dependencias.

Para poder agregar un repositorio privado necesitamos lo siguiente.

  1. Generar el Token para el acceso desde GitHub
  2. Crear el composer.json que usará el repositorio privado
  3. Agregar nuestro token.
  4. Installar las dependencias.

Leer más

Yii2 Implementando Access Token para Autenticación REST

Los métodos de autenticación son los que nos permiten saber si un usuario pertenece a un sistema o no, generalmente cuando accedemos a algunas de nuestras cuentas de correo, facebook, etc lo que nosotros hacemos es autenticarnos con el servicio con nuestro usuario y clave. En este caso usaremos un Access Token para poder acceder a la aplicación.

Cuando usamos APIs en general, podemos acceder a la información de un servicio de una manera bastante sencilla. Nos gustaría que esto fuera por personas que tienen al menos una cuenta en el sistema o servicio.

En este caso veremos como implementar un access token para poder autentificarnos con la aplicación sin usar usuario o clave, lo que nos hará más sencillas las consultas.

Si estás leyendo esto lo más probable es que hayas o quieras desarrollar en Yii2 o al menos sepas que es un framework de desarrollo en php que usa MVC.

Yii2 viene por defecto, al menos en la versión avanzada, con un sistema de manejo de usuarios bastante potente. Lo que haremos ahora es simplemente modificar e implementar unos métodos para poder usar además los métodos de autentifícación disponibles en el framework. Ojo, no implementaremos esos métodos con este post.

Asumiendo que vamos a realizar una aplicación en donde un usuario solo tendrá un access token, modificaremos nuestra tabla de usuarios para que contenga además una columna tipo string única que almacenará nuestro token. La llamaremos access_token.

Teniendo la nueva columna nos vamos al modelo de usuario que estamos usando en nuestra aplicación y modificamos la función findIdentityByAccessToken   que se encarga en encontrar el usuario al cual corresponde el Access Token para que se vea como la que tenemos a continuación.

    public static function findIdentityByAccessToken($token, $type = null) {
        return static::findOne(['access_token' => $token]);
    }

Lo que hace es simplemente obtener la identidad del usuario al que corresponda ese Access Token.

Hasta ahora solo tenemos la función que corrobora el token y el usuario, pero no hemos creado el contenido del token. La idea en primera instancia para este caso es que el usuario ya tenga su Access Token al momento de ser creado. Así que agregaremos un método que se ejecutará antes de que el usuario sea creado.

   public function beforeSave($insert) {
        if ($this->isNewRecord) {
            $this->access_token = $this->getUniqueAccessToken();
        }
        return parent::beforeSave($insert);
    }

Con lo anterior designamos al nuevo usuario un Access Token único. Si lo notaron ese método no existe, por lo que debemos crearlo. Si bien la probabilidad de generar un string de largo X aleatorio que sea igual a otro es baja, debemos corroborar que no se repitan.

    private function getUniqueAccessToken() {
        $resultado = md5(Yii::$app->security->generateRandomString() . '_' . time());
        $identity = $this->findIdentityByAccessToken($resultado);
        if ($identity) {
            $resultado = $this->getUniqueAccessToken();
        }
        return $resultado;
    }

En este caso la función anterior se ejecutará hasta que encuentre un valor único con las características dadas. Si bien en este aso estoy usando el md5 de un string aleatorio, ustedes pueden usar otro hash o el string tal cual está.

Con esto ya puedes implementar los distintos métodos de autenticación para métodos REST proporcionados por YII2.

Cómo ejemplo, podríamos obtener la información de un API usando la autenticación por parámetros de la siguiente manera :

http://MIWEB.dev/v1/api/create?access-token=2b166b3d2b822d163244f63db6813792&idFuente=1

¡Mantengamos el contacto!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,

Utilizando el nuevo y gratuito servicio AWS Certificate Manager

Un certificado SSL sirve, dentro de otras cosas, para darle un nivel de seguridad mayor al usuario de una página web al encriptar su contenido. Ahora veremos como utilizar la nueva herramienta gratuita de Amazon la cual crea certificados SSL.

Origen: AWS Certificate Manager

Hace ya un tiempo que me llegó el mail de amazon contándome de esta nueva funcionalidad, pero no fue hasta el día de hoy cuando necesité ocuparla que de verdad me di el tiempo de revisarla.

En la actualidad tener un certificado SSL es una necesidad, especialmente y usas datos personales o simplemente para el envío de contraseñas, ya que además los buscadores privilegian en el ranking las páginas que utilizan este protocolo y disminuyes la probabilidad de que tu sitio pueda ser vulnerado.

A continuación describiremos algunos de los pros y contras de este nuevo servicio.

Leer más

Base de datos de las instituciones financieras de Chile basada en la información del SBIF

Instituciones Financieras Chile – Base de datos de las instituciones financieras de Chile basada en la información del SBIF en SQL, CSV, PHP y JSON

Origen: GitHub – ctala/InstitucionesFinancierasChile: Base de datos de las instituciones financieras de Chile basada en la información del SBIF

Casi todas las cosas que comparto son debido a que no me gusta hacer el mismo trabajo más de una vez. En este caso estoy haciendo un modulo financiero para nuestro sistema ERP para conciliación bancaria, por lo que encontré que era buena idea tener la información de las instituciones bancarias de Chile.

Leer más

Cómo Tener la misma zona horaria en Mysql y PHP

Tener las hora del servidor MySQL y de PHP sincronizadas permite que no tengamos problemas en el análisis de los datos de nuestras aplicaciones y/o sistemas, en especial si uno de los factores de medición dependen de la diferencia de estos tiempos. Acá veremos como tener la misma zona horaria para ambos servicios.

Suele suceder que cuando usamos funciones de Mysql que retornan la hora y además otras por parte de PHP, la hora en ambas no es la misma. Esto es debido a que las configuraciones de ambas no son la misma.

Ambas horas vienen desde la configuración del servidor, pero por defecto ambas están en la zona horaria UTC, así que no importa la hora que tengamos en el servidor, la hora de estos servicios será distinta si no las configuramos de manera adecuada.

A continuación como configurar ambas.

Configurando la zona horaria en el servidor MySQL

Si bien podemos editar directamente el archivo de configuración de MySQL, lo que haremos es crear un archivo distinto que solo posea la definición de la zona horaria. De esta manera evitamos perder esta información por alguna actualización.

  1. Creamos el archivo de configuración en la carpeta conf.d de mysql. Todos los archivos con extensión .conf serán cargados desde aquí.
  2. Definimos el timezone del archivo. Acá puedes usar diferencias horarias, o zonas horarias. Las diferencias horarias son contra UTC que es el : +00:00 .
  3. Reiniciamos el servidor de mysql para actualizar la información.

Si bien puedes usar el editor que quieras, yo usaré  VIM por costumbre.

#vim /etc/mysql/conf.d/date.conf

y en el contenido definimos nuestra zona horaria. En mi caso además de «America/Santiago» podría haber puesto «-03:00».

default_time_zone='America/Santiago'

Ahora reiniciamos el servicio y debería estar funcionando.

# service mysql restart

Para corroborarlo, podemos loguearnos a mysql y ejecutar :

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2016-02-10 12:03:35 |
+---------------------+
1 row in set (0.00 sec)

Configurando la zona horaria en PHP

En este caso si editaremos directamente el archivo php.ini que se encarga de la configuración de php para apache. Si tienes otro servidor simplemente lo haces donde corresponda.

# vim /etc/php5/apache2/php.ini

Buscamos y editamos el siguiente contenido según corresponda :

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "America/Santiago"

Y en este caso reiniciamos el servidor de apache.

# sudo service apache2 restart

Eso sería todo, ahora tu BdD y aplicación web tienen la misma hora :).

¡Mantengamos el contacto!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,