mirror of
https://github.com/bitwarden/server
synced 2025-12-15 07:43:54 +00: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));
|
|
}
|
|
}
|