| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- package services
- import (
- "context"
- "encoding/json"
- "errors"
- "net/http"
- "os"
- "time"
- "asterisk.is/dimesheet/models"
- "golang.org/x/oauth2/google"
- "google.golang.org/api/calendar/v3"
- "google.golang.org/api/option"
- )
- func get_calendar_client() (*http.Client, *context.Context, error) {
- // Load service account credentials from JSON file
- credentialsFile := "credentials.json"
- b, err := os.ReadFile(credentialsFile)
- if err != nil {
- //http.Error(w, "Unable to read service account file", http.StatusInternalServerError)
- return nil, nil, errors.New("Unable to read service account file")
- }
- // Create a Google Calendar service with service account credentials
- ctx := context.Background()
- config, err := google.JWTConfigFromJSON(b, calendar.CalendarReadonlyScope)
- if err != nil {
- //http.Error(w, "Unable to parse service account file to config", http.StatusInternalServerError)
- return nil, nil, errors.New("Unable to parse service account file to config")
- }
- client := config.Client(ctx)
- return client, &ctx, nil
- }
- func GetEvents() ([]*calendar.Event, error) {
- // Create a new Google Calendar service
- cal_client, ctx, err := get_calendar_client()
- if err != nil {
- return nil, errors.New("Something went wrong:" + err.Error())
- }
- // Create a new Google Calendar service
- srv, err := calendar.NewService(*ctx, option.WithHTTPClient(cal_client))
- if err != nil {
- return nil, errors.New("Unable to retrieve Calendar client")
- }
- // Call the Google Calendar API
- events, err := srv.Events.List("c_9f1bb79a8eaa9761c51ce066f845131ab5c17794c863ba3d58e9124645c6451a@group.calendar.google.com").MaxResults(10).OrderBy("startTime").SingleEvents(true).TimeMin(time.Now().Format(time.RFC3339)).Do()
- if err != nil {
- return nil, errors.New("Unable to retrieve events")
- }
- return events.Items, nil
- }
- func GetClients() ([]models.Client, error) {
- // Create a new Google Calendar service
- cal_client, ctx, err := get_calendar_client()
- if err != nil {
- return nil, errors.New("Something went wrong:" + err.Error())
- }
- srv, err := calendar.NewService(*ctx, option.WithHTTPClient(cal_client))
- if err != nil {
- return nil, errors.New("Unable to retrieve Calendar client")
- }
- // Call the Google Calendar API
- events, err := srv.CalendarList.List().Do() //srv.Events.List("primary").MaxResults(10).OrderBy("startTime").SingleEvents(true).TimeMin(time.Now().Format(time.RFC3339)).Do()
- if err != nil {
- return nil, errors.New("Unable to retrieve events")
- }
- array := make([]models.Client, 0, len(events.Items))
- for _, calendar_item := range events.Items {
- c := models.Client{}
- s := calendar_item.Description
- err := json.Unmarshal([]byte(s), &c)
- if err != nil {
- panic(err)
- }
- c.CalendarListEntry = calendar_item
- array = append(array, c)
- }
- return array, nil
- }
|