/
gozo.go
102 lines (85 loc) · 1.71 KB
/
gozo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package main
import (
"crypto/sha1"
"encoding/hex"
"fmt"
"github.com/mitchellh/goamz/aws"
"github.com/mitchellh/goamz/s3"
"io/ioutil"
"log"
"time"
)
type Gozo struct {
accessKey string
secretAccessKey string
bucketName string
region aws.Region
rootURL string
}
func NewGozo(accessKey string, secretAccessKey string, bucketName string, region aws.Region, rootURL string) *Gozo {
gozo := &Gozo{
accessKey,
secretAccessKey,
bucketName,
region,
rootURL,
}
return gozo
}
func (gozo Gozo) SendImage(filename string) (url string, err error) {
data, err := ioutil.ReadFile(filename)
if err != nil {
return
}
auth, err := aws.GetAuth(
gozo.accessKey,
gozo.secretAccessKey,
)
if err != nil {
return
}
s3client := s3.New(auth, gozo.region)
bucket := s3client.Bucket(gozo.bucketName)
path := "images/" + hexdigest(fmt.Sprintf("%s-%d", filename, time.Now().Unix())) + ".png"
err = bucket.Put(path, data, "image/png", s3.PublicRead)
if err != nil {
return
}
url = gozo.rootURL + path
return
}
func (gozo Gozo) SendCapture() (url string, err error) {
img, err := CaptureImage()
if err != nil {
return
}
if img == nil {
url = ""
return
}
defer func() {
if img != nil {
if err := img.Remove(); err != nil {
log.Fatal(err)
}
}
}()
url, err = gozo.SendImage(img.Name())
return
}
func (gozo Gozo) SendFile(filename string) (url string, err error) {
img := new(Image)
img.name = filename
if err = img.ToPng(); err != nil {
return
}
if err = img.RemoveProfile(); err != nil {
return
}
url, err = gozo.SendImage(img.Name())
return
}
func hexdigest(s string) string {
hash := sha1.Sum([]byte(s))
return hex.EncodeToString(hash[:])
}