calendar.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package services
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "net/http"
  7. "os"
  8. "time"
  9. "asterisk.is/dimesheet/models"
  10. "golang.org/x/oauth2/google"
  11. "google.golang.org/api/calendar/v3"
  12. "google.golang.org/api/option"
  13. )
  14. func get_calendar_client() (*http.Client, *context.Context, error) {
  15. // Load service account credentials from JSON file
  16. credentialsFile := "credentials.json"
  17. b, err := os.ReadFile(credentialsFile)
  18. if err != nil {
  19. //http.Error(w, "Unable to read service account file", http.StatusInternalServerError)
  20. return nil, nil, errors.New("Unable to read service account file")
  21. }
  22. // Create a Google Calendar service with service account credentials
  23. ctx := context.Background()
  24. config, err := google.JWTConfigFromJSON(b, calendar.CalendarReadonlyScope)
  25. if err != nil {
  26. //http.Error(w, "Unable to parse service account file to config", http.StatusInternalServerError)
  27. return nil, nil, errors.New("Unable to parse service account file to config")
  28. }
  29. client := config.Client(ctx)
  30. return client, &ctx, nil
  31. }
  32. func GetEvents() ([]*calendar.Event, error) {
  33. // Create a new Google Calendar service
  34. cal_client, ctx, err := get_calendar_client()
  35. if err != nil {
  36. return nil, errors.New("Something went wrong:" + err.Error())
  37. }
  38. // Create a new Google Calendar service
  39. srv, err := calendar.NewService(*ctx, option.WithHTTPClient(cal_client))
  40. if err != nil {
  41. return nil, errors.New("Unable to retrieve Calendar client")
  42. }
  43. // Call the Google Calendar API
  44. events, err := srv.Events.List("c_9f1bb79a8eaa9761c51ce066f845131ab5c17794c863ba3d58e9124645c6451a@group.calendar.google.com").MaxResults(10).OrderBy("startTime").SingleEvents(true).TimeMin(time.Now().Format(time.RFC3339)).Do()
  45. if err != nil {
  46. return nil, errors.New("Unable to retrieve events")
  47. }
  48. return events.Items, nil
  49. }
  50. func GetClients() ([]models.Client, error) {
  51. // Create a new Google Calendar service
  52. cal_client, ctx, err := get_calendar_client()
  53. if err != nil {
  54. return nil, errors.New("Something went wrong:" + err.Error())
  55. }
  56. srv, err := calendar.NewService(*ctx, option.WithHTTPClient(cal_client))
  57. if err != nil {
  58. return nil, errors.New("Unable to retrieve Calendar client")
  59. }
  60. // Call the Google Calendar API
  61. events, err := srv.CalendarList.List().Do() //srv.Events.List("primary").MaxResults(10).OrderBy("startTime").SingleEvents(true).TimeMin(time.Now().Format(time.RFC3339)).Do()
  62. if err != nil {
  63. return nil, errors.New("Unable to retrieve events")
  64. }
  65. array := make([]models.Client, 0, len(events.Items))
  66. for _, calendar_item := range events.Items {
  67. c := models.Client{}
  68. s := calendar_item.Description
  69. err := json.Unmarshal([]byte(s), &c)
  70. if err != nil {
  71. panic(err)
  72. }
  73. c.CalendarListEntry = calendar_item
  74. array = append(array, c)
  75. }
  76. return array, nil
  77. }