Skip to content

Commit 7332bfd

Browse files
committed
Fixed gc
1 parent 2a177c4 commit 7332bfd

File tree

3 files changed

+31
-25
lines changed

3 files changed

+31
-25
lines changed

README.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,8 @@ func main() {
2424
manager := manage.NewDefaultManager()
2525

2626
// use mysql token store
27-
store := mysql.NewStore(
27+
store := mysql.NewDefaultStore(
2828
mysql.NewConfig("root:123456@tcp(127.0.0.1:3306)/myapp_test?charset=utf8"),
29-
"",
30-
0,
3129
)
3230

3331
defer store.Close()

mysql.go

+27-16
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ type Config struct {
4141
MaxIdleConns int
4242
}
4343

44+
// NewDefaultStore create mysql store instance
45+
func NewDefaultStore(config *Config) *Store {
46+
return NewStore(config, "", 0)
47+
}
48+
4449
// NewStore create mysql store instance,
4550
// config mysql configuration,
4651
// tableName table name (default oauth2_token),
@@ -114,27 +119,33 @@ func (s *Store) Close() {
114119
s.db.Db.Close()
115120
}
116121

117-
func (s *Store) errorf(format string, args ...interface{}) {
118-
if s.stdout != nil {
119-
buf := fmt.Sprintf(format, args...)
120-
s.stdout.Write([]byte(buf))
122+
func (s *Store) gc() {
123+
for range s.ticker.C {
124+
s.clean()
121125
}
122126
}
123127

124-
func (s *Store) gc() {
125-
for range s.ticker.C {
126-
now := time.Now().Unix()
127-
query := fmt.Sprintf("SELECT COUNT(*) FROM %s WHERE expired_at<=?", s.tableName)
128-
n, err := s.db.SelectInt(query, now)
128+
func (s *Store) clean() {
129+
now := time.Now().Unix()
130+
query := fmt.Sprintf("SELECT COUNT(*) FROM %s WHERE expired_at<=? OR (code='' AND access='' AND refresh='')", s.tableName)
131+
n, err := s.db.SelectInt(query, now)
132+
if err != nil || n == 0 {
129133
if err != nil {
130-
s.errorf("[ERROR]:%s", err.Error())
131-
return
132-
} else if n > 0 {
133-
_, err = s.db.Exec(fmt.Sprintf("DELETE FROM %s WHERE expired_at<=?", s.tableName), now)
134-
if err != nil {
135-
s.errorf("[ERROR]:%s", err.Error())
136-
}
134+
s.errorf(err.Error())
137135
}
136+
return
137+
}
138+
139+
_, err = s.db.Exec(fmt.Sprintf("DELETE FROM %s WHERE expired_at<=? OR (code='' AND access='' AND refresh='')", s.tableName), now)
140+
if err != nil {
141+
s.errorf(err.Error())
142+
}
143+
}
144+
145+
func (s *Store) errorf(format string, args ...interface{}) {
146+
if s.stdout != nil {
147+
buf := fmt.Sprintf("[OAUTH2-MYSQL-ERROR]: "+format, args...)
148+
s.stdout.Write([]byte(buf))
138149
}
139150
}
140151

mysql_test.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,18 @@ import (
66

77
"gopkg.in/oauth2.v3/models"
88

9-
. "github.com/smartystreets/goconvey/convey"
10-
119
_ "github.com/go-sql-driver/mysql"
10+
. "github.com/smartystreets/goconvey/convey"
1211
)
1312

1413
const (
1514
dsn = "root:@tcp(127.0.0.1:3306)/myapp_test?charset=utf8"
1615
)
1716

1817
func TestTokenStore(t *testing.T) {
19-
// wait gc
20-
defer time.Sleep(time.Second * 2)
21-
2218
Convey("Test mysql token store", t, func() {
23-
store := NewStore(NewConfig(dsn), "", 1)
19+
store := NewDefaultStore(NewConfig(dsn))
20+
defer store.clean()
2421

2522
Convey("Test authorization code store", func() {
2623
info := &models.Token{

0 commit comments

Comments
 (0)