From 402d9faecfdd9c64b446fc2dcb47691f2b7e3260 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20P=C4=99czek?= Date: Tue, 3 Sep 2024 17:02:55 +0200 Subject: [PATCH] Adding support for parameter binding as an input to the in-process extension --- .../PushServiceParameterBindingDataContent.cs | 29 +++++++++++++++++++ .../PushServiceExtensionConfigProvider.cs | 13 ++++++++- .../Constants.cs | 7 +++++ ...ib.Azure.WebJobs.Extensions.WebPush.csproj | 4 +-- 4 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 src/Lib.Azure.WebJobs.Extensions.WebPush/Bindings/PushServiceParameterBindingDataContent.cs create mode 100644 src/Lib.Azure.WebJobs.Extensions.WebPush/Constants.cs diff --git a/src/Lib.Azure.WebJobs.Extensions.WebPush/Bindings/PushServiceParameterBindingDataContent.cs b/src/Lib.Azure.WebJobs.Extensions.WebPush/Bindings/PushServiceParameterBindingDataContent.cs new file mode 100644 index 0000000..50a11b6 --- /dev/null +++ b/src/Lib.Azure.WebJobs.Extensions.WebPush/Bindings/PushServiceParameterBindingDataContent.cs @@ -0,0 +1,29 @@ +using System; + +namespace Lib.Azure.WebJobs.Extensions.WebPush.Bindings +{ + internal class PushServiceParameterBindingDataContent + { + public string PublicKey { get; set; } + + public string PrivateKey { get; set; } + + public string Subject { get; set; } + + public bool AutoRetryAfter { get; set; } + + public int MaxRetriesAfter { get; set; } + + public int? DefaultTimeToLive { get; set; } + + public PushServiceParameterBindingDataContent(PushServiceAttribute attribute, PushServiceOptions options) + { + PublicKey = !String.IsNullOrEmpty(attribute.PublicKeySetting) ? attribute.PublicKeySetting : options?.PublicKey; + PrivateKey = !String.IsNullOrEmpty(attribute.PrivateKeySetting) ? attribute.PrivateKeySetting : options?.PrivateKey; + Subject = !String.IsNullOrEmpty(attribute.SubjectSetting) ? attribute.SubjectSetting : options?.Subject; + AutoRetryAfter = attribute.AutoRetryAfter; + MaxRetriesAfter = attribute.MaxRetriesAfter; + DefaultTimeToLive = attribute.DefaultTimeToLive; + } + } +} diff --git a/src/Lib.Azure.WebJobs.Extensions.WebPush/Config/PushServiceExtensionConfigProvider.cs b/src/Lib.Azure.WebJobs.Extensions.WebPush/Config/PushServiceExtensionConfigProvider.cs index bf40466..04837de 100644 --- a/src/Lib.Azure.WebJobs.Extensions.WebPush/Config/PushServiceExtensionConfigProvider.cs +++ b/src/Lib.Azure.WebJobs.Extensions.WebPush/Config/PushServiceExtensionConfigProvider.cs @@ -1,6 +1,7 @@ using System; using System.Net.Http; using Microsoft.Extensions.Options; +using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Description; using Microsoft.Azure.WebJobs.Host.Config; using Lib.Azure.WebJobs.Extensions.WebPush.Bindings; @@ -8,7 +9,7 @@ namespace Lib.Azure.WebJobs.Extensions.WebPush.Config { - [Extension("PushService")] + [Extension(Constants.PushServiceExtensionName)] internal class PushServiceExtensionConfigProvider : IExtensionConfigProvider { private readonly PushServiceOptions _options; @@ -32,6 +33,7 @@ public void Initialize(ExtensionConfigContext context) bindingAttributeBindingRule.AddValidator(ValidateVapidAuthentication); bindingAttributeBindingRule.BindToInput(typeof(PushServiceClientConverter), _options, _httpClientFactory); + bindingAttributeBindingRule.BindToInput(CreateParameterBindingData); } private void ValidateVapidAuthentication(PushServiceAttribute attribute, Type paramType) @@ -50,5 +52,14 @@ private void ValidateVapidAuthentication(PushServiceAttribute attribute, Type pa throw new InvalidOperationException($"The application server private key must be set either via the {attributeProperty} property or via {optionsProperty}."); } } + + internal ParameterBindingData CreateParameterBindingData(PushServiceAttribute attribute) + { + var pushServiceParameterBindingData = new PushServiceParameterBindingDataContent(attribute, _options); + var pushServiceParameterBinaryData = new BinaryData(pushServiceParameterBindingData); + var parameterBindingData = new ParameterBindingData("1.0", Constants.PushServiceExtensionName, pushServiceParameterBinaryData, "application/json"); + + return parameterBindingData; + } } } diff --git a/src/Lib.Azure.WebJobs.Extensions.WebPush/Constants.cs b/src/Lib.Azure.WebJobs.Extensions.WebPush/Constants.cs new file mode 100644 index 0000000..f6e52b8 --- /dev/null +++ b/src/Lib.Azure.WebJobs.Extensions.WebPush/Constants.cs @@ -0,0 +1,7 @@ +namespace Lib.Azure.WebJobs.Extensions.WebPush +{ + internal static class Constants + { + internal const string PushServiceExtensionName = "PushService"; + } +} diff --git a/src/Lib.Azure.WebJobs.Extensions.WebPush/Lib.Azure.WebJobs.Extensions.WebPush.csproj b/src/Lib.Azure.WebJobs.Extensions.WebPush/Lib.Azure.WebJobs.Extensions.WebPush.csproj index 1ac9cc9..ca3a872 100644 --- a/src/Lib.Azure.WebJobs.Extensions.WebPush/Lib.Azure.WebJobs.Extensions.WebPush.csproj +++ b/src/Lib.Azure.WebJobs.Extensions.WebPush/Lib.Azure.WebJobs.Extensions.WebPush.csproj @@ -3,7 +3,7 @@ This package contains Azure Functions and Azure WebJobs binding extensions for Web Push Protocol based client for Push Service. Azure WebJobs AzureFunctions WebPush Copyright © 2019 - 2024 Tomasz Pęczek - 1.4.1 + 1.5.0 Tomasz Pęczek netstandard2.0 Lib.Azure.WebJobs.Extensions.WebPush @@ -29,7 +29,7 @@ - +