Esempio n. 1
0
        public void RequestSubscription(Interactor subscriber, SubscriptionRequest request)
        {
            if (!subscriber.HasRole(request.Feed, Role.Subscribe))
            {
                _logger.LogWarning("Rejected request from {Subscriber} to subscribe to feed \"{Feed}\"", subscriber, request.Feed);
                return;
            }

            _logger.LogInformation("Received subscription from {Subscriber} on \"{Request}\"", subscriber, request);

            if (request.IsAdd)
            {
                if (subscriber.TryGetAuthorization(request.Feed, request.Topic, out var authorization) && authorization != null)
                {
                    // If we've already authorized just add the subscription.
                    AddSubscription(
                        subscriber,
                        request.Feed,
                        request.Topic,
                        authorization.IsAuthorizationRequired,
                        authorization.Entitlements,
                        false);
                }
                else
                {
                    // Request authorization for unauthorized subscriptions.
                    _interactorManager.RequestAuthorization(subscriber, request.Feed, request.Topic);
                }
            }
            else
            {
                // Subscriptions can be removed whether or not they have been authorized.
                _repository.RemoveSubscription(subscriber, request.Feed, request.Topic, false);
                _notificationManager.ForwardSubscription(subscriber, request);
            }
        }