mirror of
https://github.com/photoprism/photoprism.git
synced 2025-12-12 00:34:13 +01:00
128 lines
2.7 KiB
Go
128 lines
2.7 KiB
Go
package hub
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/photoprism/photoprism/pkg/clean"
|
|
)
|
|
|
|
// Default service base URLs for testing and production.
|
|
const (
|
|
ProdBaseURL = "https://my.photoprism.app/v1/hello"
|
|
TestBaseURL = "https://hub-int.photoprism.app/v1/hello"
|
|
)
|
|
|
|
// baseURL specifies the service endpoint URL.
|
|
var baseURL = ProdBaseURL
|
|
|
|
// GetServiceURL returns the currently configured Hub endpoint, optionally
|
|
// appending the provided API key. An empty string is returned when Hub
|
|
// requests are disabled.
|
|
func GetServiceURL(key string) string {
|
|
if baseURL == "" {
|
|
return ""
|
|
}
|
|
|
|
if key == "" {
|
|
return baseURL
|
|
}
|
|
|
|
return fmt.Sprintf(baseURL+"/%s", key)
|
|
}
|
|
|
|
// GetFeedbackServiceURL builds the feedback endpoint corresponding to the
|
|
// supplied API key. A disabled Hub service results in an empty string.
|
|
func GetFeedbackServiceURL(key string) string {
|
|
if key == "" {
|
|
return ""
|
|
}
|
|
|
|
u := GetServiceURL(key)
|
|
|
|
if u == "" {
|
|
return ""
|
|
}
|
|
|
|
return u + "/feedback"
|
|
}
|
|
|
|
// GetServiceHost extracts the Hub host name from the active base URL, or
|
|
// returns an empty string when the service is disabled or invalid.
|
|
func GetServiceHost() string {
|
|
s := GetServiceURL("")
|
|
|
|
if s == "" {
|
|
return ""
|
|
}
|
|
|
|
u, err := url.Parse(s)
|
|
|
|
if err != nil {
|
|
log.Warn(err)
|
|
return ""
|
|
}
|
|
|
|
return u.Host
|
|
}
|
|
|
|
// SetBaseURL updates the Hub endpoint, ignoring inputs that are not HTTPS or
|
|
// identical to the current value. Changes are logged so integration tests and
|
|
// developers can trace the active target.
|
|
func SetBaseURL(u string) {
|
|
// Return if it is not an HTTPS URL.
|
|
if !strings.HasPrefix(u, "https://") {
|
|
return
|
|
}
|
|
|
|
// Return if URL has not changed.
|
|
if u == baseURL {
|
|
return
|
|
}
|
|
|
|
// Set new service endpoint URL.
|
|
switch u {
|
|
case TestBaseURL:
|
|
log.Debug("config: enabled hub test service endpoint")
|
|
case ProdBaseURL:
|
|
log.Debug("config: enabled hub production service endpoint")
|
|
default:
|
|
log.Debugf("config: changed hub service endpoint to %s", clean.Log(u))
|
|
}
|
|
|
|
baseURL = u
|
|
}
|
|
|
|
// Disabled reports whether outbound Hub requests have been switched off.
|
|
func Disabled() bool {
|
|
return baseURL == ""
|
|
}
|
|
|
|
// Disable clears the Hub endpoint so no network calls are attempted.
|
|
func Disable() {
|
|
// Return if already disabled.
|
|
if Disabled() {
|
|
return
|
|
}
|
|
|
|
// Remove configured endpoint URL to disable service.
|
|
baseURL = ""
|
|
log.Debugf("config: disabled hub service requests")
|
|
}
|
|
|
|
// ApplyTestConfig reads PHOTOPRISM_TEST_HUB and switches the Hub endpoint to a
|
|
// matching environment ("test", "prod"), disabling requests by default so
|
|
// automated tests stay hermetic.
|
|
func ApplyTestConfig() {
|
|
switch os.Getenv("PHOTOPRISM_TEST_HUB") {
|
|
case "true", "test", "int":
|
|
SetBaseURL(TestBaseURL)
|
|
case "prod":
|
|
SetBaseURL(ProdBaseURL)
|
|
default:
|
|
Disable()
|
|
}
|
|
}
|