Skip to content

Commit b95ef18

Browse files
authored
Merge pull request #1 from devsapp/support-run-local
Support run local
2 parents db2c7c4 + 0f0f820 commit b95ef18

4 files changed

Lines changed: 109 additions & 2 deletions

File tree

src/code/const.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ const (
2020
fcAccountID = "x-fc-account-id"
2121
fcQualifier = "x-fc-qualifier"
2222
fcVersionID = "x-fc-version-id"
23+
)
2324

25+
var (
2426
CertPEM_PATH = "cert/test-cert.pem"
2527
PrivateKeyPEM_PATH = "cert/test-priv.pem"
2628
WORK_DIR_BASE = "/mnt/auto"

src/code/handler.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ func parseRange(r string) (int64, int64, error) {
3333
return 0, 0, err
3434
}
3535

36+
if sz := endPos + 1 - beginPos; sz <= 0 || sz > 50*1024*1024 {
37+
return 0, 0, fmt.Errorf("invalid range: %s", r)
38+
}
39+
3640
return beginPos, endPos + 1, nil
3741
}
3842

@@ -41,6 +45,7 @@ func handler(w http.ResponseWriter, r *http.Request) {
4145
log.Printf("fcContext=%v", fcCtx)
4246
if err != nil {
4347
handleError(w, fmt.Errorf("fail to NewFromContext due to %v", err))
48+
return
4449
}
4550
switch r.Method {
4651
case "HEAD":

src/code/main.go

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,89 @@
11
package main
22

33
import (
4+
"io"
5+
"log"
46
"net/http"
7+
"os"
8+
fcoss "repack/oss"
9+
10+
"github.com/aliyun/aliyun-oss-go-sdk/oss"
511
)
612

13+
func repackLocal() {
14+
CertPEM_PATH = "/tmp/cert/test-cert.pem"
15+
PrivateKeyPEM_PATH = "/tmp/cert/test-priv.pem"
16+
WORK_DIR_BASE = "/tmp"
17+
18+
fcCtx := &FCContext{
19+
SourceObject: os.Getenv("SOURCE_OBJECT"),
20+
ChannelID: os.Getenv("CHANNEL_ID"),
21+
OSSEndpoint: os.Getenv("OSS_ENDPOINT"),
22+
Credentials: Credentials{
23+
AccessKeyID: os.Getenv("ACCESS_KEY_ID"),
24+
AccessKeySecret: os.Getenv("ACCESS_KEY_SECRET"),
25+
},
26+
WorkDir: "/tmp",
27+
}
28+
29+
f, res, err := repackAPK(fcCtx)
30+
if err != nil {
31+
log.Printf("repack error: %v", err)
32+
return
33+
}
34+
defer f.Close()
35+
log.Printf("res: %+v", res)
36+
37+
ossReader, err := fcoss.NewReader(
38+
fcoss.OSSConfig{
39+
Endpoint: fcCtx.OSSEndpoint,
40+
AccessKeyID: fcCtx.Credentials.AccessKeyID,
41+
AccessKeySecret: fcCtx.Credentials.AccessKeySecret,
42+
SecurityToken: fcCtx.Credentials.SecurityToken,
43+
}, fcCtx.SourceObject)
44+
if err != nil {
45+
log.Printf("read oss: %v", err)
46+
return
47+
}
48+
resp, err := ossReader.Client.GetObject(
49+
ossReader.Object, oss.Range(0, res.Offset-1))
50+
if err != nil {
51+
log.Printf("get object: %v", err)
52+
return
53+
}
54+
defer resp.Close()
55+
56+
resFile, err := os.Create("/tmp/res.apk")
57+
if err != nil {
58+
log.Printf("get object: %v", err)
59+
return
60+
}
61+
defer resFile.Close()
62+
n, err := io.Copy(resFile, resp)
63+
if err != nil {
64+
log.Printf("copy: %v", err)
65+
return
66+
}
67+
log.Printf("copied %d bytes", n)
68+
69+
if _, err := f.Seek(0, 0); err != nil {
70+
log.Printf("seek error: %v", err)
71+
return
72+
}
73+
n, err = io.Copy(resFile, f)
74+
if err != nil {
75+
log.Printf("copy: %v", err)
76+
return
77+
}
78+
log.Printf("copied %d bytes", n)
79+
}
80+
781
func main() {
82+
if os.Getenv("RUN_LOCAL") == "true" {
83+
repackLocal()
84+
return
85+
}
86+
887
http.HandleFunc("/", handler)
988
http.ListenAndServe(":80", nil)
1089
}

src/code/oss/oss.go

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,33 @@ type OSSConfig struct {
3636
SecurityToken string
3737
}
3838

39-
// NewReader ...
40-
func NewReader(config OSSConfig, location string) (*Reader, error) {
39+
var mu sync.Mutex
40+
var ossClient *oss.Client
41+
42+
func getOSSClient(config OSSConfig) (*oss.Client, error) {
43+
mu.Lock()
44+
defer mu.Unlock()
45+
46+
if ossClient != nil {
47+
return ossClient, nil
48+
}
49+
4150
client, err := oss.New(
4251
config.Endpoint, config.AccessKeyID, config.AccessKeySecret,
4352
oss.SecurityToken(config.SecurityToken))
4453

54+
if err != nil {
55+
return nil, err
56+
}
57+
ossClient = client
58+
59+
return client, nil
60+
}
61+
62+
// NewReader ...
63+
func NewReader(config OSSConfig, location string) (*Reader, error) {
64+
client, err := getOSSClient(config)
65+
4566
if err != nil {
4667
return nil, err
4768
}

0 commit comments

Comments
 (0)