jueves, 8 de abril de 2021

Oh my posh!! v3 - Custom Theme

The following is a simple json file used to customize your command prompt

 

First you need install Oh My Posh Powershell module, the complete guide is https://ohmyposh.dev/ official site

once installed you you can import custom theme



Once you're done, adjust your $PROFILE replace the default prompt with yours own theme, put as last command of $profile file the command:

Set-PoshPrompt -Theme ~/.mytheme.omp.json

Below is the mytheme.omp.json file content, save the file in the folder used in the previous command

More details how customize your own prompt Oh-My-Posh Git repo


viernes, 1 de noviembre de 2019

Create Azure Table Storage Signature with PostMan and Javacript



To create a valid signature to consume Azure Table Storage Rest API, the following JavaScript code snippet may be included in as pre-request script.


var CryptoJS = require("crypto-js");
var account = "=== your account name ===";
var AuthSchema = "Sharedkey";
var key = "== your signature base 64 string==";
var verb = "GET";
var today = new Date();
var gmt = today.toUTCString();
var requestUrl = pm.request.url.path.toString();
requestUrl = "/" + requestUrl.replace(/\'/gi,"%27").replace(/\|/gi,"%7C") ;
var contentMD5 ="";
var ContentType = "";

console.log("Date :  " + gmt);
pm.environment.set("GMT", gmt);

var keybyte = CryptoJS.enc.Base64.parse(key);
console.log("using Key: "  + keybyte);
console.log("Account " + account);
console.log("requestUrl " + requestUrl);

var resourceString = "/" + account + requestUrl ;

var StringToSign =  verb +
                   "\n" + contentMD5 + 
                   "\n" + ContentType +
                   "\n" + gmt + 
                   "\n" + resourceString;

var signatureBytes = CryptoJS.HmacSHA256(StringToSign, keybyte);
base64HashHMACValue = CryptoJS.enc.Base64.stringify(signatureBytes)
signature = AuthSchema +  " " +  account + ":" +  base64HashHMACValue;
pm.environment.set("signature",   signature);



miércoles, 30 de octubre de 2019

Notas de implementación de BizTalk 2016 Alta Disponibilidad con SQL AlwaysOn AG

Hace mucho tiempo me toco implementar BizTalk Server 2016 en alta disponibilidad usando la nueva opción AlwaysOn AG, para lograr esta tarea seguí las instrucciones proporcionadas por microsoft acá quiero incluir los pasos mas importantes y las consideraciones a tener en cuenta.

todo esto bajo el supuesto que para la implementación se utilizará Windows 2016 y SQL Server 2016

Preparación Windows


  1. Buscar y aplicar todas las actualizaciones pendientes
  2. Habilitar network Access de MSDTC
  3. Configurar Network Access MSDTC en todas las maquinas de la misma forma

Preparación BizTalk

  1. Instalar Microsoft Visual C++ 2013 Redistributable Package

Preparación SQL

  1. Instalar y configurar Windows Clúster Service usando azure como withness


Ya con los pre-requisitos completados lo primero a hacer es instalar SQL Server y habilitar AlwaysOn Availability Groups, debido a restricciones relacionadas con las el coordinador de transacciones es necesario contar con a lo menos 4 instancias para garantizar la transaccional entre las bases de datos.


Post Instalación

debido a un problema en el driver ODBC13 el SQL Server Agent falla al iniciar por lo que es necesario instalar la actualización del connector, problema descrito en este articulo




Enabling Boomi HTTP debugging traffic with Fiddler




This is my first post in English, the following procedure is to use fiddler as HTTP proxy debugging tool.

1)  Install fiddler, download from https://www.telerik.com/fiddler

2) set up to decode https traffic, as show in the picture


3) Export fiddler certificated



4) import certificated into Boomi  CAcert VM storage, using the command

 keytool -import -alias fiddler -file ".\FiddlerRoot.cer" -keystore "<<..\Java\jre8\lib\security\cacerts>>" -storepass changeit

5) edit the atom.vmoptions file adding the following options.

-Dhttp.proxyHost=localhost
-Dhttp.proxyPort=8888
-Dhttps.proxyHost=localhost
-Dhttps.proxyPort=8888

6) restart the Atom, and done!

jueves, 3 de agosto de 2017

Relay Service Bus Authorization Header

Para poder hacer un llamado al service bus de azure a un endpoint con seguridad por token, debemos configurar las header de autenticación, esta requiere de una firma la debemos calcular con el siguiente código.


using System;
using System.Globalization;
using System.Security.Cryptography;
using System.Text;
using System.Web;

    class Program
    {

        static void Main(string[] args)
        {

           string resourceUri = System.Console.ReadLine();

           string keyName= System.Console.ReadLine();

           double duration = System.Convert.ToDouble(System.Console.ReadLine());

           TimeSpan sinceEpoch = DateTime.UtcNow - new DateTime(1970, 1, 1);
           string dur = Convert.ToString((int)sinceEpoch.TotalSeconds + (durationInSeconds??60*60*365));
           string stringToSign = HttpUtility.UrlEncode(resourceUri) + "\n" + dur;
           HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key));

           var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
           var sasToken = String.Format(CultureInfo.InvariantCulture, "SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}",
           HttpUtility.UrlEncode(resourceUri), HttpUtility.UrlEncode(signature), expiry, keyName);
           System.Console.WriteLine(sasToken);
          }
         }


luego en el soapui agregamos la cabecera ServiceBusAuthorization con el valor calculado.


martes, 1 de agosto de 2017

Habitar relay endpoint usando BizTalk Custom Adapter

Introducción

Una de las interesantes características de BizTalk es la habilidad de usar WCF para realizar la publicación de servicios.

