Merge branch 'master' into cloud-identities
commit
54570095d4
@ -1,38 +0,0 @@
|
|||||||
package db
|
|
||||||
|
|
||||||
import (
|
|
||||||
"crypto/x509"
|
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ErrNotImplemented is an error returned when an operation is Not Implemented.
|
|
||||||
var ErrNotImplemented = errors.Errorf("not implemented")
|
|
||||||
|
|
||||||
// NoopDB implements the DB interface with Noops
|
|
||||||
type NoopDB int
|
|
||||||
|
|
||||||
// Init noop
|
|
||||||
func (n *NoopDB) Init(c *Config) (AuthDB, error) {
|
|
||||||
return n, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsRevoked noop
|
|
||||||
func (n *NoopDB) IsRevoked(sn string) (bool, error) {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Revoke returns a "NotImplemented" error.
|
|
||||||
func (n *NoopDB) Revoke(rci *RevokedCertificateInfo) error {
|
|
||||||
return ErrNotImplemented
|
|
||||||
}
|
|
||||||
|
|
||||||
// StoreCertificate returns a "NotImplemented" error.
|
|
||||||
func (n *NoopDB) StoreCertificate(crt *x509.Certificate) error {
|
|
||||||
return ErrNotImplemented
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shutdown returns nil
|
|
||||||
func (n *NoopDB) Shutdown() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
package db
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/smallstep/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Test_noop(t *testing.T) {
|
|
||||||
db := new(NoopDB)
|
|
||||||
|
|
||||||
_db, err := db.Init(&Config{})
|
|
||||||
assert.FatalError(t, err)
|
|
||||||
assert.Equals(t, db, _db)
|
|
||||||
|
|
||||||
isRevoked, err := db.IsRevoked("foo")
|
|
||||||
assert.False(t, isRevoked)
|
|
||||||
assert.Nil(t, err)
|
|
||||||
|
|
||||||
assert.Equals(t, db.Revoke(&RevokedCertificateInfo{}), ErrNotImplemented)
|
|
||||||
}
|
|
@ -0,0 +1,63 @@
|
|||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/x509"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ErrNotImplemented is an error returned when an operation is Not Implemented.
|
||||||
|
var ErrNotImplemented = errors.Errorf("not implemented")
|
||||||
|
|
||||||
|
// SimpleDB is a barebones implementation of the DB interface. It is NOT an
|
||||||
|
// in memory implementation of the DB, but rather the bare minimum of
|
||||||
|
// functionality that the CA requires to operate securely.
|
||||||
|
type SimpleDB struct {
|
||||||
|
usedTokens *sync.Map
|
||||||
|
}
|
||||||
|
|
||||||
|
func newSimpleDB(c *Config) (AuthDB, error) {
|
||||||
|
db := &SimpleDB{}
|
||||||
|
db.usedTokens = new(sync.Map)
|
||||||
|
return db, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsRevoked noop
|
||||||
|
func (s *SimpleDB) IsRevoked(sn string) (bool, error) {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Revoke returns a "NotImplemented" error.
|
||||||
|
func (s *SimpleDB) Revoke(rci *RevokedCertificateInfo) error {
|
||||||
|
return ErrNotImplemented
|
||||||
|
}
|
||||||
|
|
||||||
|
// StoreCertificate returns a "NotImplemented" error.
|
||||||
|
func (s *SimpleDB) StoreCertificate(crt *x509.Certificate) error {
|
||||||
|
return ErrNotImplemented
|
||||||
|
}
|
||||||
|
|
||||||
|
type usedToken struct {
|
||||||
|
UsedAt int64 `json:"ua,omitempty"`
|
||||||
|
Token string `json:"tok,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UseToken returns a "NotImplemented" error.
|
||||||
|
func (s *SimpleDB) UseToken(id, tok string) (bool, error) {
|
||||||
|
if _, ok := s.usedTokens.LoadOrStore(id, &usedToken{
|
||||||
|
UsedAt: time.Now().Unix(),
|
||||||
|
Token: tok,
|
||||||
|
}); ok {
|
||||||
|
// Token already exists in DB.
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
// Successfully stored token.
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shutdown returns nil
|
||||||
|
func (s *SimpleDB) Shutdown() error {
|
||||||
|
return nil
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/smallstep/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSimpleDB(t *testing.T) {
|
||||||
|
db, err := newSimpleDB(nil)
|
||||||
|
assert.FatalError(t, err)
|
||||||
|
|
||||||
|
// Revoke
|
||||||
|
assert.Equals(t, ErrNotImplemented, db.Revoke(nil))
|
||||||
|
|
||||||
|
// IsRevoked -- verify noop
|
||||||
|
isRevoked, err := db.IsRevoked("foo")
|
||||||
|
assert.False(t, isRevoked)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
// StoreCertificate
|
||||||
|
assert.Equals(t, ErrNotImplemented, db.StoreCertificate(nil))
|
||||||
|
|
||||||
|
// UseToken
|
||||||
|
ok, err := db.UseToken("foo", "bar")
|
||||||
|
assert.True(t, ok)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
ok, err = db.UseToken("foo", "cat")
|
||||||
|
assert.False(t, ok)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
// Shutdown -- verify noop
|
||||||
|
assert.FatalError(t, db.Shutdown())
|
||||||
|
ok, err = db.UseToken("foo", "cat")
|
||||||
|
assert.False(t, ok)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
}
|
Loading…
Reference in New Issue