Table of Contents

Namespace SESARWebHook.Core.Interfaces

Interfaces

IIntegrationConnector

Interface that all integration connectors must implement. Each connector handles synchronization with a specific external system.

IWebhookHandler

Interface simplifiée pour les clients qui veulent implémenter leur propre webhook handler.

RESPONSABILITÉS :

  • Vous recevez le manifest SESAR déchiffré
  • Vous utilisez nos helpers d'authentification (OAuth2, API Key, etc.)
  • Vous faites vos propres appels API
  • Vous implémentez VOTRE logique d'affaire

CE QUE NOUS GÉRONS :

  • Réception du webhook SESAR
  • Déchiffrement du manifest
  • Helpers d'authentification (OAuth2ClientCredentialsHelper, OAuth2RefreshTokenHelper, ApiKeyHelper)

CE QUE VOUS GÉREZ :

  • Transformation des données vers votre format
  • Appels HTTP vers votre système
  • Logique d'affaire spécifique

EXEMPLE :

public class MyHandler : WebhookHandlerBase
{
    private OAuth2ClientCredentialsHelper _auth;

    public override string HandlerId => "my-handler";
    public override string DisplayName => "My Handler";

    public override void Initialize(Dictionary<string, string> settings)
    {
        base.Initialize(settings);
        _auth = OAuth2ClientCredentialsHelper.ForDynamics365(
            GetRequiredSetting("TenantId"),
            GetRequiredSetting("ClientId"),
            GetRequiredSetting("ClientSecret"),
            GetRequiredSetting("ResourceUrl")
        );
    }

    public override async Task<IntegrationResult> ProcessAsync(
        StoreManifest manifest,
        WebhookContext context)
    {
        // 1. Extraire les données
        var email = GetSenderEmail(manifest);
        var subject = GetSubject(manifest);

        // 2. Obtenir le token (avec notre helper)
        var token = await _auth.GetAccessTokenAsync();

        // 3. Faire votre appel API
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue("Bearer", token);

            var response = await client.PostAsync("https://your-api.com/endpoint",
                new StringContent(JsonConvert.SerializeObject(new {
                    email, subject
                })));

            if (response.IsSuccessStatusCode)
                return IntegrationResult.Ok("Success");
            else
                return IntegrationResult.Fail("Error", await response.Content.ReadAsStringAsync());
        }
    }
}