An experimental IndieWeb site built in Go.
1package handlers
2
3import (
4 "fmt"
5 "io"
6 "net/http"
7 "os"
8 "strings"
9
10 "github.com/aws/aws-sdk-go-v2/aws"
11 "github.com/aws/aws-sdk-go-v2/service/s3"
12 "github.com/puregarlic/space/storage"
13)
14
15func ServeMedia(w http.ResponseWriter, r *http.Request) {
16 key := strings.TrimPrefix(r.URL.Path, "/")
17
18 res, err := storage.S3().GetObject(r.Context(), &s3.GetObjectInput{
19 Bucket: aws.String(os.Getenv("AWS_S3_BUCKET_NAME")),
20 Key: &key,
21 })
22 if err != nil {
23 fmt.Println("failed to get object", err)
24 panic(err)
25 }
26
27 defer res.Body.Close()
28
29 w.Header().Set("Cache-Control", "604800")
30
31 if _, err := io.Copy(w, res.Body); err != nil {
32 fmt.Println("failed to send object", err)
33 panic(err)
34 }
35}