示例#1
0
        public RecordedEvent(EventEntryDTO entry, string baseUrl)
        {
            Link = new RecordedEventLink()
            {
                Href = $"{baseUrl}{entry.Id.RawValue}"
            };
            Id            = entry.Id;
            ReceptionTime = entry.ReceptionTime;

            UUID        = entry.UUID;
            Client      = new EventEntryClient(entry.Client_UUID, entry.Client_Name);
            Time        = entry.EventTime;
            Action      = entry.Action;
            Description = entry.Description;
            URL         = entry.URL;
            Actor       = new EventEntryActor(entry.Actor_UUID, entry.Actor_Name, entry.Actor_Email);
            Context     = new EventEntryContext(entry.Context_Client_IP, entry.Context_Client_BrowserAgent, entry.Context_Server_ServerId, entry.Context_Server_Version);

            if (entry.TargetUser_Id != null)
            {
                Target = new EventEntryTarget("User", entry.TargetUser_UUID, entry.TargetUser_Name, null);
            }
            else
            {
                Target = new EventEntryTarget(entry.Target_Type, entry.Target_UUID, entry.Target_Label, entry.Target_URL);
            }
        }
示例#2
0
        public async Task <IActionResult> SubmitEventAsync([FromBody] EventEntry[] entries)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new ApiError(400, ModelState)));
            }

            foreach (var entry in entries)
            {
                EnsureAllowedNullsAreRepresented(entry);
            }

            var customerId = _membership.GetCustomerId(User);
            var results    = new EventAcceptedResponse();

            foreach (var entry in entries)
            {
                var dto = new EventEntryDTO(null, customerId, DateTime.UtcNow,
                                            entry.UUID,
                                            null,
                                            entry.Client.UUID,
                                            entry.Client.Name,
                                            entry.Time.Value, // nullable - ModelBinding should catch this, as it's annotated as Required - convert to UTC
                                            entry.Action,
                                            entry.Description,
                                            entry.URL,
                                            null,
                                            entry.Actor.UUID,
                                            entry.Actor.Name,
                                            entry.Actor.Email,
                                            entry.Context.Client.IPAddress,
                                            entry.Context.Client.BrowserAgent,
                                            entry.Context.Server.ServerId,
                                            entry.Context.Server.Version,
                                            entry.Target.Type,
                                            entry.Target.UUID,
                                            entry.Target.Label,
                                            entry.Target.URL,
                                            null,
                                            entry.TargetUser.UUID,
                                            entry.TargetUser.Name,
                                            entry.TargetUser.Email);

                EventEntryId id = await _persistence.EventEntries.CreateAsync(dto);

                results.ReceivedEvents.Add(new ReceivedEventEntryId(id, entry.UUID));
            }

            return(Ok(results));
        }
示例#3
0
        public async Task <EventEntryId> CreateAsync(EventEntryDTO eventEntry)
        {
            var sqlParams = new
            {
                CustomerId = eventEntry.CustomerId.RawValue,
                eventEntry.ReceptionTime,
                eventEntry.UUID,
                eventEntry.Client_UUID,
                eventEntry.Client_Name,
                eventEntry.EventTime,
                eventEntry.Action,
                eventEntry.Description,
                eventEntry.URL,
                eventEntry.Actor_UUID,
                eventEntry.Actor_Name,
                eventEntry.Actor_Email,
                eventEntry.Context_Client_IP,
                eventEntry.Context_Client_BrowserAgent,
                eventEntry.Context_Server_ServerId,
                eventEntry.Context_Server_Version,
                eventEntry.Target_Type,
                eventEntry.Target_UUID,
                eventEntry.Target_Label,
                eventEntry.Target_URL,
                eventEntry.TargetUser_UUID,
                eventEntry.TargetUser_Name,
                eventEntry.TargetUser_Email
            };

            // double @ is for variables delcared in the statement so PteaPoco won't try to provide them

            string sql = @";
                -- Ensure Actor is in DB and up to date
                DECLARE @@ActorId uniqueidentifier;
                SELECT @@ActorId = Id 
                FROM dbo.EventActors
                WHERE CustomerId = @CustomerId
                    AND UUID = @Actor_UUID;

                IF @@ActorId IS NULL
                BEGIN
                    SET @@ActorId = NewID();
                    INSERT INTO dbo.EventActors(Id, CustomerId, UUID, Name, Email, IsForgotten)
                    VALUES(@@ActorId, @CustomerId, @Actor_UUID, @Actor_Name, @Actor_Email, 0);
                END
                ELSE
                BEGIN
                    UPDATE dbo.EventActors
                    SET Name = @Actor_Name,
                        Email = @Actor_Email
                    WHERE Id = @@ActorId
                        AND IsForgotten = 0
                        AND Name <> @Actor_Name
                        AND Email <> @Actor_Email;
                END

                -- Ensure Target Actor is in DB and up to date (If Set)
                DECLARE @@TargetActorId uniqueidentifier;
                IF @TargetUser_UUID IS NOT NULL
                BEGIN
                    SELECT @@TargetActorId = Id 
                    FROM dbo.EventActors
                    WHERE CustomerId = @CustomerId
                        AND UUID = @TargetUser_UUID;

                    IF @@TargetActorId IS NULL
                    BEGIN
                        SET @@TargetActorId = NewID();
                        INSERT INTO dbo.EventActors(Id, CustomerId, UUID, Name, Email, IsForgotten)
                        VALUES(@@TargetActorId, @CustomerId, @TargetUser_UUID, @TargetUser_Name, @TargetUser_Email, 0);
                    END
                    ELSE
                    BEGIN
                        UPDATE dbo.EventActors
                        SET Name = @TargetUser_Name,
                            Email = @TargetUser_Email
                        WHERE Id = @@TargetActorId
                            AND IsForgotten = 0
                            AND Name <> @TargetUser_Name
                            AND Email <> @TargetUser_Email;
                    END
                END

                -- Ensure Client is in DB and up to date
                DECLARE @@ClientId uniqueidentifier;
                SELECT @@ClientId = Id 
                FROM dbo.EventClients
                WHERE CustomerId = @CustomerId
                    AND UUID = @Client_UUID;

                IF @@ClientId IS NULL
                BEGIN
                    SET @@ClientId = NewID();
                    INSERT INTO dbo.EventClients(Id, CustomerId, UUID, Name)
                    VALUES(@@ClientId, @CustomerId, @Client_UUID, @Client_Name);
                END
                ELSE
                BEGIN
                    UPDATE dbo.EventClients
                    SET Name = @Client_Name
                    WHERE Id = @@ClientId;
                END

                DECLARE @@Id uniqueidentifier = NewId();
                INSERT INTO dbo.EventEntries(Id, CustomerId, ReceptionTime, UUID, EventClientId, EventTime, Action, Description, URL, EventActorId, Context_Client_IP, Context_Client_BrowserAgent, Context_Server_ServerId, Context_Server_Version, Target_Type, Target_UUID, Target_Label, Target_URL, TargetEventActorId)
                VALUES(                    @@Id,@CustomerId,@ReceptionTime,@UUID,    @@ClientId,@EventTime,@Action,@Description,@URL,    @@ActorId,@Context_Client_IP,@Context_Client_BrowserAgent,@Context_Server_ServerId,@Context_Server_Version,@Target_Type,@Target_UUID,@Target_Label,@Target_URL,    @@TargetActorId);

                SELECT @@Id as Id;
            ";

            var rawId = await _db.QuerySingle(async (db) =>
            {
                return(await db.FetchAsync <Guid>(sql, sqlParams));
            });

            return(new EventEntryId(rawId));
        }