From f13fdab227c0d44763cc97923d6caaa2d6137c1a Mon Sep 17 00:00:00 2001 From: Vitor Anjos Date: Thu, 19 Dec 2024 18:58:25 -0300 Subject: [PATCH 1/8] wip --- internal/adapter/adapter.go | 1 + internal/adapter/ics/adapter.go | 33 ++++++++++++++++++++++++++++++ internal/adapter/ics/client.go | 15 ++++++++++++++ internal/adapter/source_adapter.go | 3 +++ 4 files changed, 52 insertions(+) create mode 100644 internal/adapter/ics/adapter.go create mode 100644 internal/adapter/ics/client.go diff --git a/internal/adapter/adapter.go b/internal/adapter/adapter.go index 6c1698f..3e09309 100644 --- a/internal/adapter/adapter.go +++ b/internal/adapter/adapter.go @@ -10,6 +10,7 @@ const ( GoogleCalendarType Type = "google" ZepCalendarType Type = "zep" OutlookHttpCalendarType Type = "outlook_http" + ICalendarType Type = "ics" ) // ConfigReader provides an interface for adapters to load their own configuration map. diff --git a/internal/adapter/ics/adapter.go b/internal/adapter/ics/adapter.go new file mode 100644 index 0000000..7ace63c --- /dev/null +++ b/internal/adapter/ics/adapter.go @@ -0,0 +1,33 @@ +package ics + +import ( + "context" + "github.com/inovex/CalendarSync/internal/models" + "time" +) + +type ICalendarClient interface { + ListEvents(ctx context.Context, starttime time.Time, enddtime time.Time) ([]models.Event, error) +} + +type CalendarAPI struct { + icalendarClient ICalendarClient + calendarUrl string +} + +func (c *CalendarAPI) EventsInTimeframe(ctx context.Context, start time.Time, end time.Time) ([]models.Event, error) { + panic("implement me") +} + +func (c *CalendarAPI) Name() string { + return "iCalendar" +} + +func (c *CalendarAPI) GetCalendarID() string { + return c.calendarUrl +} + +func (c *CalendarAPI) Initialize(ctx context.Context, openBrowser bool, config map[string]interface{}) error { + c.calendarUrl = config["url"].(string) + return nil +} diff --git a/internal/adapter/ics/client.go b/internal/adapter/ics/client.go new file mode 100644 index 0000000..41770df --- /dev/null +++ b/internal/adapter/ics/client.go @@ -0,0 +1,15 @@ +package ics + +import ( + "context" + "github.com/inovex/CalendarSync/internal/models" + "time" +) + +type ICalClient struct { + url string +} + +func (ic *ICalClient) ListEvents(ctx context.Context, starttime time.Time, enddtime time.Time) ([]models.Event, error) { + return nil, nil +} diff --git a/internal/adapter/source_adapter.go b/internal/adapter/source_adapter.go index 08dad2f..5a35803 100644 --- a/internal/adapter/source_adapter.go +++ b/internal/adapter/source_adapter.go @@ -3,6 +3,7 @@ package adapter import ( "context" "fmt" + "github.com/inovex/CalendarSync/internal/adapter/ics" "time" "github.com/charmbracelet/log" @@ -22,6 +23,8 @@ func SourceClientFactory(typ Type) (sync.Source, error) { switch typ { case GoogleCalendarType: return new(google.CalendarAPI), nil + case ICalendarType: + return new(ics.CalendarAPI), nil case ZepCalendarType: return new(zep.CalendarAPI), nil case OutlookHttpCalendarType: From b92916e5b45913195d9b394ab9f037cf25f444e3 Mon Sep 17 00:00:00 2001 From: Vitor Anjos Date: Fri, 20 Dec 2024 10:25:57 -0300 Subject: [PATCH 2/8] WIP --- go.mod | 1 + go.sum | 11 +++ internal/adapter/ics/adapter.go | 11 ++- internal/adapter/ics/client.go | 116 +++++++++++++++++++++++++++++++- 4 files changed, 137 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index e9487ff..c4e0a21 100644 --- a/go.mod +++ b/go.mod @@ -25,6 +25,7 @@ require ( cloud.google.com/go/auth v0.9.8 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect cloud.google.com/go/compute/metadata v0.5.2 // indirect + github.com/arran4/golang-ical v0.3.1 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/benbjohnson/clock v1.3.0 // indirect diff --git a/go.sum b/go.sum index 33895bf..72908be 100644 --- a/go.sum +++ b/go.sum @@ -12,6 +12,8 @@ filippo.io/age v1.2.0/go.mod h1:JL9ew2lTN+Pyft4RiNGguFfOpewKwSHm5ayKD/A4004= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/aquilax/truncate v1.0.0 h1:UgIGS8U/aZ4JyOJ2h3xcF5cSQ06+gGBnjxH2RUHJe0U= github.com/aquilax/truncate v1.0.0/go.mod h1:BeMESIDMlvlS3bmg4BVvBbbZUNwWtS8uzYPAKXwwhLw= +github.com/arran4/golang-ical v0.3.1 h1:v13B3eQZ9VDHTAvT6M11vVzxYgcYmjyPBE2eAZl3VZk= +github.com/arran4/golang-ical v0.3.1/go.mod h1:LZWxF8ZIu/sjBVUCV0udiVPrQAgq3V0aa0RfbO99Qkk= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= @@ -29,6 +31,7 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -83,6 +86,9 @@ github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDP github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= @@ -96,6 +102,7 @@ github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -112,6 +119,7 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= @@ -213,7 +221,10 @@ google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFyt google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/internal/adapter/ics/adapter.go b/internal/adapter/ics/adapter.go index 7ace63c..a766470 100644 --- a/internal/adapter/ics/adapter.go +++ b/internal/adapter/ics/adapter.go @@ -16,7 +16,14 @@ type CalendarAPI struct { } func (c *CalendarAPI) EventsInTimeframe(ctx context.Context, start time.Time, end time.Time) ([]models.Event, error) { - panic("implement me") + events, err := c.icalendarClient.ListEvents(ctx, start, end) + if err != nil { + return nil, err + } + + //c.logger.Infof("loaded %d events between %s and %s.", len(events), start.Format(time.RFC1123), end.Format(time.RFC1123)) + + return events, nil } func (c *CalendarAPI) Name() string { @@ -29,5 +36,7 @@ func (c *CalendarAPI) GetCalendarID() string { func (c *CalendarAPI) Initialize(ctx context.Context, openBrowser bool, config map[string]interface{}) error { c.calendarUrl = config["url"].(string) + + c.icalendarClient = &ICalClient{url: c.calendarUrl} return nil } diff --git a/internal/adapter/ics/client.go b/internal/adapter/ics/client.go index 41770df..7366519 100644 --- a/internal/adapter/ics/client.go +++ b/internal/adapter/ics/client.go @@ -2,7 +2,12 @@ package ics import ( "context" + "fmt" + ical "github.com/arran4/golang-ical" "github.com/inovex/CalendarSync/internal/models" + "io" + "net/http" + "strings" "time" ) @@ -11,5 +16,114 @@ type ICalClient struct { } func (ic *ICalClient) ListEvents(ctx context.Context, starttime time.Time, enddtime time.Time) ([]models.Event, error) { - return nil, nil + var loadedEvents []models.Event + + req, err := http.NewRequestWithContext(ctx, "GET", ic.url, nil) + if err != nil { + return nil, err + } + + client := http.Client{} + resp, err := client.Do(req) + if err != nil { + return nil, err + } + + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("failed to fetch events: %s", resp.Status) + } + + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + cal, err := ical.ParseCalendar(strings.NewReader(string(body))) + if err != nil { + return nil, err + } + + //TODO: Implement starttime and endttime filtering + eventList := cal.Events() + for _, event := range eventList { + loadedEvents = append(loadedEvents, calendarEventToEvent(event)) + } + + return loadedEvents, nil +} + +func calendarEventToEvent(e *ical.VEvent) models.Event { + var summary string + var location string + var timeZone string + var accepted bool + var allDay bool + var dateStart time.Time + var dateEnd time.Time + + for _, prop := range e.ComponentBase.Properties { + if prop.IANAToken == "X-MICROSOFT-CDO-ALLDAYEVENT" { + value := prop.Value + if value == "TRUE" { + allDay = true + } else { + allDay = false + } + break + } + } + + summary = e.GetProperty(ical.ComponentPropertySummary).Value + fmt.Println(summary) + + location = e.GetProperty(ical.ComponentPropertyLocation).Value + + status := e.GetProperty(ical.ComponentPropertyStatus).Value + if status == "CONFIRMED" { + accepted = true + } else { + accepted = false + } + + layout := "20060102T150405-0700" + + var rawTimeZone string + if !allDay { + rawTimeZone = e.GetProperty(ical.ComponentPropertyDtStart).ICalParameters["TZID"][0] + } else { + rawTimeZone = "" + } + + switch rawTimeZone { + case "Central America Standard Time": + timeZone = "-0600" + case "South America Standard Time": + timeZone = "-0300" + default: + timeZone = "" + } + + renderedStartDate := e.GetProperty(ical.ComponentPropertyDtStart).Value + timeZone + dateStart, _ = time.Parse(layout, renderedStartDate) + + renderedEndDate := e.GetProperty(ical.ComponentPropertyDtEnd).Value + timeZone + dateEnd, _ = time.Parse(layout, renderedEndDate) + + return models.Event{ + ICalUID: e.Id(), + ID: e.Id(), + Title: summary, + Description: "", + Location: location, + AllDay: allDay, + StartTime: dateStart, + EndTime: dateEnd, + //Metadata: + //Attendees: + //Reminders: + //MeetingLink: + Accepted: accepted, + } } From 06f51756f8ae70ea48072723d81039ef41224e35 Mon Sep 17 00:00:00 2001 From: Vitor Anjos Date: Fri, 20 Dec 2024 10:37:13 -0300 Subject: [PATCH 3/8] WIP --- internal/adapter/ics/adapter.go | 8 +++++++- internal/adapter/ics/client.go | 12 +++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/internal/adapter/ics/adapter.go b/internal/adapter/ics/adapter.go index a766470..3aa2d3e 100644 --- a/internal/adapter/ics/adapter.go +++ b/internal/adapter/ics/adapter.go @@ -2,6 +2,7 @@ package ics import ( "context" + "github.com/charmbracelet/log" "github.com/inovex/CalendarSync/internal/models" "time" ) @@ -13,6 +14,7 @@ type ICalendarClient interface { type CalendarAPI struct { icalendarClient ICalendarClient calendarUrl string + logger *log.Logger } func (c *CalendarAPI) EventsInTimeframe(ctx context.Context, start time.Time, end time.Time) ([]models.Event, error) { @@ -21,7 +23,7 @@ func (c *CalendarAPI) EventsInTimeframe(ctx context.Context, start time.Time, en return nil, err } - //c.logger.Infof("loaded %d events between %s and %s.", len(events), start.Format(time.RFC1123), end.Format(time.RFC1123)) + c.logger.Infof("loaded %d events between %s and %s.", len(events), start.Format(time.RFC1123), end.Format(time.RFC1123)) return events, nil } @@ -40,3 +42,7 @@ func (c *CalendarAPI) Initialize(ctx context.Context, openBrowser bool, config m c.icalendarClient = &ICalClient{url: c.calendarUrl} return nil } + +func (c *CalendarAPI) SetLogger(logger *log.Logger) { + c.logger = logger +} diff --git a/internal/adapter/ics/client.go b/internal/adapter/ics/client.go index 7366519..89df536 100644 --- a/internal/adapter/ics/client.go +++ b/internal/adapter/ics/client.go @@ -17,6 +17,7 @@ type ICalClient struct { func (ic *ICalClient) ListEvents(ctx context.Context, starttime time.Time, enddtime time.Time) ([]models.Event, error) { var loadedEvents []models.Event + var filteredEvents []models.Event req, err := http.NewRequestWithContext(ctx, "GET", ic.url, nil) if err != nil { @@ -45,16 +46,22 @@ func (ic *ICalClient) ListEvents(ctx context.Context, starttime time.Time, enddt return nil, err } - //TODO: Implement starttime and endttime filtering eventList := cal.Events() for _, event := range eventList { loadedEvents = append(loadedEvents, calendarEventToEvent(event)) } - return loadedEvents, nil + for _, loadedEvent := range loadedEvents { + if loadedEvent.StartTime.After(starttime) && loadedEvent.EndTime.Before(enddtime) { + filteredEvents = append(filteredEvents, loadedEvent) + } + } + + return filteredEvents, nil } func calendarEventToEvent(e *ical.VEvent) models.Event { + var summary string var location string var timeZone string @@ -76,7 +83,6 @@ func calendarEventToEvent(e *ical.VEvent) models.Event { } summary = e.GetProperty(ical.ComponentPropertySummary).Value - fmt.Println(summary) location = e.GetProperty(ical.ComponentPropertyLocation).Value From 49f5a27f4c056717ed3b43abec28f3318fa5b9f8 Mon Sep 17 00:00:00 2001 From: Vitor Anjos Date: Fri, 20 Dec 2024 16:25:53 -0300 Subject: [PATCH 4/8] WIP --- internal/adapter/adapter.go | 8 +- internal/adapter/ics/client.go | 135 ------------------ .../{ics => outlook_published}/adapter.go | 18 +-- internal/adapter/outlook_published/client.go | 119 +++++++++++++++ .../outlook_published/outlook_json_event.go | 33 +++++ internal/adapter/source_adapter.go | 6 +- 6 files changed, 169 insertions(+), 150 deletions(-) delete mode 100644 internal/adapter/ics/client.go rename internal/adapter/{ics => outlook_published}/adapter.go (71%) create mode 100644 internal/adapter/outlook_published/client.go create mode 100644 internal/adapter/outlook_published/outlook_json_event.go diff --git a/internal/adapter/adapter.go b/internal/adapter/adapter.go index 3e09309..a32fc3a 100644 --- a/internal/adapter/adapter.go +++ b/internal/adapter/adapter.go @@ -7,10 +7,10 @@ import ( type Type string const ( - GoogleCalendarType Type = "google" - ZepCalendarType Type = "zep" - OutlookHttpCalendarType Type = "outlook_http" - ICalendarType Type = "ics" + GoogleCalendarType Type = "google" + ZepCalendarType Type = "zep" + OutlookHttpCalendarType Type = "outlook_http" + OutlookPublishedCalendarType Type = "outlook_published" ) // ConfigReader provides an interface for adapters to load their own configuration map. diff --git a/internal/adapter/ics/client.go b/internal/adapter/ics/client.go deleted file mode 100644 index 89df536..0000000 --- a/internal/adapter/ics/client.go +++ /dev/null @@ -1,135 +0,0 @@ -package ics - -import ( - "context" - "fmt" - ical "github.com/arran4/golang-ical" - "github.com/inovex/CalendarSync/internal/models" - "io" - "net/http" - "strings" - "time" -) - -type ICalClient struct { - url string -} - -func (ic *ICalClient) ListEvents(ctx context.Context, starttime time.Time, enddtime time.Time) ([]models.Event, error) { - var loadedEvents []models.Event - var filteredEvents []models.Event - - req, err := http.NewRequestWithContext(ctx, "GET", ic.url, nil) - if err != nil { - return nil, err - } - - client := http.Client{} - resp, err := client.Do(req) - if err != nil { - return nil, err - } - - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("failed to fetch events: %s", resp.Status) - } - - body, err := io.ReadAll(resp.Body) - if err != nil { - return nil, err - } - - cal, err := ical.ParseCalendar(strings.NewReader(string(body))) - if err != nil { - return nil, err - } - - eventList := cal.Events() - for _, event := range eventList { - loadedEvents = append(loadedEvents, calendarEventToEvent(event)) - } - - for _, loadedEvent := range loadedEvents { - if loadedEvent.StartTime.After(starttime) && loadedEvent.EndTime.Before(enddtime) { - filteredEvents = append(filteredEvents, loadedEvent) - } - } - - return filteredEvents, nil -} - -func calendarEventToEvent(e *ical.VEvent) models.Event { - - var summary string - var location string - var timeZone string - var accepted bool - var allDay bool - var dateStart time.Time - var dateEnd time.Time - - for _, prop := range e.ComponentBase.Properties { - if prop.IANAToken == "X-MICROSOFT-CDO-ALLDAYEVENT" { - value := prop.Value - if value == "TRUE" { - allDay = true - } else { - allDay = false - } - break - } - } - - summary = e.GetProperty(ical.ComponentPropertySummary).Value - - location = e.GetProperty(ical.ComponentPropertyLocation).Value - - status := e.GetProperty(ical.ComponentPropertyStatus).Value - if status == "CONFIRMED" { - accepted = true - } else { - accepted = false - } - - layout := "20060102T150405-0700" - - var rawTimeZone string - if !allDay { - rawTimeZone = e.GetProperty(ical.ComponentPropertyDtStart).ICalParameters["TZID"][0] - } else { - rawTimeZone = "" - } - - switch rawTimeZone { - case "Central America Standard Time": - timeZone = "-0600" - case "South America Standard Time": - timeZone = "-0300" - default: - timeZone = "" - } - - renderedStartDate := e.GetProperty(ical.ComponentPropertyDtStart).Value + timeZone - dateStart, _ = time.Parse(layout, renderedStartDate) - - renderedEndDate := e.GetProperty(ical.ComponentPropertyDtEnd).Value + timeZone - dateEnd, _ = time.Parse(layout, renderedEndDate) - - return models.Event{ - ICalUID: e.Id(), - ID: e.Id(), - Title: summary, - Description: "", - Location: location, - AllDay: allDay, - StartTime: dateStart, - EndTime: dateEnd, - //Metadata: - //Attendees: - //Reminders: - //MeetingLink: - Accepted: accepted, - } -} diff --git a/internal/adapter/ics/adapter.go b/internal/adapter/outlook_published/adapter.go similarity index 71% rename from internal/adapter/ics/adapter.go rename to internal/adapter/outlook_published/adapter.go index 3aa2d3e..10e89a0 100644 --- a/internal/adapter/ics/adapter.go +++ b/internal/adapter/outlook_published/adapter.go @@ -1,4 +1,4 @@ -package ics +package outlook_published import ( "context" @@ -7,18 +7,19 @@ import ( "time" ) -type ICalendarClient interface { +type OutlookPublishedClient interface { ListEvents(ctx context.Context, starttime time.Time, enddtime time.Time) ([]models.Event, error) } type CalendarAPI struct { - icalendarClient ICalendarClient - calendarUrl string - logger *log.Logger + opb OutlookPublishedClient + calendarUrl string + urlPostData string + logger *log.Logger } func (c *CalendarAPI) EventsInTimeframe(ctx context.Context, start time.Time, end time.Time) ([]models.Event, error) { - events, err := c.icalendarClient.ListEvents(ctx, start, end) + events, err := c.opb.ListEvents(ctx, start, end) if err != nil { return nil, err } @@ -29,7 +30,7 @@ func (c *CalendarAPI) EventsInTimeframe(ctx context.Context, start time.Time, en } func (c *CalendarAPI) Name() string { - return "iCalendar" + return "outlook_published" } func (c *CalendarAPI) GetCalendarID() string { @@ -38,8 +39,9 @@ func (c *CalendarAPI) GetCalendarID() string { func (c *CalendarAPI) Initialize(ctx context.Context, openBrowser bool, config map[string]interface{}) error { c.calendarUrl = config["url"].(string) + c.urlPostData = config["postData"].(string) - c.icalendarClient = &ICalClient{url: c.calendarUrl} + c.opb = &OutlookPubClient{url: c.calendarUrl, urlPostData: c.urlPostData} return nil } diff --git a/internal/adapter/outlook_published/client.go b/internal/adapter/outlook_published/client.go new file mode 100644 index 0000000..0063591 --- /dev/null +++ b/internal/adapter/outlook_published/client.go @@ -0,0 +1,119 @@ +package outlook_published + +import ( + "context" + "encoding/json" + "fmt" + "github.com/inovex/CalendarSync/internal/models" + "io" + "net/http" + "net/url" + "strings" + "time" +) + +type OutlookPubClient struct { + url string + urlPostData string +} + +func (opb *OutlookPubClient) ListEvents(ctx context.Context, starttime time.Time, enddtime time.Time) ([]models.Event, error) { + var loadedEvents []models.Event + var filteredEvents []models.Event + + decodedUrlPostData, _ := url.QueryUnescape(opb.urlPostData) + + startTimeFormatted := starttime.Format("2006-01-02T15:04:05.000") + endTimeFormatted := enddtime.Format("2006-01-02T15:04:05.000") + + decodedUrlPostData = strings.Replace(decodedUrlPostData, "2024-11-01T00:00:00.000", startTimeFormatted, 1) + decodedUrlPostData = strings.Replace(decodedUrlPostData, "2025-01-05T23:59:59.999", endTimeFormatted, 1) + + // Encode the modified URL post data + encodedUrlPostData := url.QueryEscape(decodedUrlPostData) + encodedUrlPostData = strings.Replace(encodedUrlPostData, "+", "%20", -1) + + req, err := http.NewRequestWithContext(ctx, "POST", opb.url, nil) + if err != nil { + return nil, err + } + + req.Header.Add("action", "FindItem") + req.Header.Add("content-length", "0") + req.Header.Add("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36") + req.Header.Add("x-owa-urlpostdata", encodedUrlPostData) + + client := http.Client{} + resp, err := client.Do(req) + if err != nil { + return nil, err + } + + body, err := io.ReadAll(resp.Body) // Read the body from the response. + if err != nil { + return nil, fmt.Errorf("error reading response body: %w", err) + } + + // Convert the body to a string. + bodyStr := string(body) + fmt.Println(bodyStr) + + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("failed to fetch events: %s", resp.Status) + } + + var response Response + err = json.Unmarshal([]byte(body), &response) + if err != nil { + return nil, err + } + + for _, event := range response.Body.ResponseMessages.Items[0].RootFolder.Items { + loadedEvents = append(loadedEvents, opb.calendarEventToEvent(event)) + } + + for _, loadedEvent := range loadedEvents { + if loadedEvent.StartTime.After(starttime) && loadedEvent.EndTime.Before(enddtime) { + filteredEvents = append(filteredEvents, loadedEvent) + } + } + fmt.Println(loadedEvents) + + return filteredEvents, nil +} + +func (opb *OutlookPubClient) calendarEventToEvent(e ItemRootFolder) models.Event { + var metadata models.Metadata + metadata = models.Metadata{SyncID: e.ItemId.Id, SourceID: opb.url} + + var dateStart time.Time + var dateEnd time.Time + + dateStart, err := time.Parse(time.RFC3339, e.Start) + if err != nil { + fmt.Printf("error parsing start date: %v\n", err) + } + + dateEnd, err = time.Parse(time.RFC3339, e.End) + if err != nil { + fmt.Printf("error parsing end date: %v\n", err) + } + + return models.Event{ + ICalUID: e.ItemId.Id, + ID: e.ItemId.Id, + Title: e.Subject, + Description: "", + Location: "", + AllDay: false, + StartTime: dateStart, + EndTime: dateEnd, + Metadata: &metadata, + //Attendees: + //Reminders: + //MeetingLink: + Accepted: true, + } +} diff --git a/internal/adapter/outlook_published/outlook_json_event.go b/internal/adapter/outlook_published/outlook_json_event.go new file mode 100644 index 0000000..fdc50ca --- /dev/null +++ b/internal/adapter/outlook_published/outlook_json_event.go @@ -0,0 +1,33 @@ +package outlook_published + +type Response struct { + Body Body `json:"Body"` +} + +type Body struct { + ResponseMessages ResponseMessages `json:"ResponseMessages"` +} + +type ResponseMessages struct { + Items []Item `json:"Items"` +} + +type Item struct { + RootFolder RootFolder `json:"RootFolder"` +} + +type RootFolder struct { + Items []ItemRootFolder `json:"Items"` +} + +type ItemRootFolder struct { + Subject string `json:"Subject"` + Start string `json:"Start"` + End string `json:"End"` + CalendarItemType string `json:"CalendarItemType"` + ItemId ItemId `json:"ItemId"` +} + +type ItemId struct { + Id string `json:"Id"` +} diff --git a/internal/adapter/source_adapter.go b/internal/adapter/source_adapter.go index 5a35803..819c3a9 100644 --- a/internal/adapter/source_adapter.go +++ b/internal/adapter/source_adapter.go @@ -3,7 +3,7 @@ package adapter import ( "context" "fmt" - "github.com/inovex/CalendarSync/internal/adapter/ics" + "github.com/inovex/CalendarSync/internal/adapter/outlook_published" "time" "github.com/charmbracelet/log" @@ -23,8 +23,8 @@ func SourceClientFactory(typ Type) (sync.Source, error) { switch typ { case GoogleCalendarType: return new(google.CalendarAPI), nil - case ICalendarType: - return new(ics.CalendarAPI), nil + case OutlookPublishedCalendarType: + return new(outlook_published.CalendarAPI), nil case ZepCalendarType: return new(zep.CalendarAPI), nil case OutlookHttpCalendarType: From ef0855a30757232caac2c52903b268767104d22a Mon Sep 17 00:00:00 2001 From: Vitor Anjos Date: Fri, 20 Dec 2024 16:41:38 -0300 Subject: [PATCH 5/8] WIP --- internal/adapter/outlook_published/client.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/internal/adapter/outlook_published/client.go b/internal/adapter/outlook_published/client.go index 0063591..d1ec795 100644 --- a/internal/adapter/outlook_published/client.go +++ b/internal/adapter/outlook_published/client.go @@ -53,11 +53,6 @@ func (opb *OutlookPubClient) ListEvents(ctx context.Context, starttime time.Time if err != nil { return nil, fmt.Errorf("error reading response body: %w", err) } - - // Convert the body to a string. - bodyStr := string(body) - fmt.Println(bodyStr) - defer resp.Body.Close() if resp.StatusCode != http.StatusOK { @@ -79,7 +74,6 @@ func (opb *OutlookPubClient) ListEvents(ctx context.Context, starttime time.Time filteredEvents = append(filteredEvents, loadedEvent) } } - fmt.Println(loadedEvents) return filteredEvents, nil } From 09b594aa8ac1262b2e6472bb38ead41242fc86e8 Mon Sep 17 00:00:00 2001 From: Vitor Anjos Date: Mon, 23 Dec 2024 08:56:50 -0300 Subject: [PATCH 6/8] update --- internal/adapter/google/adapter.go | 2 +- internal/adapter/outlook_http/adapter.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/adapter/google/adapter.go b/internal/adapter/google/adapter.go index 13af05f..d8c25fd 100644 --- a/internal/adapter/google/adapter.go +++ b/internal/adapter/google/adapter.go @@ -108,7 +108,7 @@ func (c *CalendarAPI) Initialize(ctx context.Context, openBrowser bool, config m if !c.authenticated { c.oAuthUrl = c.oAuthHandler.Configuration().AuthCodeURL("state", oauth2.AccessTypeOffline) if openBrowser { - c.logger.Infof("opening browser window for authentication of %s\n", c.Name()) + c.logger.Infof("opening browser window for authentication of %s - %s\n", c.Name(), c.calendarID) err := browser.OpenURL(c.oAuthUrl) if err != nil { c.logger.Infof("browser did not open, please authenticate adapter %s:\n\n %s\n\n\n", c.Name(), c.oAuthUrl) diff --git a/internal/adapter/outlook_http/adapter.go b/internal/adapter/outlook_http/adapter.go index f343d83..a17ce62 100644 --- a/internal/adapter/outlook_http/adapter.go +++ b/internal/adapter/outlook_http/adapter.go @@ -166,7 +166,7 @@ func (c *CalendarAPI) Initialize(ctx context.Context, openBrowser bool, config m c.oAuthUrl = c.oAuthHandler.Configuration().AuthCodeURL("state", oauth2.AccessTypeOffline) if openBrowser { - c.logger.Infof("opening browser window for authentication of %s\n", c.Name()) + c.logger.Infof("opening browser window for authentication of %s - %s\n", c.Name(), c.calendarID) err := browser.OpenURL(c.oAuthUrl) if err != nil { c.logger.Infof("browser did not open, please authenticate adapter %s:\n\n %s\n\n\n", c.Name(), c.oAuthUrl) From 82ceb665da713be1eccee25769dcb6e2cd85d04a Mon Sep 17 00:00:00 2001 From: Vitor Anjos Date: Fri, 24 Jan 2025 19:11:39 -0300 Subject: [PATCH 7/8] update --- docs/adapters.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/docs/adapters.md b/docs/adapters.md index 72a458e..5ff4973 100644 --- a/docs/adapters.md +++ b/docs/adapters.md @@ -85,3 +85,35 @@ and a `clientSecret`. Make sure to add the `clientSecret` to the `clientKey` setting in your CalendarSync configuration. If you want to use the created OAuth Application also with accounts outside of your Google Workspace, make sure to set the Usertype to `external` in the `OAuth Consent Screen` Menu. + + +## Outlook Published Calendar Adapter Setup +The Outlook Published Calendar adapter allows you to sync with publicly shared Outlook calendars without OAuth authentication. + +### Configuration +```yaml +source: + adapter: + type: "outlook_published" + config: + url: "" + postData: "" + ``` + +### How to Get Configuration Values + +3. Get the URL and postData: + - Open the calendar.html URL in your browser with Developer Tools open (F12) + - In the Network tab, look for a request to `service.svc` with parameters `action=FindItem&app=PublishedCalendar` + - From this request: + - For `url`: Copy the full request URL (example format: `https://outlook.office365.com/owa/published/@//service.svc?action=FindItem&app=PublishedCalendar&n=2`) + - For `postData`: In the request headers, find and copy the value of the `x-owa-urlpostdata` header + +![](../assets/outlook_published_devtools.png) + +Note: The postData value contains time range information that the adapter will automatically update during synchronization. + +### Limitations +- Read-only access (cannot create, update, or delete events) +- Requires the calendar to be publicly accessible +- Some event details might be limited compared to the OAuth-based adapter \ No newline at end of file From 36e665581459f93a4139648b35d17ae52bfc047b Mon Sep 17 00:00:00 2001 From: Vitor Anjos Date: Fri, 24 Jan 2025 19:16:25 -0300 Subject: [PATCH 8/8] update --- assets/outlook_published_devtools.png | Bin 0 -> 90860 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/outlook_published_devtools.png diff --git a/assets/outlook_published_devtools.png b/assets/outlook_published_devtools.png new file mode 100644 index 0000000000000000000000000000000000000000..fdbf1fc55a97bbf85e18ffcf9590c582a9e89347 GIT binary patch literal 90860 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 VZm0L^+hg#bzK)@G3C2G3{{hJ}hVcLZ literal 0 HcmV?d00001