forked from mystiq/dex
db: protect the sqlite3 import with a cgo tag
This commit is contained in:
parent
350571acf6
commit
93b89ad0e9
4 changed files with 53 additions and 16 deletions
33
db/client.go
33
db/client.go
|
@ -10,8 +10,6 @@ import (
|
||||||
|
|
||||||
"github.com/coreos/go-oidc/oidc"
|
"github.com/coreos/go-oidc/oidc"
|
||||||
"github.com/go-gorp/gorp"
|
"github.com/go-gorp/gorp"
|
||||||
"github.com/lib/pq"
|
|
||||||
"github.com/mattn/go-sqlite3"
|
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
|
|
||||||
"github.com/coreos/dex/client"
|
"github.com/coreos/dex/client"
|
||||||
|
@ -217,6 +215,25 @@ func (r *clientIdentityRepo) Authenticate(creds oidc.ClientCredentials) (bool, e
|
||||||
return ok, nil
|
return ok, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var alreadyExistsCheckers []func(err error) bool
|
||||||
|
|
||||||
|
func registerAlreadyExistsChecker(f func(err error) bool) {
|
||||||
|
alreadyExistsCheckers = append(alreadyExistsCheckers, f)
|
||||||
|
}
|
||||||
|
|
||||||
|
// isAlreadyExistsErr detects database error codes for failing a unique constraint.
|
||||||
|
//
|
||||||
|
// Because database drivers are optionally compiled, use registerAlreadyExistsChecker to
|
||||||
|
// register driver specific implementations.
|
||||||
|
func isAlreadyExistsErr(err error) bool {
|
||||||
|
for _, checker := range alreadyExistsCheckers {
|
||||||
|
if checker(err) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (r *clientIdentityRepo) New(id string, meta oidc.ClientMetadata) (*oidc.ClientCredentials, error) {
|
func (r *clientIdentityRepo) New(id string, meta oidc.ClientMetadata) (*oidc.ClientCredentials, error) {
|
||||||
secret, err := pcrypto.RandBytes(maxSecretLength)
|
secret, err := pcrypto.RandBytes(maxSecretLength)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -229,17 +246,9 @@ func (r *clientIdentityRepo) New(id string, meta oidc.ClientMetadata) (*oidc.Cli
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := r.executor(nil).Insert(cim); err != nil {
|
if err := r.executor(nil).Insert(cim); err != nil {
|
||||||
switch sqlErr := err.(type) {
|
if isAlreadyExistsErr(err) {
|
||||||
case *pq.Error:
|
err = errors.New("client ID already exists")
|
||||||
if sqlErr.Code == pgErrorCodeUniqueViolation {
|
|
||||||
err = errors.New("client ID already exists")
|
|
||||||
}
|
|
||||||
case *sqlite3.Error:
|
|
||||||
if sqlErr.ExtendedCode == sqlite3.ErrConstraintUnique {
|
|
||||||
err = errors.New("client ID already exists")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,6 @@ import (
|
||||||
"github.com/go-gorp/gorp"
|
"github.com/go-gorp/gorp"
|
||||||
|
|
||||||
"github.com/coreos/dex/repo"
|
"github.com/coreos/dex/repo"
|
||||||
|
|
||||||
// Import database drivers
|
|
||||||
_ "github.com/lib/pq"
|
|
||||||
_ "github.com/mattn/go-sqlite3"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type table struct {
|
type table struct {
|
||||||
|
|
15
db/conn_postgres.go
Normal file
15
db/conn_postgres.go
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
package db
|
||||||
|
|
||||||
|
// Register the postgres driver.
|
||||||
|
|
||||||
|
import "github.com/lib/pq"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
registerAlreadyExistsChecker(func(err error) bool {
|
||||||
|
sqlErr, ok := err.(*pq.Error)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return sqlErr.Code == pgErrorCodeUniqueViolation
|
||||||
|
})
|
||||||
|
}
|
17
db/conn_sqlite3.go
Normal file
17
db/conn_sqlite3.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
// +build cgo
|
||||||
|
|
||||||
|
package db
|
||||||
|
|
||||||
|
// Register the sqlite3 driver.
|
||||||
|
|
||||||
|
import "github.com/mattn/go-sqlite3"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
registerAlreadyExistsChecker(func(err error) bool {
|
||||||
|
sqlErr, ok := err.(*sqlite3.Error)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return sqlErr.ExtendedCode == sqlite3.ErrConstraintUnique
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in a new issue