mirror of
https://github.com/bitwarden/server.git
synced 2025-06-11 13:40:34 -05:00

* Allow for binning of comb IDs by date and value * Introduce notification hub pool * Replace device type sharding with comb + range sharding * Fix proxy interface * Use enumerable services for multiServiceNotificationHub * Fix push interface usage * Fix push notification service dependencies * Fix push notification keys * Fixup documentation * Remove deprecated settings * Fix tests * PascalCase method names * Remove unused request model properties * Remove unused setting * Improve DateFromComb precision * Prefer readonly service enumerable * Pascal case template holes * Name TryParse methods TryParse * Apply suggestions from code review Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com> * AllClients is a set of clients and must be deduplicated * Fix registration start time * Add logging to initialization of a notification hub * more logging * Add lower level logging for hub settings * Log when connection is resolved * Improve log message * Log pushes to notification hub * temporarily elevate log messages for visibility * Log in multi-service when relaying to another push service * Revert to more reasonable logging free of user information * Fixup merge Deleting user was extracted to a command in #4803, this updates that work to use just the device ids as I did elsewhere in abd67e8ec * Do not use bouncy castle exception types * Add required services for logging --------- Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com> Co-authored-by: bnagawiecki <107435978+bnagawiecki@users.noreply.github.com>
27 lines
1.0 KiB
C#
27 lines
1.0 KiB
C#
using Microsoft.Azure.NotificationHubs;
|
|
|
|
namespace Bit.Core.NotificationHub;
|
|
|
|
public class NotificationHubClientProxy : INotificationHubProxy
|
|
{
|
|
private readonly IEnumerable<INotificationHubClient> _clients;
|
|
|
|
public NotificationHubClientProxy(IEnumerable<INotificationHubClient> clients)
|
|
{
|
|
_clients = clients;
|
|
}
|
|
|
|
private async Task<(INotificationHubClient, T)[]> ApplyToAllClientsAsync<T>(Func<INotificationHubClient, Task<T>> action)
|
|
{
|
|
var tasks = _clients.Select(async c => (c, await action(c)));
|
|
return await Task.WhenAll(tasks);
|
|
}
|
|
|
|
// partial proxy of INotificationHubClient implementation
|
|
// Note: Any other methods that are needed can simply be delegated as done here.
|
|
public async Task<(INotificationHubClient Client, NotificationOutcome Outcome)[]> SendTemplateNotificationAsync(IDictionary<string, string> properties, string tagExpression)
|
|
{
|
|
return await ApplyToAllClientsAsync(async c => await c.SendTemplateNotificationAsync(properties, tagExpression));
|
|
}
|
|
}
|