enhancement(audit): observe the ScienceMeshInviteTokenGenerated event in the audit service

This commit is contained in:
Florian Schade
2024-09-04 13:57:33 +02:00
parent 5ceb081262
commit dfba7c70d7
6 changed files with 65 additions and 1 deletions

View File

@@ -109,6 +109,8 @@ func StartAuditLogger(ctx context.Context, ch <-chan events.Event, log log.Logge
auditEvent = types.GroupMemberAdded(ev)
case events.GroupMemberRemoved:
auditEvent = types.GroupMemberRemoved(ev)
case events.ScienceMeshInviteTokenGenerated:
auditEvent = types.ScienceMeshInviteTokenGenerated(ev)
default:
log.Error().Interface("event", ev).Msg(fmt.Sprintf("can't handle event of type '%T'", ev))
continue

View File

@@ -5,10 +5,11 @@ import (
"encoding/json"
"testing"
"github.com/stretchr/testify/require"
"github.com/cs3org/reva/v2/pkg/events"
"github.com/owncloud/ocis/v2/ocis-pkg/log"
"github.com/owncloud/ocis/v2/services/audit/pkg/types"
"github.com/stretchr/testify/require"
group "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1"
user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
@@ -558,6 +559,33 @@ var testCases = []struct {
checkSpacesAuditEvent(t, ev.AuditEventSpaces, "storage-1$space-123")
},
},
{
Alias: "ScienceMesh - InviteTokenGenerated",
SystemEvent: events.Event{
Event: events.ScienceMeshInviteTokenGenerated{
Sharer: userID("sharer-user-id"),
RecipientMail: "mail@ocis.test",
Token: "token-123",
Description: "some-description",
Expiration: uint64(10e8),
InviteLink: "http://ocis.test/invite",
Timestamp: timestamp(10e8),
},
},
CheckAuditEvent: func(t *testing.T, b []byte) {
ev := types.AuditEventScienceMeshInviteTokenGenerated{}
require.NoError(t, json.Unmarshal(b, &ev))
// AuditEvent fields
checkBaseAuditEvent(t, ev.AuditEvent, "sharer-user-id", "2001-09-09T01:46:40Z", "user 'sharer-user-id' generated a ScienceMesh invite with token 'token-123'", "science_mesh_invite_token_generated")
// AuditEventScienceMeshInviteTokenGenerated fields
require.Equal(t, "mail@ocis.test", ev.RecipientMail)
require.Equal(t, "token-123", ev.Token)
require.Equal(t, "some-description", ev.Description)
require.Equal(t, uint64(10e8), ev.Expiration)
require.Equal(t, "http://ocis.test/invite", ev.InviteLink)
},
},
}
func TestAuditLogging(t *testing.T) {

View File

@@ -13,6 +13,7 @@ import (
user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
sdk "github.com/cs3org/reva/v2/pkg/sdk/common"
)
@@ -505,6 +506,20 @@ func GroupMemberRemoved(ev events.GroupMemberRemoved) AuditEventGroupMemberRemov
}
}
// ScienceMeshInviteTokenGenerated converts a ScienceMeshInviteTokenGenerated event to an AuditEventScienceMeshInviteTokenGenerated
func ScienceMeshInviteTokenGenerated(ev events.ScienceMeshInviteTokenGenerated) AuditEventScienceMeshInviteTokenGenerated {
msg := MessageScienceMeshInviteTokenGenerated(ev.Sharer.GetOpaqueId(), ev.Token)
base := BasicAuditEvent(ev.Sharer.GetOpaqueId(), formatTime(ev.Timestamp), msg, ActionScienceMeshInviteTokenGenerated)
return AuditEventScienceMeshInviteTokenGenerated{
AuditEvent: base,
RecipientMail: ev.RecipientMail,
Token: ev.Token,
Description: ev.Description,
Expiration: ev.Expiration,
InviteLink: ev.InviteLink,
}
}
func extractGrantee(uid *user.UserId, gid *group.GroupId) (string, string) {
switch {
case uid != nil && uid.OpaqueId != "":

View File

@@ -40,5 +40,6 @@ func RegisteredEvents() []events.Unmarshaller {
events.GroupMemberAdded{},
events.GroupMemberRemoved{},
events.BackchannelLogout{},
events.ScienceMeshInviteTokenGenerated{},
}
}

View File

@@ -51,6 +51,9 @@ const (
ActionGroupDeleted = "group_deleted"
ActionGroupMemberAdded = "group_member_added"
ActionGroupMemberRemoved = "group_member_removed"
// ScienceMesh
ActionScienceMeshInviteTokenGenerated = "science_mesh_invite_token_generated"
)
// MessageShareCreated returns the human-readable string that describes the action
@@ -234,3 +237,8 @@ func MessageGroupMemberAdded(executant, userID, groupID string) string {
func MessageGroupMemberRemoved(executant, userID, groupID string) string {
return fmt.Sprintf("user '%s' added user '%s' was removed from group '%s'", executant, userID, groupID)
}
// MessageScienceMeshInviteTokenGenerated returns the human-readable string that describes the action
func MessageScienceMeshInviteTokenGenerated(user, token string) string {
return fmt.Sprintf("user '%s' generated a ScienceMesh invite with token '%s'", user, token)
}

View File

@@ -274,3 +274,13 @@ type AuditEventGroupMemberRemoved struct {
GroupID string
UserID string
}
// AuditEventScienceMeshInviteTokenGenerated is the event logged when a ScienceMesh invite token is generated
type AuditEventScienceMeshInviteTokenGenerated struct {
AuditEvent
RecipientMail string
Token string
Description string
Expiration uint64
InviteLink string
}