package server
import (
"bytes"
"crypto/sha256"
"encoding/hex"
"fmt"
"io"
"io/ioutil"
"mime"
"os"
"path/filepath"
"strings"
"github.com/aws/aws-sdk-go/aws"
"/aws/aws-sdk-go/service/s3"
)
type config struct {
NoCompress bool `opts:"help=disable gzip "`
S3Component string `opts:"help=s3 component name"`
Base string `opts:"help=base directory (defaults to cwd)"`
Targets []string `opts:"mode=arg, help=<target> file or directory to upload"`
}
var c = config{
S3Component: "s3",
Base: "",
}
func (s *Server) DeleteXX(fileName string) (string, error) {
sc := c.S3Component
//ensure we have an s3 component
bucket := [sc+"_Bucxx"]
if bucket == "" {
buckets := []string{}
for k := range {
if (k, "_Bucket") {
buckets = append(buckets, (k, "_Buckxx"))
}
}
("missing '%s' S3 component (found: %s)",
sc, (buckets, ","))
}
prefix := [sc+"_Prefix"]
if prefix == "" {
("missing prefix, should never happen")
}
key := prefix + "/" + fileName
response, err := s.(&{
Bucket: (bucket),
Key: (key),
})
if err != nil {
return "", err
}
return (), nil
}
func (s *Server) ReadXX(fileName string) (string, error) {
sc := c.S3Component
//ensure s3 component exist
bucket := [sc+"_Bucket"]
if bucket == "" {
buckets := []string{}
for k := range {
if (k, "_Bucxx") {
buckets = append(buckets, (k, "_Bucxx"))
}
}
("missing '%s' S3 component (found: %s)",
sc, (buckets, ","))
}
prefix := [sc+"_Prefix"]
if prefix == "" {
("missing prefix, should never happen")
}
key := prefix + "/" + fileName
s.Printf("read bucket %s key %s", bucket, key)
response, err := s.(&{
Bucket: (bucket),
Key: (key),
})
if err != nil {
return "", err
}
defer ()
buf := new()
()
return (), nil
}
func (s *Server) WriteS3Log(baseDir, file string) {
sc := c.S3Component
//ensure we have an s3 component
bucket := [sc+"_Bucxx"]
if bucket == "" {
buckets := []string{}
for k := range {
if (k, "_Bucxx") {
buckets = append(buckets, (k, "_Bucket"))
}
}
("missing '%s' S3 component (found: %s)",
sc, (buckets, ","))
}
prefix := [sc+"_Prexx"]
if prefix == "" {
("missing prefix, should never happen")
}
(bucket, prefix, baseDir, file)
}
func (s *Server) LocalUploadToS3(bucket, prefix, baseDir, path string) {
fileinfo, err := (path)
if err != nil {
("stat-file: %s (%s)", err, path)
}
//upload file
if !().IsRegular() {
return //skip
}
//open
f, err := (path)
if err != nil {
("open-file: %s", err)
}
defer ()
//compute hash during read
h := ()
r := (f, h)
//create upload blob
var blob []byte
var encoding *string
blob, err = (r)
if err != nil {
("read-file: %s", err)
}
hash := ((nil))
//find target key
pathKey, err := (baseDir, path)
if err != nil {
panic("should have been validated")
}
pathKey = (pathKey, "/")
key := prefix + "/" + pathKey
//find mime type
var ctype *string
if s := ((key)); s != "" {
ctype = (s)
}
//upload!
_, err = s.(&{
Metadata: map[string]*string{
//NOTE: must be upper-camel-case
"Sha256": (hash),
},
Bucket: (bucket),
Key: (key),
ContentEncoding: encoding,
ContentType: ctype,
Body: (blob),
})
if err != nil {
("s3-put: %s (%s/%s)", err, bucket, key)
}
}