Esta entrada es para aquellos que están empezando a trabajar con bots para telegram y que estén teniendo problemas para que su bot reciba los mensajes después de configurar los parámetros de webhook.
La información se encuentra disponible en la documentación de Telegram, sin embargo, entre tanto paso uno se pierde, porque vi más de una pregunta sobre lo mismo: configurar webhook con certificado local, probar procesar mensajes y que no pase nada. El resumen del problema es que el certificado está mal publicado y no nos enteramos :P
Acá un resumen de lo que se debe hacer y cómo dejar el bot funcionando :)
1) Eliminar la asociación anterior del webhook para configurar de nuevo
curl -F "url=" https://api.telegram.org/bot[TOKEN_ID]/setWebhook
Donde "[TOKEN_ID]" obviamente corresponde al token asociado a al bot que se está configurando.
2) Crear el certificado digital con formato PEM para el servidor que se está utilizando y utilizar ese archivo para la navegación https.
En mi caso lo dejé a 3 años ya que es seguro que un año pasa volando, pero eso depende del gusto de cada uno.
openssl req -newkey rsa:2048 -sha256 -nodes -keyout server.key -x509 -days 1095 -out server.pem -subj "/CN=tu.dominio.cl/C=CL/ST=Santiago/L=Santiago"
Acá lo importante es el campo CN dado que debe coincidir con el nombre del servidor para el cual se está creando el certificado. Si ese parámetro está incorrecto, no se validará la navegación entre servidores y el bot no recibirá nada (punto a validar).
3) Asociar el certificado al bot.
curl -F "url=https://tu.dominio.cl/ruta/bot.php" -F "certificate=@/ruta_local/del/archivo/server.pem" https://api.telegram.org/bot[TOKEN_ID]/setWebhook
url = la ruta pública al código del bot.
certificate = ruta del archivo server.pem en el servidor (ruta local).
Si la ruta local del archivo .pem está incorrecta, y a pesar de que el registro del webhook diga que fue exitoso, no se validará la navegación entre servidores y el bot por lo que tampoco se recibirán los mensajes.
4) Revisar el estado del bot en Telegram para confirmar que el certificado está correctamente publicado y funcionando.
https://api.telegram.org/bot[TOKEN_ID]/getwebhookinfo
Si todo va bien, ahí aparecerá que se está utilizando un certificado de forma correcta.
has_custom_certificate: true
En caso de ir algo mal con el certificado, aparecerá un mensaje en ese parámetro. De ser así revisar los puntos marcados con rojo en los pasos anteriores y que coincidan con los valores reales de nombre, token y servidor.
Ahí lo tienen, luego de corregir el detalle del certificado y la ruta, quedará funcionando sin problemas :)
Algo a comentar es que si estuvieron haciendo pruebas enviando mensajes durante un rato y luego de que la configuración queda correcta, empezarán a recibir respuesta por todos esos mensajes de prueba que enviaron ya que quedan en cola en el servidor de Telegram por 24hrs :P.
NOTA:
Asociado al punto 3, aparte de asociar el certificado al bot, debe utilizarse ese certificado en la navegación https del servidor. Para activar la navegación https, si se está usando
apache lo práctico es usar la ruta oficial, en ese caso sería dejar los
archivos server.key y server.pem en /etc/apache2/ssl, además de cargar
esa ruta en el archivo de configuración
/etc/apache2/sites-available/default-ssl.conf con los siguientes
parámetros:SSLCertificateFile /etc/apache2/ssl/server.pem
SSLCertificateKeyFile /etc/apache2/ssl/server.key
Referencias:
https://core.telegram.org/bots/webhooks#a-self-signed-certificate
http://snakelab.cc/2016/10/28/telegram_gem_and_self_signed_cert.html
Tecnología, seguridad informática, legislación, anime y manga... entre otras cosas
domingo, 23 de diciembre de 2018
jueves, 4 de enero de 2018
Acceder a cuenta de usuario en Windows sin tener la contraseña
Tal como dice el título de esta entrada, es posible acceder a una cuenta de usuario en Windows sin tener la contraseña, pero no mágicamente :P, para esto el usuario debe haber abierto sesión en el computador. Da lo mismo si el usuario bloqueó el computador, de todas formas es posible acceder a su sesión tal como la dejó, con aplicaciones abiertas y todo. Este acceso es posible haciendo uso de la elevación de privilegios de sistema desde una cuenta administrativa.
Según Microsoft (MS) esto no es una "falla de seguridad" ya que es necesario tener permisos de administrador para poder acceder a la cuenta del usuario, sin embargo, esto sí es un "riesgo de seguridad" si lo vemos desde el enfoque de separación de perfiles. Por ejemplo: un usuario X puede tener acceso a un sistema de remuneraciones al cual un administrador de sistemas no necesariamente debe tener acceso, pero podría acceder en algún momento en que el usuario X deje su computador libre o lo bloquee para ir a hacer alguna otra tarea.
Dicho lo anterior, la forma de acceder es usando el programa psexec (parte del kit "pstools" de MS) para ejecutar el administrador de tareas con permisos de sistema y desde ahí simplemente dar clic derecho sobre el usuario X en la pestaña "usuarios" y presionar "Conectar"... Tan sencillo como suena :/
Acá el detalle:
- Ingresar a Windows con la cuenta administrativa sin cerrar ninguna otra cuenta abierta, sólo presionar "Iniciar sesión con otro usuario" o "cambiar de usuario".
- Abrir el administrador de tareas para ver el ID del usuario propio (el ID de la cuenta administrativa).
--> En el caso de Windows 10 el ID no aparece por defecto, hay que dar clic derecho en los títulos y activar la columna "ID" para que se muestre. En Windows 7 el ID aparece por defecto.
- Abrir consola como administrador y ejecutar el comando: psexec \\localhost -s -i 2 taskmgr
--> Donde el número "2" corresponde al ID del usuario administrativo y no al del usuario al que se le secuestrará la cuenta. Ahí se debe poner el ID que corresponda, en este ejemplo es 2 (ver imagen de más abajo).
- Con el comando anterior se abrirá el administrador de tareas, pero con permisos de sistema, por lo que ahora se puede abrir la sesión del usuario X dando clic derecho sobre su nombre en la pestaña "Usuarios" y listo!
Tal como muestra la imagen esto es más largo de explicar que de hacer xD.
Al dar "Conectar" no aparecerá ninguna ventana pidiendo credenciales del usuario, simplemente se abrirá su escritorio tal como si hubieran desbloqueado el equipo.
Teniendo esto en mente, a revisar el log de windows (sección "Seguridad") con mayor frecuencia para ver si hay accesos "autorizados" en horarios incorrectos ;)
Referencias:
PSTools - https://docs.microsoft.com/en-us/sysinternals/downloads/pstools
Hack Windows User Account - https://thehackernews.com/2017/03/hack-windows-user-account.html
jueves, 6 de abril de 2017
Revisar reinicios de windows
Algunas veces al revisar un servidor o computador es necesario ver rápidamente cuándo y quién realizó un reinicio de sistema. Esto es posible de ver directo desde el visor de eventos de windows sin tener que instalar o ejecutar un programa aparte. La forma de hacerlo:
Abrir eventvwr.msc
Ir a Windows Logs > System
Abrir "Filter Current Log..." (si no está el menú, se puede dar clic derecho sobre System)
Agregar número de ID a filtrar: 1074
Presionar ok y listo!
La explicación es más larga que los pocos clics que se deben hacer :P
Esto de paso nos da un indicador de la frecuencia (alta o baja) con la que se está reiniciando una máquina.
domingo, 10 de agosto de 2014
SSRS Listar valores de un Dataset en cuadro de texto
Acá otra entrada sobre SSRS, ya que en estos días estoy elaborando algunos reportes SSRS aprovecho y apunto los detalles de los que me ha costado encontrar información.
Para listar todos los valores de un campo en un cuadro de texto en una sola línea se debe utilizar el siguiente comando:
=Join(LookupSet(1,1, Fields!Campo1.Value, "Dataset1")," , ")
Con lo anterior, se mostrarán "todos" los valores del Campo1 en Dataset1 separados por el delimitador ",".
Para listar todos los valores de un campo en un cuadro de texto en una sola línea se debe utilizar el siguiente comando:
=Join(LookupSet(1,1, Fields!Campo1.Value, "Dataset1")," , ")
Con lo anterior, se mostrarán "todos" los valores del Campo1 en Dataset1 separados por el delimitador ",".
SSRS Suma condicional en cuadro de texto
Después de un buen rato de estar buscando información sobre mi error sumando valores de un campo y estar cambiando de formatos los números, encontré una solución que ayuda en la mayoría de los casos (hasta ahora en todos los que he probado), así que me animo a escribir por si alguien más está estancado con esto :)
Para simular un contador de las filas que cumplen una condición (nuestro filtro), valor que queremos en un cuadro de texto, la fórmula sería así:
=SUM( iif(Fields!Campo1.Value = "Algo", 1, 0), "Dataset1" )
Eso contará todas las filas de DataSet1 donde el campo llamado Campo1 es igual al texto "Algo". Fácil no? Y qué pasa si quiero sumar un valor de la misma fila? También se puede, sólo hay que indicar el campo a sumar:
=SUM( iif(Fields!Campo1.Value = "Algo", Fields!Campo2.Value, 0), "Dataset1" )
Donde Campo2 contiene números.
Pero acá es donde nos podemos topar con el error:
Para simular un contador de las filas que cumplen una condición (nuestro filtro), valor que queremos en un cuadro de texto, la fórmula sería así:
=SUM( iif(Fields!Campo1.Value = "Algo", 1, 0), "Dataset1" )
Eso contará todas las filas de DataSet1 donde el campo llamado Campo1 es igual al texto "Algo". Fácil no? Y qué pasa si quiero sumar un valor de la misma fila? También se puede, sólo hay que indicar el campo a sumar:
=SUM( iif(Fields!Campo1.Value = "Algo", Fields!Campo2.Value, 0), "Dataset1" )
Donde Campo2 contiene números.
Pero acá es donde nos podemos topar con el error:
domingo, 20 de abril de 2014
Solydx: Problemas en la instalación
Estoy probando una nueva distro en mi antiguo netbook para revivirlo y aprovechar que existe :D, después de buscar algunas que fueran estables, no tan pequeñas, con buen rendimiento, bajo consumo de recursos, etc. Opté por probar "SolydX" que ya de plano me gustó que detectara de inmediato la tarjeta inalámbrica, lo que no me sucedió con otras opciones que probé.
Como la mayoría de las distro, SolydX tiene la versión live que puede ser instalada de forma rápida presionando el botón de "Install SolydX" que está en el escritorio. Y es aquí donde empieza el detalle que inspiró esta publicación :P
Ya que el netbook no tiene lector de CD/DVD, opté por usar mi pendrive que está configurado con varias distribuciones y herramientas booteables, si ya tengo eso qué mejor que agregar SolydX a la lista no? Teniendo lista la distro en el pendrive, manos a la obra!
- Encender, ejecutar SolydX, presionar "Install SolydX xx-bit" (en mi caso es 32 bit).
- Configurar idioma, teclado, particiones y a instalar se ha dicho.
Aquí el problema, luego de esperar algunas horas... sí, esperé horas creyendo que era un problema de rendimiento ^^U... la ventana de instalación se quedó congelada en la parte de "Calculating File Indexes". Después, creyendo que era un problema de hardware, revisé RAM, HD, etc. también revisé archivos de instalación y nada.
Para este caso, lo mejor es ejecutar el instalador desde consola:
Con eso se puede ir viendo qué está haciendo el instalador y cuál es realmente el problema.
Cuál no sería mi sorpresa al encontrar que el problema parecía ser algún archivo faltante:
Como la mayoría de las distro, SolydX tiene la versión live que puede ser instalada de forma rápida presionando el botón de "Install SolydX" que está en el escritorio. Y es aquí donde empieza el detalle que inspiró esta publicación :P
Ya que el netbook no tiene lector de CD/DVD, opté por usar mi pendrive que está configurado con varias distribuciones y herramientas booteables, si ya tengo eso qué mejor que agregar SolydX a la lista no? Teniendo lista la distro en el pendrive, manos a la obra!
- Encender, ejecutar SolydX, presionar "Install SolydX xx-bit" (en mi caso es 32 bit).
- Configurar idioma, teclado, particiones y a instalar se ha dicho.
Aquí el problema, luego de esperar algunas horas... sí, esperé horas creyendo que era un problema de rendimiento ^^U... la ventana de instalación se quedó congelada en la parte de "Calculating File Indexes". Después, creyendo que era un problema de hardware, revisé RAM, HD, etc. también revisé archivos de instalación y nada.
Para este caso, lo mejor es ejecutar el instalador desde consola:
gksudo live-installer
Con eso se puede ir viendo qué está haciendo el instalador y cuál es realmente el problema.
Cuál no sería mi sorpresa al encontrar que el problema parecía ser algún archivo faltante:
[...]
-- Installation started
Base filesystem does not exist! Critical error (exiting)
domingo, 30 de marzo de 2014
Java: Creando archivos .CSV para Excel
Muchas veces es necesario exportar datos a un archivo para que sea manipulado en Excel por los usuarios. En esos casos, lo más rápido es exportar a archivos delimitados por coma (.CSV) ya que en realidad son simples archivos de texto con un delimitador (coma "," o punto-y-coma ";").
Cuando se trabaja con Java, una forma rápida de crear archivos cuando ya se tiene el texto en un String, es simplemente crear una variable FileWriter y escribir con el método "write" nuestro String, eureka! ya tenemos nuestro archivo.
Hasta ahí todo bien, pero el problema comienza cuando agregamos caracteres especiales, como por ejemplo letras con tildes (á, é, etc). Por defecto al escribir usando FileWriter la codificación utilizada es UTF-8, lo que está bien para agregar caracteres especiales, sin embargo, cuando el programa Excel abre uno de estos archivos no es capaz de reconocer la codificación correcta mostrando de forma errónea los caracteres especiales.
Para corregir esto, una forma fácil es agregar el caracter BOM al momento de comenzar escribir el archivo.
La forma de hacerlo:
FileWriter fwriter = new FileWriter(nombreArch);
fwriter.write('\ufeff');
fwriter.write("El resto del texto");
Y taraaannn! ahora Excel reconoce de forma correcta la codificación del archivo y por ende muestra todos los caracteres como corresponde :D
En el caso de usar OutputFileStream, se recomienda utilizar el constructor donde se especifica la codificación a utilizar.
OutputStreamWriter(OutputStream out, Charset cs)
InputStreamReader(InputStream in, Charset cs)
Eso es todo por ahora, más abajo dejo un ejemplo y algunas referencias.
No olviden comentar si tienen otras formas de corregir lo de la codificación ;)
Cuando se trabaja con Java, una forma rápida de crear archivos cuando ya se tiene el texto en un String, es simplemente crear una variable FileWriter y escribir con el método "write" nuestro String, eureka! ya tenemos nuestro archivo.
Hasta ahí todo bien, pero el problema comienza cuando agregamos caracteres especiales, como por ejemplo letras con tildes (á, é, etc). Por defecto al escribir usando FileWriter la codificación utilizada es UTF-8, lo que está bien para agregar caracteres especiales, sin embargo, cuando el programa Excel abre uno de estos archivos no es capaz de reconocer la codificación correcta mostrando de forma errónea los caracteres especiales.
Para corregir esto, una forma fácil es agregar el caracter BOM al momento de comenzar escribir el archivo.
La forma de hacerlo:
FileWriter fwriter = new FileWriter(nombreArch);
fwriter.write('\ufeff');
fwriter.write("El resto del texto");
Y taraaannn! ahora Excel reconoce de forma correcta la codificación del archivo y por ende muestra todos los caracteres como corresponde :D
En el caso de usar OutputFileStream, se recomienda utilizar el constructor donde se especifica la codificación a utilizar.
OutputStreamWriter(OutputStream out, Charset cs)
InputStreamReader(InputStream in, Charset cs)
Eso es todo por ahora, más abajo dejo un ejemplo y algunas referencias.
No olviden comentar si tienen otras formas de corregir lo de la codificación ;)
Suscribirse a:
Entradas (Atom)
Tweet -
