go-guardian icon indicating copy to clipboard operation
go-guardian copied to clipboard

Issue with example directory

Open quentinalbertone opened this issue 2 years ago • 5 comments

What version of Go are you using (go version)?

$ go version
go version go1.18.3 linux/amd64

Does this issue reproduce with the latest release?

Yes

What version of Go-Guardian are you using ?

Go-Guardian Version:  v2.11.5
Libcache Version: v1.0.5

What did you do?

Hello, I just want to follow the jwt example https://github.com/shaj13/go-guardian/blob/master/_examples/jwt/main.go But the function RegisterOnExpired was deprecated and no-longer works. Can you update the example directory on this repo.

What did you expect to see?

The program init and run

What did you see instead?

$> go run ./...
panic: RegisterOnExpired no longer available

goroutine 1 [running]:
github.com/shaj13/libcache/internal.(*Cache).RegisterOnExpired(0x18?, 0x7c80a0?)
	/home/xxx/go/pkg/mod/github.com/shaj13/[email protected]/internal/cache.go:379 +0x27
github.com/shaj13/libcache.(*cache).RegisterOnExpired(0xc00009e120, 0x6?)
	/home/xxx/go/pkg/mod/github.com/shaj13/[email protected]/cache.go:245 +0x56
main.setupGoGuardianJWT()
	/home/xxx/go/src/gitlab.com/xxx/my-project/cmd/go-guardian-jwt.go:33 +0x17d
main.main()
	/home/xxx/go/src/gitlab.com/xxx/my-project/cmd/main.go:20 +0x1d
exit status 2

quentinalbertone avatar Aug 14 '22 10:08 quentinalbertone

+1

Ivasan7 avatar Aug 26 '22 18:08 Ivasan7

@quentinalbertone

I have found a workaround that works for me, maybe a bit hacky, but try it.

func setupGoGuardian() {
	keeper = jwt.StaticSecret{
		ID:        "secret-id",
		Secret:    []byte("secret"),
		Algorithm: jwt.HS256,
	}
	cache := libcache.FIFO.New(0)
	cache.SetTTL(time.Minute * 5)
	chl := make(chan libcache.Event)
	defer close(chl)

	cache.Notify(chl, libcache.Remove)
	
	go func(chl chan libcache.Event) {
		event := <-chl
		cache.Peek(event.Key)
	}(chl)
	basicStrategy := basic.NewCached(validateUser, cache)
	jwtStrategy := jwt.New(cache, keeper)
	strategy = union.New(jwtStrategy, basicStrategy)
}


Ivasan7 avatar Aug 26 '22 18:08 Ivasan7

Added also a PR https://github.com/shaj13/go-guardian/pull/122

Ivasan7 avatar Aug 26 '22 18:08 Ivasan7

@quentinalbertone

One more bug after, but then it sort of works. Apply the following change as well.

https://github.com/shaj13/go-guardian/pull/123

Ivasan7 avatar Aug 26 '22 18:08 Ivasan7

@quentinalbertone will update the example asap. @Ivasan7 thanks, will take a look into your PR,

with the new version of libcache you can clean the cache in two different mechanisms

  • Let the cache clean itself lazily on the read-write operation.
func setupGoGuardian() {
	keeper = jwt.StaticSecret{
		ID:        "secret-id",
		Secret:    []byte("secret"),
		Algorithm: jwt.HS256,
	}
	cache := libcache.FIFO.New(0)
	cache.SetTTL(time.Minute * 5)
	basicStrategy := basic.NewCached(validateUser, cache)
	jwtStrategy := jwt.New(cache, keeper)
	strategy = union.New(jwtStrategy, basicStrategy)
}
  • spawn a garbage collector to collect expired items on time
func setupGoGuardian() {
	keeper = jwt.StaticSecret{
		ID:        "secret-id",
		Secret:    []byte("secret"),
		Algorithm: jwt.HS256,
	}
	cache := libcache.FIFO.New(0)
	cache.SetTTL(time.Minute * 5)
        go libcache.GC(context.TODO(), cache)
	basicStrategy := basic.NewCached(validateUser, cache)
	jwtStrategy := jwt.New(cache, keeper)
	strategy = union.New(jwtStrategy, basicStrategy)
}

shaj13 avatar Aug 30 '22 17:08 shaj13