Backend: Add signature to PhotoPrism Places API requests

Signed-off-by: Michael Mayer <michael@liquidbytes.net>
This commit is contained in:
Michael Mayer 2020-09-06 14:48:09 +02:00
parent 33888fd231
commit 641ffd397d
2 changed files with 11 additions and 3 deletions

View file

@ -32,6 +32,7 @@ func NewCredentials() *Credentials {
// Propagate updates api credentials in other packages. // Propagate updates api credentials in other packages.
func (a *Credentials) Propagate() { func (a *Credentials) Propagate() {
places.Key = a.Key places.Key = a.Key
places.Secret = a.Secret
} }
// Sanitize verifies and sanitizes api credentials; // Sanitize verifies and sanitizes api credentials;

View file

@ -1,6 +1,7 @@
package places package places
import ( import (
"crypto/sha1"
"encoding/json" "encoding/json"
"fmt" "fmt"
"net/http" "net/http"
@ -24,9 +25,10 @@ type Location struct {
const ApiName = "photoprism places" const ApiName = "photoprism places"
var Key = "" var Key = "f60f5b25d59c397989e3cd374f81cdd7710a4fca"
var Secret = "photoprism"
var UserAgent = "PhotoPrism/DEVELOP" var UserAgent = "PhotoPrism/DEVELOP"
var ReverseLookupURL = "https://places.photoprism.pro/v1/location/%s?key=%s" var ReverseLookupURL = "https://places.photoprism.pro/v1/location/%s"
var client = &http.Client{Timeout: 60 * time.Second} var client = &http.Client{Timeout: 60 * time.Second}
func NewLocation(id string, lat, lng float64, name, category string, place Place, cached bool) *Location { func NewLocation(id string, lat, lng float64, name, category string, place Place, cached bool) *Location {
@ -65,7 +67,7 @@ func FindLocation(id string) (result Location, err error) {
} }
} }
url := fmt.Sprintf(ReverseLookupURL, id, Key) url := fmt.Sprintf(ReverseLookupURL, id)
log.Debugf("api: sending request to %s (%s)", url, ApiName) log.Debugf("api: sending request to %s (%s)", url, ApiName)
@ -78,6 +80,11 @@ func FindLocation(id string) (result Location, err error) {
req.Header.Set("User-Agent", UserAgent) req.Header.Set("User-Agent", UserAgent)
if Key != "" {
req.Header.Set("X-Key", Key)
req.Header.Set("X-Signature", fmt.Sprintf("%x", sha1.Sum([]byte(Key+url+Secret))))
}
var r *http.Response var r *http.Response
for i := 0; i < 3; i++ { for i := 0; i < 3; i++ {