Esto junto a la capacidad de WCF de publicar servicios relay nos permite habilitar aplicaciones híbridas, las que exponen sus extremos en la nube de forma segura y el procesamiento de los mensajes se realiza de forma local sin tener que realizar mayores configuraciones en las redes corporativas.

BizTalk Server cuenta con un conjunto de adaptadores out-the-box que realizan el trabajo, WCF-BasicHttpRelayWCF-NetTcpRelay.


Problema

Se requiere que un servicio BizTalk retorne una excepción personalizada, lo que requiere agregar al endpoint un componente que implemente la interface IErrorHandler lo que permite el manejo personalizado de la excepción retornada al cliente, un ejemplo de esto en el blog - How to Throw Typed Fault Exceptions from Orchestrations Published as WCF Services.
Este enpoint, que implementa este comportamiento especifico, debe ser publicado usando un WCF Relay, por lo que es necesario agregar a la pila de componentes utilizados en el endpoint relay el manjedador de errores personalizado, lo que no es posible, la única opción es utilizar uno de los adaptadores custom disponibles, el problema es que estos adaptadores custom no tienen disponibles los bindings relays necesarios para la configuración del enpoint en el service bus.

Solución

Lo primero que debemos hacer es obtener la dll que implementa los bindings que vamos a utilizar, estos binding se encuentran contenidos en el paquete nuget WindowsAzure.ServiceBus una vez que hemos obtenido los componentes necesitamos registarlos en la GAC, en este paso tenemos dos opciones usamos el comando gacutil o los agregamos como recurso a BizTAlk marcando durante la importación el registro en la GAC.

una vez registrado los componentes necesarios en la GAC, el siguiente paso es realizar el registro de las extensiones en los archivos de configuración machine,config, BTSNTSvc.exe.config y BTSNTSvc64.exe.config

la configuración a incluir es la siguiente

<system.serviceModel>
<extensions>
<behaviorExtensions>

<add name="btsWsdlExporter" type="Microsoft.BizTalk.Adapter.Wcf.Metadata.BtsWsdlExporterElement, Microsoft.BizTalk.Adapter.Wcf.Runtime, Version=[VERSION], Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="transportClientEndpointBehavior" type="Microsoft.ServiceBus.Configuration.TransportClientEndpointBehaviorElement, Microsoft.ServiceBus, Version=[VERSION], Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="serviceRegistrySettings" type="Microsoft.ServiceBus.Configuration.ServiceRegistrySettingsElement, Microsoft.ServiceBus, Version=[VERSION], Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

</behaviorExtensions>
<bindingExtensions>
<add name="netTcpRelayBinding" type="Microsoft.ServiceBus.Configuration.NetTcpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=[VERSION], Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="ws2007HttpRelayBinding" type="Microsoft.ServiceBus.Configuration.WS2007HttpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=[VERSION], Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="basicHttpRelayBinding" type="Microsoft.ServiceBus.Configuration.BasicHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=[VERSION], Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="webHttpRelayBinding" type="Microsoft.ServiceBus.Configuration.WebHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=[VERSION], Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</bindingExtensions>
</extensions>
</system.serviceModel>

Una vez registrados las extensiones, ya podemos realizar la configuración de la receive location, a modo de ejemplo utilizaremos en este caso el adaptador WCF-Custom.


Lo primero es aprovisionar en el portal de azure el servicio Relay, la forma mas sencilla es realizar la busqueda mediante la palabra Relay.



lo que nos permitirá crear en namespace con las opciones dedicadas al hospedaje de servicios relays y conexiones híbridas.


una vez aprovisionado el namespace procedemos a realizar la configuración del receive location, para esto desde la consola de administración de BizTalk debemos agregar un nuevo request-response receive port, dentro de este receive port agregamos una nueva recceive location de tipo WCF-Custom.


En la configuración del adaptador debemos poner da URl del extremo que estamos configurando ej:
https://MyPoCService.servicebus.windows.net/myendpoint/myservice.svc.


El siguiente paso es seleccionar el binding que utilizaremos, de la lista de relays disponibles utilizaremos para este ejemplo basicHttpRelayBinding.


Para el ejemplo publicaremos el servicio en el bus de servicios sin seguridad, por defecto el binding utiliza la opción RelayAccessToken la que implementa la seguridad en el lado del cliente.



El siguiente paso es agregar y configurar las behaviors que el servicio utilizará, como service Behavior agregaremos:


  • ServiceThrotting
  • CustomErrorHandler (componente personalizado de manejo de excepciones - opcional)

y como endpoint behaviors agregaremos


  • TransporClientEndpointBehavior
  • ServiceRegistrySettings

A continuación, revisaremos solo la configuración de los componentes agregados en la sección endpoints behavior.

lo primero a revisar es el componente TransporClientEndpointBehavior en este componente debemos agregar los valores que obtenemos desde el portal bajo la opción Shared access policies.



Tal como se muestra en la figura.


El segundo componente a revisar es ServiceRegistrySettings en donde debemos especificar el modo de registro, en este caso seleccionaremos Public.

ya realizada la configuración iniciamos la receive location, si todo anda bien en el portal deberemos ver el endpoint registrado.




miércoles, 26 de julio de 2017

Como lanzar excepciones personalizadas desde BizTalk

Acá un articulo que me fue de mucha utilidad, en el se describe como hacer que BizTalk retorne una excepción personalizada.


https://blogs.msdn.microsoft.com/paolos/2009/05/22/how-to-throw-typed-fault-exceptions-from-orchestrations-published-as-wcf-services/


el proceso no es nada de sencillo, y requiriere construir algunas piezas, en el articulo se ofrece en código fuente utilizado para la prueba de concepto descrita, que es un buen punto de inicio.