From d8667bf7363b5bd63e7a04a3c98322d80a0d7cc1 Mon Sep 17 00:00:00 2001 From: jkoberg Date: Fri, 30 Jun 2023 12:40:02 +0200 Subject: [PATCH] use hard typed deprovision date Signed-off-by: jkoberg --- services/userlog/pkg/service/conversion.go | 2 +- services/userlog/pkg/service/globalevents.go | 15 +++++++++++ services/userlog/pkg/service/http.go | 11 +++------ services/userlog/pkg/service/service.go | 26 ++++++++++++++------ 4 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 services/userlog/pkg/service/globalevents.go diff --git a/services/userlog/pkg/service/conversion.go b/services/userlog/pkg/service/conversion.go index 4cef4f0c2f..266e65e0b1 100644 --- a/services/userlog/pkg/service/conversion.go +++ b/services/userlog/pkg/service/conversion.go @@ -305,7 +305,7 @@ func (c *Converter) policiesMessage(eventid string, nt NotificationTemplate, exe }, nil } -func (c *Converter) deprovisionMessage(nt NotificationTemplate, deproDate string) (OC10Notification, error) { +func (c *Converter) deprovisionMessage(nt NotificationTemplate, deproDate time.Time) (OC10Notification, error) { subj, subjraw, msg, msgraw, err := composeMessage(nt, c.locale, c.translationPath, map[string]interface{}{ "date": deproDate, }) diff --git a/services/userlog/pkg/service/globalevents.go b/services/userlog/pkg/service/globalevents.go new file mode 100644 index 0000000000..2f7369d1b4 --- /dev/null +++ b/services/userlog/pkg/service/globalevents.go @@ -0,0 +1,15 @@ +package service + +import "time" + +var ( + _globalEventsKey = "global-events" +) + +// DeprovisionData is the data needed for the deprovision global event +type DeprovisionData struct { + // The deprovision date + DeprovisionDate time.Time `json:"deprovision_date"` + // The user who stored the deprovision message + Deprovisioner string +} diff --git a/services/userlog/pkg/service/http.go b/services/userlog/pkg/service/http.go index 277dc84d7b..2cc4e6cb60 100644 --- a/services/userlog/pkg/service/http.go +++ b/services/userlog/pkg/service/http.go @@ -186,13 +186,10 @@ type DeleteEventsRequest struct { // PostEventsRequest is the expected body for the post request type PostEventsRequest struct { - Type string `json:"type"` - Data json.RawMessage `json:"data"` -} - -// DeprovisionData is the expected `data` for the PostEventsRequest when deprovisioning -type DeprovisionData struct { - DeprovisionDate string `json:"date"` + // the event type, e.g. "deprovision" + Type string `json:"type"` + // arbitray data for the event + Data map[string]string `json:"data"` } // RequireAdmin middleware is used to require the user in context to be an admin / have account management permissions diff --git a/services/userlog/pkg/service/service.go b/services/userlog/pkg/service/service.go index a91727d445..2ab8396371 100644 --- a/services/userlog/pkg/service/service.go +++ b/services/userlog/pkg/service/service.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "reflect" + "time" gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" group "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1" @@ -244,19 +245,30 @@ func (ul *UserlogService) DeleteEvents(userid string, evids []string) error { } // StoreGlobalEvent will store a global event that will be returned with each `GetEvents` request -func (ul *UserlogService) StoreGlobalEvent(typ string, data json.RawMessage) error { +func (ul *UserlogService) StoreGlobalEvent(typ string, data map[string]string) error { switch typ { default: return fmt.Errorf("unknown event type: %s", typ) case "deprovision": - var req DeprovisionData - if err := json.Unmarshal(data, &req); err != nil { - return err + dps, ok := data["deprovision_date"] + if !ok { + return errors.New("need 'deprovision_date' in request body") } - // TODO: check for proper time format + format := data["deprovision_date_format"] + if format == "" { + format = time.RFC3339 + } - return ul.storeGlobalEvent(typ, req) + date, err := time.Parse(format, dps) + if err != nil { + fmt.Println("", format, "\n", dps) + return fmt.Errorf("cannot parse time to format. time: '%s' format: '%s'", dps, format) + } + + return ul.storeGlobalEvent(typ, DeprovisionData{ + DeprovisionDate: date, + }) } } @@ -265,7 +277,7 @@ func (ul *UserlogService) StoreGlobalEvent(typ string, data json.RawMessage) err func (ul *UserlogService) GetGlobalEvents() (map[string]json.RawMessage, error) { out := make(map[string]json.RawMessage) - recs, err := ul.store.Read("global-events") + recs, err := ul.store.Read(_globalEventsKey) if err != nil && err != store.ErrNotFound { return out, err }