Exemple #1
0
 private static string GetChangeIdsForLog(DelegationChangeEventList delegationChangeEventList)
 {
     return(string.Join(
                ',',
                delegationChangeEventList.DelegationChangeEvents.Select(delegationChangeEvent =>
                                                                        delegationChangeEvent.DelegationChange.DelegationChangeId)));
 }
Exemple #2
0
        /// <summary>
        /// Converts the delegation change to a delegation change event and pushes it to the event queue.
        /// Throws exception if something fails
        /// </summary>
        /// <param name="delegationChange">The delegation change stored in postgresql</param>
        public async Task <SendReceipt> Push(DelegationChange delegationChange)
        {
            DelegationChangeEventList dceList = _eventMapperService.MapToDelegationChangeEventList(new List <DelegationChange> {
                delegationChange
            });
            QueueClient queueClient = await GetQueueClient();

            return(await queueClient.SendMessageAsync(JsonSerializer.Serialize(dceList)));
        }
Exemple #3
0
        public static void AssertEqual(DelegationChangeEventList expected, DelegationChangeEventList actual)
        {
            if (expected == null)
            {
                Assert.Null(actual);
                return;
            }

            Assert.Equal(expected.DelegationChangeEvents.Count, actual.DelegationChangeEvents.Count);
            for (int i = 0; i < expected.DelegationChangeEvents.Count; i++)
            {
                AssertEqual(expected.DelegationChangeEvents[i], actual.DelegationChangeEvents[i]);
            }
        }
Exemple #4
0
 /// <inheritdoc />
 public List <PlatformDelegationEvent> MapToPlatformEventList(DelegationChangeEventList delegationChangeEventList)
 {
     return(delegationChangeEventList.DelegationChangeEvents.Select(delegationChangeEvent => new PlatformDelegationEvent()
     {
         EventType = delegationChangeEvent.EventType,
         PolicyChangeId = delegationChangeEvent.DelegationChange.DelegationChangeId,
         Created = delegationChangeEvent.DelegationChange.Created,
         AltinnAppId = delegationChangeEvent.DelegationChange.AltinnAppId,
         OfferedByPartyId = delegationChangeEvent.DelegationChange.OfferedByPartyId,
         CoveredByPartyId = delegationChangeEvent.DelegationChange.CoveredByPartyId ?? 0,
         CoveredByUserId = delegationChangeEvent.DelegationChange.CoveredByUserId ?? 0,
         PerformedByUserId = delegationChangeEvent.DelegationChange.PerformedByUserId
     })
            .ToList());
 }
Exemple #5
0
        public void MapToDelegationChangeEventList()
        {
            // Arrange
            EventMapperService mapper = new EventMapperService();

            DateTime now = DateTime.Now;
            DelegationChangeEventList expected = new DelegationChangeEventList
            {
                DelegationChangeEvents = new List <DelegationChangeEvent>
                {
                    new DelegationChangeEvent
                    {
                        EventType        = DelegationChangeEventType.Grant,
                        DelegationChange = new SimpleDelegationChange
                        {
                            DelegationChangeId = 1,
                            AltinnAppId        = "ttd/testapp",
                            OfferedByPartyId   = 123,
                            CoveredByPartyId   = 234,
                            PerformedByUserId  = 567,
                            Created            = now
                        }
                    }
                }
            };

            List <DelegationChange> input = new List <DelegationChange>()
            {
                new DelegationChange()
                {
                    DelegationChangeId    = 1,
                    DelegationChangeType  = DelegationChangeType.Grant,
                    AltinnAppId           = "ttd/testapp",
                    OfferedByPartyId      = 123,
                    CoveredByPartyId      = 234,
                    PerformedByUserId     = 567,
                    BlobStoragePolicyPath = "ttd/testapp/123/p234/delegationpolicy.xml",
                    BlobStorageVersionId  = now.ToString(),
                    Created = now
                }
            };

            // Act
            DelegationChangeEventList actual = mapper.MapToDelegationChangeEventList(input);

            // Assert
            AssertionUtil.AssertEqual(expected, actual);
        }
Exemple #6
0
    /// <summary>
    /// Pushes the events to bridge.
    /// </summary>
    /// <param name="delegationChangeEventList">The delegation change events.</param>
    /// <exception cref="BridgeRequestFailedException">Thrown if something fails, or if Bridge returns a non-successful response to ensure retry.</exception>
    public async Task PushEvents(DelegationChangeEventList delegationChangeEventList)
    {
        try
        {
            if (delegationChangeEventList == null)
            {
                _logger.LogError("Received null instead of delegation change events. Failed to deserialize model?");
                throw new BridgeRequestFailedException();
            }

            delegationChangeEventList.DelegationChangeEvents ??= new List <DelegationChangeEvent>();
            if (delegationChangeEventList.DelegationChangeEvents.Count == 0)
            {
                _logger.LogError("Received empty list of delegation change events. Failed to deserialize model?");
                return;
            }

            if (_logger.IsEnabled(LogLevel.Debug))
            {
                _logger.LogDebug(
                    "Posting delegationChangeEventList numEventsSent={numEventsSent} changeIds={changeIds}",
                    delegationChangeEventList.DelegationChangeEvents.Count,
                    GetChangeIdsForLog(delegationChangeEventList));
            }

            HttpResponseMessage response =
                await _bridgeClient.PostDelegationEventsAsync(_eventMapperService.MapToPlatformEventList(delegationChangeEventList));

            if (!response.IsSuccessStatusCode)
            {
                _logger.LogWarning(
                    "Bridge returned non-success. resultCode={resultCode} reasonPhrase={reasonPhrase} resultBody={resultBody} numEventsSent={numEventsSent} changeIds={changeIds}",
                    response.StatusCode,
                    response.ReasonPhrase,
                    await response.Content.ReadAsStringAsync(),
                    delegationChangeEventList.DelegationChangeEvents.Count,
                    GetChangeIdsForLog(delegationChangeEventList));

                // Throw exception to ensure requeue of the event list
                throw new BridgeRequestFailedException();
            }

            if (_logger.IsEnabled(LogLevel.Debug))
            {
                _logger.LogDebug(
                    "Successfully posted delegationChangeEventList numEventsSent={numEventsSent} changeIds={changeIds}",
                    delegationChangeEventList.DelegationChangeEvents.Count,
                    GetChangeIdsForLog(delegationChangeEventList));
            }
        }
        catch (BridgeRequestFailedException)
        {
            throw;
        }
        catch (Exception ex)
        {
            _logger.LogError(
                "Exception thrown while attempting to post delegation events to Bridge. exception={exception} message={message} numEventsSent={numEventsSent} changeIds={changeIds}",
                ex.GetType().Name,
                ex.Message,
                delegationChangeEventList?.DelegationChangeEvents?.Count,
                GetChangeIdsForLog(delegationChangeEventList));

            throw new BridgeRequestFailedException();
        }
    }
Exemple #7
0
 public async Task RunAsync([QueueTrigger("delegationevents", Connection = "QueueStorage")] string queueItem)
 {
     DelegationChangeEventList delegationChangeEventList =
         System.Text.Json.JsonSerializer.Deserialize <DelegationChangeEventList>(queueItem);
     await _eventPusherService.PushEvents(delegationChangeEventList);
 }