Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd2cd8d7

Browse files
committed
fix: use authenticated urls for pubsub
1 parent6f9b1a3 commitd2cd8d7

File tree

5 files changed

+97
-3
lines changed

5 files changed

+97
-3
lines changed

‎coderd/database/awsiamrds/awsiamrds.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import (
1010
"github.com/aws/aws-sdk-go-v2/aws"
1111
"github.com/aws/aws-sdk-go-v2/config"
1212
"github.com/aws/aws-sdk-go-v2/feature/rds/auth"
13+
"github.com/lib/pq"
1314
"golang.org/x/xerrors"
15+
16+
"github.com/coder/coder/v2/coderd/database"
1417
)
1518

1619
typeawsIamRdsDriverstruct {
@@ -19,6 +22,7 @@ type awsIamRdsDriver struct {
1922
}
2023

2124
var_ driver.Driver=&awsIamRdsDriver{}
25+
var_ database.ConnectorCreator=&awsIamRdsDriver{}
2226

2327
// Register initializes and registers our aws iam rds wrapped database driver.
2428
funcRegister(ctx context.Context,parentNamestring) (string,error) {
@@ -65,6 +69,15 @@ func (d *awsIamRdsDriver) Open(name string) (driver.Conn, error) {
6569
returnconn,nil
6670
}
6771

72+
func (d*awsIamRdsDriver)Connector(namestring) (driver.Connector,error) {
73+
connector:=&connector{
74+
url:name,
75+
cfg:d.cfg,
76+
}
77+
78+
returnconnector,nil
79+
}
80+
6881
funcgetAuthenticatedURL(cfg aws.Config,dbURLstring) (string,error) {
6982
nURL,err:=url.Parse(dbURL)
7083
iferr!=nil {
@@ -82,3 +95,37 @@ func getAuthenticatedURL(cfg aws.Config, dbURL string) (string, error) {
8295

8396
returnnURL.String(),nil
8497
}
98+
99+
typeconnectorstruct {
100+
urlstring
101+
cfg aws.Config
102+
dialer pq.Dialer
103+
}
104+
105+
var_ database.DialerConnector=&connector{}
106+
107+
func (c*connector)Connect(ctx context.Context) (driver.Conn,error) {
108+
nURL,err:=getAuthenticatedURL(c.cfg,c.url)
109+
iferr!=nil {
110+
returnnil,xerrors.Errorf("assigning authentication token to url: %w",err)
111+
}
112+
113+
nc,err:=pq.NewConnector(nURL)
114+
iferr!=nil {
115+
returnnil,xerrors.Errorf("creating new connector: %w",err)
116+
}
117+
118+
ifc.dialer!=nil {
119+
nc.Dialer(c.dialer)
120+
}
121+
122+
returnnc.Connect(ctx)
123+
}
124+
125+
func (c*connector)Driver() driver.Driver {
126+
return&pq.Driver{}
127+
}
128+
129+
func (c*connector)Dialer(dialer pq.Dialer) {
130+
c.dialer=dialer
131+
}

‎coderd/database/connector.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package database
2+
3+
import (
4+
"context"
5+
"database/sql/driver"
6+
7+
"github.com/lib/pq"
8+
)
9+
10+
typeConnectorCreatorinterface {
11+
Connector(namestring) (driver.Connector,error)
12+
}
13+
14+
typeDialerConnectorinterface {
15+
Connect(context.Context) (driver.Conn,error)
16+
Dialer(dialer pq.Dialer)
17+
}

‎coderd/database/pubsub/pubsub.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package pubsub
33
import (
44
"context"
55
"database/sql"
6+
"database/sql/driver"
67
"errors"
78
"io"
89
"net"
@@ -15,6 +16,8 @@ import (
1516
"github.com/prometheus/client_golang/prometheus"
1617
"golang.org/x/xerrors"
1718

19+
"github.com/coder/coder/v2/coderd/database"
20+
1821
"cdr.dev/slog"
1922
)
2023

@@ -432,9 +435,31 @@ func (p *PGPubsub) startListener(ctx context.Context, connectURL string) error {
432435
// pq.defaultDialer uses a zero net.Dialer as well.
433436
d: net.Dialer{},
434437
}
438+
connector driver.Connector
439+
errerror
435440
)
441+
442+
// Create a custom connector if the database driver supports it.
443+
connectorCreator,ok:=p.db.Driver().(database.ConnectorCreator)
444+
if!ok {
445+
connector,err=pq.NewConnector(connectURL)
446+
iferr!=nil {
447+
returnxerrors.Errorf("create pq connector: %w",err)
448+
}
449+
}else {
450+
connector,err=connectorCreator.Connector(connectURL)
451+
iferr!=nil {
452+
returnxerrors.Errorf("create custom connector: %w",err)
453+
}
454+
}
455+
456+
// Set the dialer if the connector supports it.
457+
ifdc,ok:=connector.(database.DialerConnector);ok {
458+
dc.Dialer(dialer)
459+
}
460+
436461
p.pgListener=pqListenerShim{
437-
Listener:pq.NewDialListener(dialer,connectURL,time.Second,time.Minute,func(t pq.ListenerEventType,errerror) {
462+
Listener:pq.NewConnectorListener(connector,connectURL,time.Second,time.Minute,func(t pq.ListenerEventType,errerror) {
438463
switcht {
439464
casepq.ListenerEventConnected:
440465
p.logger.Info(ctx,"pubsub connected to postgres")

‎go.mod

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ replace github.com/imulab/go-scim/pkg/v2 => github.com/coder/go-scim/pkg/v2 v2.0
6262
// Fixes https://github.com/coder/coder/issues/6685
6363
replacegithub.com/pkg/sftp =>github.com/mafredri/sftpv1.13.6-0.20231212144145-8218e927edb0
6464

65+
// Adds support for a new Listener from a driver.Connector
66+
// This lets us use rotating authentication tokens for passwords in connection strings
67+
// which we use in the awsiamrds package.
68+
replacegithub.com/lib/pq =>github.com/coder/pqv1.10.5-0.20240813145306-1ce661cfa68d
69+
6570
require (
6671
cdr.dev/slogv1.6.2-0.20240126064726-20367d4aede6
6772
cloud.google.com/go/compute/metadatav0.5.0

‎go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,8 @@ github.com/coder/go-httpstat v0.0.0-20230801153223-321c88088322 h1:m0lPZjlQ7vdVp
215215
github.com/coder/go-httpstatv0.0.0-20230801153223-321c88088322/go.mod h1:rOLFDDVKVFiDqZFXoteXc97YXx7kFi9kYqR+2ETPkLQ=
216216
github.com/coder/go-scim/pkg/v2v2.0.0-20230221055123-1d63c1222136 h1:0RgB61LcNs24WOxc3PBvygSNTQurm0PYPujJjLLOzs0=
217217
github.com/coder/go-scim/pkg/v2v2.0.0-20230221055123-1d63c1222136/go.mod h1:VkD1P761nykiq75dz+4iFqIQIZka189tx1BQLOp0Skc=
218+
github.com/coder/pqv1.10.5-0.20240813145306-1ce661cfa68d h1:pv+JacyCHoHAr2kh6HltHdFlWqVeWHCvaQDqra5Aff4=
219+
github.com/coder/pqv1.10.5-0.20240813145306-1ce661cfa68d/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
218220
github.com/coder/prettyv0.0.0-20230908205945-e89ba86370e0 h1:3A0ES21Ke+FxEM8CXx9n47SZOKOpgSE1bbJzlE4qPVs=
219221
github.com/coder/prettyv0.0.0-20230908205945-e89ba86370e0/go.mod h1:5UuS2Ts+nTToAMeOjNlnHFkPahrtDkmpydBen/3wgZc=
220222
github.com/coder/quartzv0.1.0 h1:cLL+0g5l7xTf6ordRnUMMiZtRE8Sq5LxpghS63vEXrQ=
@@ -670,8 +672,6 @@ github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1
670672
github.com/leodido/go-urnv1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
671673
github.com/leodido/go-urnv1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
672674
github.com/leodido/go-urnv1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
673-
github.com/lib/pqv1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
674-
github.com/lib/pqv1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
675675
github.com/lucasb-eyer/go-colorfulv1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
676676
github.com/lucasb-eyer/go-colorfulv1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
677677
github.com/mafredri/sftpv1.13.6-0.20231212144145-8218e927edb0 h1:lG2o/EWMEOlV/RfQrf3zYfQStjnUj0Mg2gmbcBcoxFI=

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp