July 2019

Python – Parametros de funcion en formato JSON

Cuando desarrollamos en python podemos tener una funcion con multiples argumentos.

def addCart( precio, cantidad, producto ):
pass

Si hemos recibido dichos parametros en un objeto JSON o los tenemos guardados en un diccionario, podemos pasarlo directamente. Python, se encargara de asignar a cada parametro la propiedad correspondiete del objeto. Para esto debemos pasar la variable a la funcion anteponiendo dos asteriscos.

addCart(**params)

NGINX – Logging Country Access

Trabajando con NGINX para controlar el acceso de ciertos paises, encontre un modulo GeoIP Country, que nos permite determinar en funcion de la IP el pais de origen de un request.

Al agregarlo en nuestro nginx.conf podemos bloquear facilmente visitas de ciertos paises. Por ejemplo:

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default yes;
RU no; #Rusia
UK no; #Ukrania
CN no; #China
}

Sin embargo, al tenerlo instalado en nginx, tambien podemos hacer uso de la variable $geoip_country para mapear en nuestro access log, de que pais vino el request. Asi el pais no este bloqueado.

Para esto definimos nuestro propio formato en log_format:

log_format main ‘$status $body_bytes_sent $geoip_country_code $sent_http_content_type “$request_method $scheme://$host$request_uri” $http_referer @$remote_addr $http_user_agent ‘;

Y lo aplicamos en la declaracion de access_log:

access_log /var/log/nginx/access.log main;

Y listo, ahora tendremos la informacion del pàis de nuestras peticiones:

200 8938 PE text/html; charset=UTF-8 “GET https://www.mariouriarte.com/?s=react” https://www.mariouriarte.com/?s=nginx @190.202.62.205 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/75.0.3770.90 Chrome/75.0.3770.90 Safari/537.36