1
0
Fork 0
photos/cmd/web/web.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
}
}