s3manager-web/cmd/s3manager/main.go

91 lines
2.5 KiB
Go
Raw Normal View History

2017-05-08 23:07:07 +02:00
package main
import (
"flag"
"log"
"net/http"
"os"
2018-03-14 21:53:35 +01:00
"path/filepath"
2017-05-08 23:07:07 +02:00
"github.com/gorilla/mux"
2018-01-06 14:09:06 +01:00
"github.com/mastertinner/adapters/logging"
2018-03-14 21:53:35 +01:00
"github.com/mastertinner/s3manager/internal/app/s3manager"
2017-05-08 23:07:07 +02:00
minio "github.com/minio/minio-go"
2017-05-25 18:33:44 +02:00
"github.com/pkg/errors"
2017-05-08 23:07:07 +02:00
)
func main() {
var (
port = flag.String("port", "8080", "the port the app should listen on")
endpoint = flag.String("endpoint", "s3.amazonaws.com", "the s3 endpoint to use")
accessKeyID = flag.String("access-key-id", "", "your s3 access key ID")
secretAccessKey = flag.String("secret-access-key", "", "your s3 secret access key")
v2Signing = flag.Bool("v2-signing", false, "set this flag if your S3 provider still uses V2 signing")
)
flag.Parse()
if *accessKeyID == "" || *secretAccessKey == "" {
flag.Usage()
os.Exit(2)
}
// Set up S3 client
var s3 *minio.Client
var err error
if *v2Signing {
s3, err = minio.NewV2(*endpoint, *accessKeyID, *secretAccessKey, true)
} else {
s3, err = minio.New(*endpoint, *accessKeyID, *secretAccessKey, true)
}
if err != nil {
2017-05-25 18:33:44 +02:00
log.Fatalln(errors.Wrap(err, "error creating s3 client"))
2017-05-08 23:07:07 +02:00
}
2018-03-14 21:53:35 +01:00
tmplDir := filepath.Join("web", "template")
2017-05-08 23:07:07 +02:00
// Set up router
r := mux.NewRouter().StrictSlash(true)
r.Use(logging.Handler(os.Stdout))
2017-05-08 23:07:07 +02:00
r.
Methods(http.MethodGet).
Path("/").
2017-09-19 19:00:57 +02:00
Handler(http.RedirectHandler("/buckets", http.StatusPermanentRedirect))
2017-05-08 23:07:07 +02:00
r.
Methods(http.MethodGet).
Path("/buckets").
2018-03-14 21:53:35 +01:00
Handler(s3manager.BucketsViewHandler(s3, tmplDir))
2017-05-08 23:07:07 +02:00
r.
Methods(http.MethodGet).
Path("/buckets/{bucketName}").
2018-03-14 21:53:35 +01:00
Handler(s3manager.BucketViewHandler(s3, tmplDir))
2017-05-08 23:07:07 +02:00
r.
Methods(http.MethodPost).
Path("/api/buckets").
2017-09-19 19:00:57 +02:00
Handler(s3manager.CreateBucketHandler(s3))
2017-05-08 23:07:07 +02:00
r.
Methods(http.MethodDelete).
Path("/api/buckets/{bucketName}").
2017-09-19 19:00:57 +02:00
Handler(s3manager.DeleteBucketHandler(s3))
2017-05-08 23:07:07 +02:00
r.
Methods(http.MethodPost).
2018-05-22 22:56:01 +02:00
Headers("Content-Type", "application/json; charset=utf-8").
2017-05-08 23:07:07 +02:00
Path("/api/buckets/{bucketName}/objects").
2017-09-19 19:00:57 +02:00
Handler(s3manager.CopyObjectHandler(s3))
2017-05-08 23:07:07 +02:00
r.
Methods(http.MethodPost).
2018-05-22 22:56:01 +02:00
HeadersRegexp("Content-Type", "multipart/form-data").
2017-05-08 23:07:07 +02:00
Path("/api/buckets/{bucketName}/objects").
2017-09-19 19:00:57 +02:00
Handler(s3manager.CreateObjectHandler(s3))
2017-05-08 23:07:07 +02:00
r.
Methods(http.MethodGet).
Path("/api/buckets/{bucketName}/objects/{objectName}").
2017-09-19 19:00:57 +02:00
Handler(s3manager.GetObjectHandler(s3))
2017-05-08 23:07:07 +02:00
r.
Methods(http.MethodDelete).
Path("/api/buckets/{bucketName}/objects/{objectName}").
2017-09-19 19:00:57 +02:00
Handler(s3manager.DeleteObjectHandler(s3))
2017-05-08 23:07:07 +02:00
log.Fatal(http.ListenAndServe(":"+*port, r))
2017-05-08 23:07:07 +02:00
}