Skip to content

Commit

Permalink
feat!: expose error in NewAdapter() (#35)
Browse files Browse the repository at this point in the history
BREAKING CHANGE:  expose error in `NewAdapter()`
  • Loading branch information
imp2002 authored Nov 10, 2022
1 parent 3321b37 commit 5c97830
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 20 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ import (

func main() {
// Initialize a Redis adapter and use it in a Casbin enforcer:
a := redisadapter.NewAdapter("tcp", "127.0.0.1:6379") // Your Redis network and address.
a, _ := redisadapter.NewAdapter("tcp", "127.0.0.1:6379") // Your Redis network and address.

// Use the following if Redis has password like "123"
//a := redisadapter.NewAdapterWithPassword("tcp", "127.0.0.1:6379", "123")
// a, err := redisadapter.NewAdapterWithPassword("tcp", "127.0.0.1:6379", "123")

// Use the following if you use Redis with a specific user
// a := NewAdapterWithUser("tcp", "127.0.0.1:6379", "testaccount", "userpass")
// a, err := redisadapter.NewAdapterWithUser("tcp", "127.0.0.1:6379", "username", "password")

e := casbin.NewEnforcer("examples/rbac_model.conf", a)

Expand Down
29 changes: 15 additions & 14 deletions adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func finalizer(a *Adapter) {
}

func newAdapter(network string, address string, key string,
username string, password string) *Adapter {
username string, password string) (*Adapter, error) {
a := &Adapter{}
a.network = network
a.address = address
Expand All @@ -65,47 +65,47 @@ func newAdapter(network string, address string, key string,
a.password = password

// Open the DB, create it if not existed.
a.open()
err := a.open()

// Call the destructor when the object is released.
runtime.SetFinalizer(a, finalizer)

return a
return a, err
}

// NewAdapter is the constructor for Adapter.
func NewAdapter(network string, address string) *Adapter {
func NewAdapter(network string, address string) (*Adapter, error) {
return newAdapter(network, address, "casbin_rules", "", "")
}

func NewAdapterWithUser(network string, address string, username string, password string) *Adapter {
func NewAdapterWithUser(network string, address string, username string, password string) (*Adapter, error) {
return newAdapter(network, address, "casbin_rules", username, password)
}

// NewAdapterWithPassword is the constructor for Adapter.
func NewAdapterWithPassword(network string, address string, password string) *Adapter {
func NewAdapterWithPassword(network string, address string, password string) (*Adapter, error) {
return newAdapter(network, address, "casbin_rules", "", password)
}

// NewAdapterWithKey is the constructor for Adapter.
func NewAdapterWithKey(network string, address string, key string) *Adapter {
func NewAdapterWithKey(network string, address string, key string) (*Adapter, error) {
return newAdapter(network, address, key, "", "")
}

type Option func(*Adapter)

func NewAdpaterWithOption(options ...Option) *Adapter {
func NewAdpaterWithOption(options ...Option) (*Adapter, error) {
a := &Adapter{}
for _, option := range options {
option(a)
}
// Open the DB, create it if not existed.
a.open()
err := a.open()

// Call the destructor when the object is released.
runtime.SetFinalizer(a, finalizer)

return a
return a, err
}

func WithAddress(address string) Option {
Expand Down Expand Up @@ -137,30 +137,31 @@ func WithKey(key string) Option {
}
}

func (a *Adapter) open() {
func (a *Adapter) open() error {
//redis.Dial("tcp", "127.0.0.1:6379")
if a.username != "" {
conn, err := redis.Dial(a.network, a.address, redis.DialUsername(a.username), redis.DialPassword(a.password))
if err != nil {
panic(err)
return err
}

a.conn = conn
} else if a.password == "" {
conn, err := redis.Dial(a.network, a.address)
if err != nil {
panic(err)
return err
}

a.conn = conn
} else {
conn, err := redis.Dial(a.network, a.address, redis.DialPassword(a.password))
if err != nil {
panic(err)
return err
}

a.conn = conn
}
return nil
}

func (a *Adapter) close() {
Expand Down
6 changes: 3 additions & 3 deletions adapter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -353,13 +353,13 @@ func arrayEqualsWithoutOrder(a [][]string, b [][]string) bool {
}

func TestAdapters(t *testing.T) {
a := NewAdapter("tcp", "127.0.0.1:6379")
a, _ := NewAdapter("tcp", "127.0.0.1:6379")

// Use the following if Redis has password like "123"
//a := NewAdapterWithPassword("tcp", "127.0.0.1:6379", "123")
//a, err := NewAdapterWithPassword("tcp", "127.0.0.1:6379", "123")

// Use the following if you use Redis with a account
// a := NewAdapterWithUser("tcp", "127.0.0.1:6379", "testaccount", "userpass")
// a, err := NewAdapterWithUser("tcp", "127.0.0.1:6379", "testaccount", "userpass")

testSaveLoad(t, a)
testAutoSave(t, a)
Expand Down

0 comments on commit 5c97830

Please sign in to comment.