mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix: use authenticated urls for pubsub (#14261)
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
package dbtestutil
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql/driver"
|
||||
|
||||
"github.com/lib/pq"
|
||||
"golang.org/x/xerrors"
|
||||
|
||||
"github.com/coder/coder/v2/coderd/database"
|
||||
)
|
||||
|
||||
var _ database.DialerConnector = &Connector{}
|
||||
|
||||
type Connector struct {
|
||||
name string
|
||||
driver *Driver
|
||||
dialer pq.Dialer
|
||||
}
|
||||
|
||||
func (c *Connector) Connect(_ context.Context) (driver.Conn, error) {
|
||||
if c.dialer != nil {
|
||||
conn, err := pq.DialOpen(c.dialer, c.name)
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("failed to dial open connection: %w", err)
|
||||
}
|
||||
|
||||
c.driver.Connections <- conn
|
||||
|
||||
return conn, nil
|
||||
}
|
||||
|
||||
conn, err := pq.Driver{}.Open(c.name)
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("failed to open connection: %w", err)
|
||||
}
|
||||
|
||||
c.driver.Connections <- conn
|
||||
|
||||
return conn, nil
|
||||
}
|
||||
|
||||
func (c *Connector) Driver() driver.Driver {
|
||||
return c.driver
|
||||
}
|
||||
|
||||
func (c *Connector) Dialer(dialer pq.Dialer) {
|
||||
c.dialer = dialer
|
||||
}
|
||||
|
||||
type Driver struct {
|
||||
Connections chan driver.Conn
|
||||
}
|
||||
|
||||
func NewDriver() *Driver {
|
||||
return &Driver{
|
||||
Connections: make(chan driver.Conn, 1),
|
||||
}
|
||||
}
|
||||
|
||||
func (d *Driver) Connector(name string) (driver.Connector, error) {
|
||||
return &Connector{
|
||||
name: name,
|
||||
driver: d,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (d *Driver) Open(name string) (driver.Conn, error) {
|
||||
c, err := d.Connector(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return c.Connect(context.Background())
|
||||
}
|
||||
|
||||
func (d *Driver) Close() {
|
||||
close(d.Connections)
|
||||
}
|
||||
Reference in New Issue
Block a user