Skip to content

Commit feabbe8

Browse files
0.2
1 parent f95e8b7 commit feabbe8

File tree

8 files changed

+190
-87
lines changed

8 files changed

+190
-87
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
.env
12
apt-s3_*

Makefile

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,29 @@ build-deps:
2121
clean:
2222
rm -f apt-s3_* apt-s3_*.deb
2323

24+
PRERELEASE_FLAG :=
25+
ifdef PRERELEASE
26+
PRERELEASE_FLAG := ,"prerelease":true
27+
endif
28+
2429
release: $(PACKAGE_TARGETS) tag
2530
ifndef GITHUB_TOKEN
2631
$(error GITHUB_TOKEN is not set!)
2732
endif
28-
$(eval URL := $(shell curl -sS -H "Authorization: token $$GITHUB_TOKEN" -H "Content-Type: application/json" -X POST -d '{"tag_name":"$(VERSION)","name":"v$(VERSION)"}' https://api.github.com/repos/zendesk/apt-s3/releases | awk -F\" /assets_url/'{sub(/api/, "uploads", $$4); print $$4 }'))
33+
$(eval URL := $(shell curl -sS -H "Authorization: token $$GITHUB_TOKEN" -H "Content-Type: application/json" -X POST -d '{"tag_name":"$(VERSION)","name":"v$(VERSION)"$(PRERELEASE_FLAG)}' https://api.github.com/repos/zendesk/apt-s3/releases | awk -F\" /assets_url/'{sub(/api/, "uploads", $$4); print $$4 }'))
2934
$(foreach arch,$(ARCHITECTURES),\
3035
$(shell curl -sS -H "Authorization: token $$GITHUB_TOKEN" -H "Content-Type: application/octet-stream" -X POST --data-binary "@apt-s3_$(VERSION)_$(arch)" $(URL)?name=apt-s3_$(VERSION)_$(arch) >/dev/null)\
3136
$(shell curl -sS -H "Authorization: token $$GITHUB_TOKEN" -H "Content-Type: application/octet-stream" -X POST --data-binary "@apt-s3_$(VERSION)_$(arch).deb" $(URL)?name=apt-s3_$(VERSION)_$(arch).deb >/dev/null)\
3237
)
3338

39+
pre-release:
40+
$(MAKE) release PRERELEASE=true
41+
3442
tag:
3543
git tag $(VERSION)
3644
git push --tags
3745

3846
test: build-deps
3947
go test -v ./...
4048

41-
.PHONY: all build-deps clean release tag test
49+
.PHONY: all build-deps clean pre-release release tag test

README.md

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,23 @@ export BUCKET_REGION=us-east-1
4141
echo "deb s3://${BUCKET_NAME}.s3-${BUCKET_REGION}.amazonaws.com/ stable main" > /etc/apt/sources.list.d/s3bucket.list
4242
```
4343

44-
### Credentials File
45-
46-
`/etc/apt/s3creds` is checked before using the default AWS credential methods. The file has a format similar to `~/.aws/credentials`, but profiles are ignored.
47-
48-
```
49-
aws_access_key_id = foo
50-
aws_secret_access_key = foobar123
51-
aws_session_token = not-normally-needed
52-
```
44+
### Credentials
45+
46+
`apt-s3` supports multiple credential methods in this order:
47+
48+
1. **OIDC Environment Variables** (Passed from https://github.com/zendesk/build-image/tree/main):
49+
```bash
50+
export OIDC_KEY_ID=your-access-key-id
51+
export OIDC_ACCESS_KEY=your-secret-access-key
52+
export OIDC_SESSION_TOKEN=your-session-token
53+
```
54+
55+
2. **Default AWS Credential Chain** (if OIDC vars not set):
56+
- `AWS_PROFILE` environment variable
57+
- `~/.aws/config` file
58+
- IAM roles for EC2 instances
59+
- IAM roles for ECS tasks
60+
- Other standard AWS credential sources
5361

5462
### Interactive Usage
5563

downloader/downloader.go

Lines changed: 50 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -3,87 +3,59 @@
33
package downloader
44

55
import (
6-
"bufio"
6+
"context"
77
"errors"
88
"os"
99
"strings"
1010

11-
"github.com/aws/aws-sdk-go/aws"
12-
"github.com/aws/aws-sdk-go/aws/awserr"
13-
"github.com/aws/aws-sdk-go/aws/credentials"
14-
"github.com/aws/aws-sdk-go/aws/session"
15-
"github.com/aws/aws-sdk-go/service/s3"
16-
"github.com/aws/aws-sdk-go/service/s3/s3manager"
11+
"github.com/aws/aws-sdk-go-v2/aws"
12+
"github.com/aws/aws-sdk-go-v2/config"
13+
"github.com/aws/aws-sdk-go-v2/credentials"
14+
"github.com/aws/aws-sdk-go-v2/feature/s3/manager"
15+
"github.com/aws/aws-sdk-go-v2/service/s3"
16+
"github.com/aws/smithy-go"
1717
)
1818

19-
// Downloader tracks the region and Session and only recreates the Session
19+
// Downloader tracks the region and AWS config and only recreates the config
2020
// if the region has changed
2121
type Downloader struct {
2222
region string
23-
sess *session.Session
23+
cfg aws.Config
24+
ctx context.Context
2425
}
2526

26-
func New() *Downloader {
27-
d := &Downloader{}
28-
return d
29-
}
30-
31-
// getValue parses a string and returns the value assigned to a key
32-
func (d *Downloader) getValue(line string) string {
33-
splitLine := strings.Split(line, " = ")
34-
return (splitLine[len(splitLine)-1])
35-
}
36-
37-
// credentialsFromFile loads AWS credentials from a non-standard path
38-
func (d *Downloader) credentialsFromFile(fileName string) (string, string, string, error) {
39-
var accessKey, secretKey, token string
40-
41-
file, err := os.Open(fileName)
42-
if err != nil {
43-
return "", "", "", err
44-
}
45-
defer file.Close()
46-
47-
scanner := bufio.NewScanner(file)
48-
for scanner.Scan() {
49-
switch {
50-
case strings.Contains(scanner.Text(), "aws_access_key_id"):
51-
accessKey = d.getValue(scanner.Text())
52-
case strings.Contains(scanner.Text(), "aws_secret_access_key"):
53-
secretKey = d.getValue(scanner.Text())
54-
case strings.Contains(scanner.Text(), "aws_session_token"):
55-
token = d.getValue(scanner.Text())
56-
}
27+
func New(ctx context.Context) *Downloader {
28+
d := &Downloader{
29+
ctx: ctx,
5730
}
58-
if err := scanner.Err(); err != nil {
59-
return "", "", "", err
60-
}
61-
62-
return accessKey, secretKey, token, nil
31+
return d
6332
}
6433

65-
// loadCredentials sets up a Session using credentials found in /etc/apt/s3creds
66-
// or using the default configuration supported by AWS if /etc/apt/s3creds does
67-
// not exist
68-
func (d *Downloader) loadCredentials(region string) (*session.Session, error) {
69-
var config aws.Config
70-
var sess *session.Session
71-
72-
if _, err := os.Stat("/etc/apt/s3creds"); err == nil {
73-
accessKey, secretKey, token, err := d.credentialsFromFile("/etc/apt/s3creds")
74-
if err != nil {
75-
return nil, err
76-
}
77-
config = aws.Config{
78-
Region: aws.String(region),
79-
Credentials: credentials.NewStaticCredentials(accessKey, secretKey, token),
80-
}
81-
} else if os.IsNotExist(err) {
82-
config = aws.Config{Region: aws.String(region)}
34+
// loadCredentials sets up an AWS Config using credentials from environment variables
35+
// (OIDC_KEY_ID, OIDC_ACCESS_KEY, OIDC_SESSION_TOKEN), or falling back to the default
36+
// AWS credential chain (which includes AWS_PROFILE, ~/.aws/config, IAM roles, etc.)
37+
func (d *Downloader) loadCredentials(region string) (aws.Config, error) {
38+
// Check OIDC environment variables
39+
oidcKeyID := os.Getenv("OIDC_KEY_ID")
40+
oidcAccessKey := os.Getenv("OIDC_ACCESS_KEY")
41+
oidcSessionToken := os.Getenv("OIDC_SESSION_TOKEN")
42+
43+
if oidcKeyID != "" && oidcAccessKey != "" {
44+
// Use static credentials from OIDC environment variables
45+
cfg, err := config.LoadDefaultConfig(d.ctx,
46+
config.WithRegion(region),
47+
config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(
48+
oidcKeyID,
49+
oidcAccessKey,
50+
oidcSessionToken,
51+
)),
52+
)
53+
return cfg, err
8354
}
84-
sess, err := session.NewSession(&config)
8555

86-
return sess, err
56+
// Use default AWS credential chain (supports AWS_PROFILE, IAM roles, etc.)
57+
cfg, err := config.LoadDefaultConfig(d.ctx, config.WithRegion(region))
58+
return cfg, err
8759
}
8860

8961
// parseUri takes an S3 URI s3://<bucket>.s3-<region>.amazonaws.com/key/file
@@ -113,22 +85,24 @@ func (d *Downloader) GetFileAttributes(s3Uri string) (string, int64, error) {
11385

11486
if d.region != region {
11587
d.region = region
116-
d.sess, err = d.loadCredentials(region)
88+
d.cfg, err = d.loadCredentials(region)
11789
if err != nil {
11890
return "", -1, err
11991
}
12092
}
12193

122-
svc := s3.New(d.sess)
94+
client := s3.NewFromConfig(d.cfg)
12395

124-
result, err := svc.GetObject(&s3.GetObjectInput{
96+
result, err := client.GetObject(d.ctx, &s3.GetObjectInput{
12597
Bucket: aws.String(bucket),
12698
Key: aws.String(key),
12799
})
128100
if err != nil {
129-
if aerr, ok := err.(awserr.Error); ok {
130-
return "", -1, errors.New(strings.Join(strings.Split(aerr.Error(), "\n"), " "))
101+
var ae smithy.APIError
102+
if errors.As(err, &ae) {
103+
return "", -1, errors.New(strings.Join(strings.Split(ae.Error(), "\n"), " "))
131104
}
105+
return "", -1, err
132106
}
133107

134108
return result.LastModified.Format("2006-01-02T15:04:05+00:00"), *result.ContentLength, nil
@@ -145,19 +119,22 @@ func (d *Downloader) DownloadFile(s3Uri string, path string) (string, error) {
145119

146120
if d.region != region {
147121
d.region = region
148-
d.sess, err = d.loadCredentials(region)
122+
d.cfg, err = d.loadCredentials(region)
149123
if err != nil {
150124
return "", err
151125
}
152126
}
153-
downloader := s3manager.NewDownloader(d.sess)
127+
128+
client := s3.NewFromConfig(d.cfg)
129+
downloader := manager.NewDownloader(client)
154130

155131
f, err := os.Create(filename)
156132
if err != nil {
157133
return "", err
158134
}
135+
defer f.Close()
159136

160-
if _, err := downloader.Download(f, &s3.GetObjectInput{
137+
if _, err := downloader.Download(d.ctx, f, &s3.GetObjectInput{
161138
Bucket: aws.String(bucket),
162139
Key: aws.String(key),
163140
}); err != nil {

go.mod

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
module github.com/zendesk/apt-s3
2+
3+
go 1.25.6
4+
5+
require (
6+
github.com/aws/aws-sdk-go-v2 v1.32.6
7+
github.com/aws/aws-sdk-go-v2/config v1.28.6
8+
github.com/aws/aws-sdk-go-v2/credentials v1.17.47
9+
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.43
10+
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.0
11+
github.com/aws/smithy-go v1.22.1
12+
)
13+
14+
require (
15+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect
16+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 // indirect
17+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 // indirect
18+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 // indirect
19+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
20+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25 // indirect
21+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect
22+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6 // indirect
23+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 // indirect
24+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6 // indirect
25+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 // indirect
26+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 // indirect
27+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 // indirect
28+
)

go.sum

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
github.com/aws/aws-sdk-go-v2 v1.32.6 h1:7BokKRgRPuGmKkFMhEg/jSul+tB9VvXhcViILtfG8b4=
2+
github.com/aws/aws-sdk-go-v2 v1.32.6/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
3+
github.com/aws/aws-sdk-go-v2 v1.41.1 h1:ABlyEARCDLN034NhxlRUSZr4l71mh+T5KAeGh6cerhU=
4+
github.com/aws/aws-sdk-go-v2 v1.41.1/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0=
5+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8=
6+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc=
7+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 h1:489krEF9xIGkOaaX3CE/Be2uWjiXrkCH6gUX+bZA/BU=
8+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4/go.mod h1:IOAPF6oT9KCsceNTvvYMNHy0+kMF8akOjeDvPENWxp4=
9+
github.com/aws/aws-sdk-go-v2/config v1.28.6 h1:D89IKtGrs/I3QXOLNTH93NJYtDhm8SYa9Q5CsPShmyo=
10+
github.com/aws/aws-sdk-go-v2/config v1.28.6/go.mod h1:GDzxJ5wyyFSCoLkS+UhGB0dArhb9mI+Co4dHtoTxbko=
11+
github.com/aws/aws-sdk-go-v2/config v1.32.7 h1:vxUyWGUwmkQ2g19n7JY/9YL8MfAIl7bTesIUykECXmY=
12+
github.com/aws/aws-sdk-go-v2/config v1.32.7/go.mod h1:2/Qm5vKUU/r7Y+zUk/Ptt2MDAEKAfUtKc1+3U1Mo3oY=
13+
github.com/aws/aws-sdk-go-v2/credentials v1.17.47 h1:48bA+3/fCdi2yAwVt+3COvmatZ6jUDNkDTIsqDiMUdw=
14+
github.com/aws/aws-sdk-go-v2/credentials v1.17.47/go.mod h1:+KdckOejLW3Ks3b0E3b5rHsr2f9yuORBum0WPnE5o5w=
15+
github.com/aws/aws-sdk-go-v2/credentials v1.19.7 h1:tHK47VqqtJxOymRrNtUXN5SP/zUTvZKeLx4tH6PGQc8=
16+
github.com/aws/aws-sdk-go-v2/credentials v1.19.7/go.mod h1:qOZk8sPDrxhf+4Wf4oT2urYJrYt3RejHSzgAquYeppw=
17+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 h1:AmoU1pziydclFT/xRV+xXE/Vb8fttJCLRPv8oAkprc0=
18+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21/go.mod h1:AjUdLYe4Tgs6kpH4Bv7uMZo7pottoyHMn4eTcIcneaY=
19+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.17 h1:I0GyV8wiYrP8XpA70g1HBcQO1JlQxCMTW9npl5UbDHY=
20+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.17/go.mod h1:tyw7BOl5bBe/oqvoIeECFJjMdzXoa/dfVz3QQ5lgHGA=
21+
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.43 h1:iLdpkYZ4cXIQMO7ud+cqMWR1xK5ESbt1rvN77tRi1BY=
22+
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.43/go.mod h1:OgbsKPAswXDd5kxnR4vZov69p3oYjbvUyIRBAAV0y9o=
23+
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.21.0 h1:pQZGI0qQXeCHZHMeWzhwPu+4jkWrdrIb2dgpG4OKmco=
24+
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.21.0/go.mod h1:XGq5kImVqQT4HUNbbG+0Y8O74URsPNH7CGPg1s1HW5E=
25+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 h1:s/fF4+yDQDoElYhfIVvSNyeCydfbuTKzhxSXDXCPasU=
26+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25/go.mod h1:IgPfDv5jqFIzQSNbUEMoitNooSMXjRSDkhXv8jiROvU=
27+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17 h1:xOLELNKGp2vsiteLsvLPwxC+mYmO6OZ8PYgiuPJzF8U=
28+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17/go.mod h1:5M5CI3D12dNOtH3/mk6minaRwI2/37ifCURZISxA/IQ=
29+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 h1:ZntTCl5EsYnhN/IygQEUugpdwbhdkom9uHcbCftiGgA=
30+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25/go.mod h1:DBdPrgeocww+CSl1C8cEV8PN1mHMBhuCDLpXezyvWkE=
31+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17 h1:WWLqlh79iO48yLkj1v3ISRNiv+3KdQoZ6JWyfcsyQik=
32+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17/go.mod h1:EhG22vHRrvF8oXSTYStZhJc1aUgKtnJe+aOiFEV90cM=
33+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
34+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
35+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk=
36+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc=
37+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25 h1:r67ps7oHCYnflpgDy2LZU0MAQtQbYIOqNNnqGO6xQkE=
38+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25/go.mod h1:GrGY+Q4fIokYLtjCVB/aFfCVL6hhGUFl8inD18fDalE=
39+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.17 h1:JqcdRG//czea7Ppjb+g/n4o8i/R50aTBHkA7vu0lK+k=
40+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.17/go.mod h1:CO+WeGmIdj/MlPel2KwID9Gt7CNq4M65HUfBW97liM0=
41+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y=
42+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE=
43+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 h1:0ryTNEdJbzUCEWkVXEXoqlXV72J5keC1GvILMOuD00E=
44+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4/go.mod h1:HQ4qwNZh32C3CBeO6iJLQlgtMzqeG17ziAA/3KDJFow=
45+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6 h1:HCpPsWqmYQieU7SS6E9HXfdAMSud0pteVXieJmcpIRI=
46+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6/go.mod h1:ngUiVRCco++u+soRRVBIvBZxSMMvOVMXA4PJ36JLfSw=
47+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.8 h1:Z5EiPIzXKewUQK0QTMkutjiaPVeVYXX7KIqhXu/0fXs=
48+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.8/go.mod h1:FsTpJtvC4U1fyDXk7c71XoDv3HlRm8V3NiYLeYLh5YE=
49+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 h1:50+XsN70RS7dwJ2CkVNXzj7U2L1HKP8nqTd3XWEXBN4=
50+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6/go.mod h1:WqgLmwY7so32kG01zD8CPTJWVWM+TzJoOVHwTg4aPug=
51+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.17 h1:RuNSMoozM8oXlgLG/n6WLaFGoea7/CddrCfIiSA+xdY=
52+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.17/go.mod h1:F2xxQ9TZz5gDWsclCtPQscGpP0VUOc8RqgFM3vDENmU=
53+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6 h1:BbGDtTi0T1DYlmjBiCr/le3wzhA37O8QTC5/Ab8+EXk=
54+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6/go.mod h1:hLMJt7Q8ePgViKupeymbqI0la+t9/iYFBjxQCFwuAwI=
55+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.17 h1:bGeHBsGZx0Dvu/eJC0Lh9adJa3M1xREcndxLNZlve2U=
56+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.17/go.mod h1:dcW24lbU0CzHusTE8LLHhRLI42ejmINN8Lcr22bwh/g=
57+
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.0 h1:nyuzXooUNJexRT0Oy0UQY6AhOzxPxhtt4DcBIHyCnmw=
58+
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.0/go.mod h1:sT/iQz8JK3u/5gZkT+Hmr7GzVZehUMkRZpOaAwYXeGY=
59+
github.com/aws/aws-sdk-go-v2/service/s3 v1.95.1 h1:C2dUPSnEpy4voWFIq3JNd8gN0Y5vYGDo44eUE58a/p8=
60+
github.com/aws/aws-sdk-go-v2/service/s3 v1.95.1/go.mod h1:5jggDlZ2CLQhwJBiZJb4vfk4f0GxWdEDruWKEJ1xOdo=
61+
github.com/aws/aws-sdk-go-v2/service/signin v1.0.5 h1:VrhDvQib/i0lxvr3zqlUwLwJP4fpmpyD9wYG1vfSu+Y=
62+
github.com/aws/aws-sdk-go-v2/service/signin v1.0.5/go.mod h1:k029+U8SY30/3/ras4G/Fnv/b88N4mAfliNn08Dem4M=
63+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 h1:rLnYAfXQ3YAccocshIH5mzNNwZBkBo+bP6EhIxak6Hw=
64+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.7/go.mod h1:ZHtuQJ6t9A/+YDuxOLnbryAmITtr8UysSny3qcyvJTc=
65+
github.com/aws/aws-sdk-go-v2/service/sso v1.30.9 h1:v6EiMvhEYBoHABfbGB4alOYmCIrcgyPPiBE1wZAEbqk=
66+
github.com/aws/aws-sdk-go-v2/service/sso v1.30.9/go.mod h1:yifAsgBxgJWn3ggx70A3urX2AN49Y5sJTD1UQFlfqBw=
67+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 h1:JnhTZR3PiYDNKlXy50/pNeix9aGMo6lLpXwJ1mw8MD4=
68+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6/go.mod h1:URronUEGfXZN1VpdktPSD1EkAL9mfrV+2F4sjH38qOY=
69+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.13 h1:gd84Omyu9JLriJVCbGApcLzVR3XtmC4ZDPcAI6Ftvds=
70+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.13/go.mod h1:sTGThjphYE4Ohw8vJiRStAcu3rbjtXRsdNB0TvZ5wwo=
71+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 h1:s4074ZO1Hk8qv65GqNXqDjmkf4HSQqJukaLuuW0TpDA=
72+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.2/go.mod h1:mVggCnIWoM09jP71Wh+ea7+5gAp53q+49wDFs1SW5z8=
73+
github.com/aws/aws-sdk-go-v2/service/sts v1.41.6 h1:5fFjR/ToSOzB2OQ/XqWpZBmNvmP/pJ1jOWYlFDJTjRQ=
74+
github.com/aws/aws-sdk-go-v2/service/sts v1.41.6/go.mod h1:qgFDZQSD/Kys7nJnVqYlWKnh0SSdMjAi0uSwON4wgYQ=
75+
github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro=
76+
github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
77+
github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk=
78+
github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=

main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"context"
45
"flag"
56
"fmt"
67
"log"
@@ -19,7 +20,8 @@ var (
1920
)
2021

2122
func main() {
22-
m := method.New()
23+
ctx := context.Background()
24+
m := method.New(ctx)
2325
programName := os.Args[0]
2426

2527
flag.Parse()

method/method.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package method
44
import (
55
"bufio"
66
"bytes"
7+
"context"
78
"crypto/md5"
89
"crypto/sha1"
910
"crypto/sha256"
@@ -22,9 +23,9 @@ type Method struct {
2223
Downloader *downloader.Downloader
2324
}
2425

25-
func New() *Method {
26+
func New(ctx context.Context) *Method {
2627
m := &Method{
27-
Downloader: downloader.New(),
28+
Downloader: downloader.New(ctx),
2829
}
2930
return m
3031
}

0 commit comments

Comments
 (0)