diff --git a/config/config.go b/config/config.go index 1dc71aa..940ae9c 100644 --- a/config/config.go +++ b/config/config.go @@ -43,6 +43,7 @@ type config struct { Google struct { Username string `yaml:"username" envconfig:"GOOGLE_USERNAME"` + OAuthUrl string `yaml:"oauth_url" envconfig:"GOOGLE_OAUTH_URL"` Credentials Credentials `yaml:"credentials" envconfig:"GOOGLE_CREDENTIALS"` } `yaml:"google"` } diff --git a/home/home.go b/home/home.go index 4ea36c5..d1f7f24 100644 --- a/home/home.go +++ b/home/home.go @@ -19,7 +19,7 @@ type Home struct { } // Auto populate and update the device list -func New(username string, credentials config.Credentials) *Home { +func New(username string, credentials config.Credentials, oauthUrl string) *Home { home := &Home{Username: username, Devices: make(map[device.InternalName]device.Basic)} homegraphService, err := homegraph.NewService(context.Background(), option.WithCredentialsJSON(credentials)) @@ -27,7 +27,7 @@ func New(username string, credentials config.Credentials) *Home { panic(err) } - home.Service = google.NewService(home, homegraphService) + home.Service = google.NewService(home, homegraphService, oauthUrl) return home } diff --git a/integration/google/handler.go b/integration/google/handler.go index e28ed21..c238a2f 100644 --- a/integration/google/handler.go +++ b/integration/google/handler.go @@ -3,6 +3,7 @@ package google import ( "automation/device" "encoding/json" + "fmt" "io" "log" "net/http" @@ -34,8 +35,8 @@ type syncResponse struct { type queryResponse struct { RequestID string `json:"requestId"` Payload struct { - ErrorCode string `json:"errorCode,omitempty"` - DebugString string `json:"debugString,omitempty"` + ErrorCode string `json:"errorCode,omitempty"` + DebugString string `json:"debugString,omitempty"` Devices map[string]DeviceState `json:"devices"` } `json:"payload"` } @@ -66,7 +67,7 @@ func (s *Service) getUser(authorization string) (string, int) { return cached.Value(), http.StatusOK } - req, err := http.NewRequest("GET", "https://login.huizinga.dev/api/oidc/userinfo", nil) + req, err := http.NewRequest("GET", fmt.Sprintf("%s/userinfo", s.oauthUrl), nil) if err != nil { log.Println("Failed to make request to to login server") return "", http.StatusInternalServerError @@ -219,7 +220,7 @@ func (s *Service) FullfillmentHandler(w http.ResponseWriter, r *http.Request) { for errCode, details := range response.FailedDevices { c := executeRespPayload{ - Status: StatusError, + Status: StatusError, ErrorCode: errCode, } diff --git a/integration/google/service.go b/integration/google/service.go index c6785d8..136061d 100644 --- a/integration/google/service.go +++ b/integration/google/service.go @@ -32,13 +32,16 @@ type Provider interface { type Service struct { provider Provider deviceService *homegraph.DevicesService - cache *ttlcache.Cache[string, string] + oauthUrl string + + cache *ttlcache.Cache[string, string] } -func NewService(provider Provider, service *homegraph.Service) *Service { +func NewService(provider Provider, service *homegraph.Service, oauthUrl string) *Service { s := Service{ provider: provider, deviceService: homegraph.NewDevicesService(service), + oauthUrl: oauthUrl, cache: ttlcache.New( ttlcache.WithTTL[string, string](30 * time.Minute), ), diff --git a/main.go b/main.go index 53025b2..02ce89f 100644 --- a/main.go +++ b/main.go @@ -29,7 +29,7 @@ func main() { notify := ntfy.New(cfg.Ntfy.Topic) hue := hue.New(cfg.Hue.IP, cfg.Hue.Token) - home := home.New(cfg.Google.Username, cfg.Google.Credentials) + home := home.New(cfg.Google.Username, cfg.Google.Credentials, cfg.Google.OAuthUrl) r := mux.NewRouter() r.HandleFunc("/assistant", home.Service.FullfillmentHandler)