105 lines
2.2 KiB
Go
105 lines
2.2 KiB
Go
package main
|
|
|
|
//go:generate go-bindata -fs -prefix "../../web/" "../../web/..."
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
|
|
"git.makerforce.io/photos/photos/internal/httphelpers"
|
|
lib "git.makerforce.io/photos/photos/pkg/bucket"
|
|
)
|
|
|
|
var client *lib.Client
|
|
var sharedFileServer http.Handler
|
|
|
|
var endpoint string
|
|
|
|
func main() {
|
|
// Read configuration
|
|
endpoint = os.Getenv("WEB_ENDPOINT")
|
|
|
|
// Setup bucket client
|
|
var err error
|
|
client, err = lib.NewClientFromEnv()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
sharedFileServer = http.FileServer(AssetFile())
|
|
|
|
server := &http.Server{
|
|
Addr: ":8004",
|
|
ReadTimeout: 5 * time.Second,
|
|
WriteTimeout: 10 * time.Second,
|
|
}
|
|
http.HandleFunc("/shared/", shared)
|
|
http.HandleFunc("/update", update)
|
|
err = server.ListenAndServe()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func shared(w http.ResponseWriter, req *http.Request) {
|
|
// For static files, allow all CORS
|
|
w.Header().Add("Access-Control-Allow-Origin", "*")
|
|
|
|
sharedFileServer.ServeHTTP(w, req)
|
|
return
|
|
}
|
|
|
|
func update(w http.ResponseWriter, req *http.Request) {
|
|
if req.Method != http.MethodPost {
|
|
err := fmt.Errorf("%w: %v", httphelpers.ErrorMethodNotAllowed, req.Method)
|
|
httphelpers.ErrorResponse(w, err)
|
|
return
|
|
}
|
|
|
|
bucket := lib.Bucket(req.FormValue("bucket"))
|
|
/*
|
|
bucketMetadata, err := client.GetBucketMetadata(bucket)
|
|
previewOptions := bucketMetadata.PreviewOptions
|
|
*/
|
|
|
|
metadata, err := client.GetBucketMetadata(bucket)
|
|
photos, err := client.GetPhotos(bucket)
|
|
if err != nil {
|
|
httphelpers.ErrorResponse(w, err)
|
|
return
|
|
}
|
|
|
|
detailedPhotos := make([]Photo, 0)
|
|
for _, photo := range photos {
|
|
photoMetadata, err := client.GetPhotoMetadata(bucket, photo)
|
|
if err != nil {
|
|
err := fmt.Errorf("%w: %v", err, photo)
|
|
httphelpers.ErrorResponse(w, err)
|
|
return
|
|
}
|
|
detailedPhotos = append(detailedPhotos, Photo{photo, photoMetadata})
|
|
}
|
|
|
|
data := IndexTemplateData{
|
|
Assets: endpoint + "/shared/",
|
|
Bucket: bucket,
|
|
Metadata: metadata,
|
|
Photos: detailedPhotos,
|
|
}
|
|
indexBuf := new(bytes.Buffer)
|
|
err = indexTemplate.Execute(indexBuf, data)
|
|
if err != nil {
|
|
httphelpers.ErrorResponse(w, err)
|
|
return
|
|
}
|
|
|
|
err = client.PutBucketWeb(bucket, indexBuf.Bytes())
|
|
if err != nil {
|
|
httphelpers.ErrorResponse(w, err)
|
|
return
|
|
}
|
|
}
|