@@ -79,6 +79,13 @@ func (ts *TokenStore) c(name string) *mgo.Collection {
7979 return ts .session .DB (ts .mcfg .DB ).C (name )
8080}
8181
82+ func (ts * TokenStore ) cHandler (name string , handler func (c * mgo.Collection )) {
83+ session := ts .session .Clone ()
84+ defer session .Close ()
85+ handler (session .DB (ts .mcfg .DB ).C (name ))
86+ return
87+ }
88+
8289// Create Create and store the new token information
8390func (ts * TokenStore ) Create (info oauth2.TokenInfo ) (err error ) {
8491 jv , err := json .Marshal (info )
@@ -87,10 +94,12 @@ func (ts *TokenStore) Create(info oauth2.TokenInfo) (err error) {
8794 }
8895
8996 if code := info .GetCode (); code != "" {
90- err = ts .c (ts .tcfg .BasicCName ).Insert (basicData {
91- ID : code ,
92- Data : jv ,
93- ExpiredAt : info .GetCodeCreateAt ().Add (info .GetCodeExpiresIn ()),
97+ ts .cHandler (ts .tcfg .BasicCName , func (c * mgo.Collection ) {
98+ err = c .Insert (basicData {
99+ ID : code ,
100+ Data : jv ,
101+ ExpiredAt : info .GetCodeCreateAt ().Add (info .GetCodeExpiresIn ()),
102+ })
94103 })
95104 return
96105 }
@@ -104,7 +113,6 @@ func (ts *TokenStore) Create(info oauth2.TokenInfo) (err error) {
104113 }
105114 }
106115 id := bson .NewObjectId ().Hex ()
107- runner := txn .NewRunner (ts .c (ts .tcfg .TxnCName ))
108116 ops := []txn.Op {{
109117 C : ts .tcfg .BasicCName ,
110118 Id : id ,
@@ -133,76 +141,89 @@ func (ts *TokenStore) Create(info oauth2.TokenInfo) (err error) {
133141 },
134142 })
135143 }
136- err = runner .Run (ops , "" , nil )
144+ ts .cHandler (ts .tcfg .TxnCName , func (c * mgo.Collection ) {
145+ runner := txn .NewRunner (c )
146+ err = runner .Run (ops , "" , nil )
147+ })
137148 return
138149}
139150
140151// RemoveByCode Use the authorization code to delete the token information
141152func (ts * TokenStore ) RemoveByCode (code string ) (err error ) {
142- verr := ts .c (ts .tcfg .BasicCName ).RemoveId (code )
143- if verr != nil {
144- if verr == mgo .ErrNotFound {
145- return
153+ ts .cHandler (ts .tcfg .BasicCName , func (c * mgo.Collection ) {
154+ verr := c .RemoveId (code )
155+ if verr != nil {
156+ if verr == mgo .ErrNotFound {
157+ return
158+ }
159+ err = verr
146160 }
147- err = verr
148- }
161+ })
149162 return
150163}
151164
152165// RemoveByAccess Use the access token to delete the token information
153166func (ts * TokenStore ) RemoveByAccess (access string ) (err error ) {
154- verr := ts .c (ts .tcfg .AccessCName ).RemoveId (access )
155- if verr != nil {
156- if verr == mgo .ErrNotFound {
157- return
167+ ts .cHandler (ts .tcfg .AccessCName , func (c * mgo.Collection ) {
168+ verr := c .RemoveId (access )
169+ if verr != nil {
170+ if verr == mgo .ErrNotFound {
171+ return
172+ }
173+ err = verr
158174 }
159- err = verr
160- }
175+ })
161176 return
162177}
163178
164179// RemoveByRefresh Use the refresh token to delete the token information
165180func (ts * TokenStore ) RemoveByRefresh (refresh string ) (err error ) {
166- verr := ts .c (ts .tcfg .RefreshCName ).RemoveId (refresh )
167- if verr != nil {
168- if verr == mgo .ErrNotFound {
169- return
181+ ts .cHandler (ts .tcfg .RefreshCName , func (c * mgo.Collection ) {
182+ verr := c .RemoveId (refresh )
183+ if verr != nil {
184+ if verr == mgo .ErrNotFound {
185+ return
186+ }
187+ err = verr
170188 }
171- err = verr
172- }
189+ })
173190 return
174191}
175192
176193func (ts * TokenStore ) getData (basicID string ) (ti oauth2.TokenInfo , err error ) {
177- var bd basicData
178- verr := ts .c (ts .tcfg .BasicCName ).FindId (basicID ).One (& bd )
179- if verr != nil {
180- if verr == mgo .ErrNotFound {
194+ ts .cHandler (ts .tcfg .BasicCName , func (c * mgo.Collection ) {
195+ var bd basicData
196+ verr := c .FindId (basicID ).One (& bd )
197+ if verr != nil {
198+ if verr == mgo .ErrNotFound {
199+ return
200+ }
201+ err = verr
181202 return
182203 }
183- err = verr
184- return
185- }
186- var tm models.Token
187- err = json .Unmarshal (bd .Data , & tm )
188- if err != nil {
189- return
190- }
191- ti = & tm
204+ var tm models.Token
205+ err = json .Unmarshal (bd .Data , & tm )
206+ if err != nil {
207+ return
208+ }
209+ ti = & tm
210+ })
192211 return
193212}
194213
195214func (ts * TokenStore ) getBasicID (cname , token string ) (basicID string , err error ) {
196- var td tokenData
197- verr := ts .c (cname ).FindId (token ).One (& td )
198- if verr != nil {
199- if verr == mgo .ErrNotFound {
215+ ts .cHandler (cname , func (c * mgo.Collection ) {
216+ var td tokenData
217+ verr := c .FindId (token ).One (& td )
218+ if verr != nil {
219+ if verr == mgo .ErrNotFound {
220+ return
221+ }
222+ err = verr
200223 return
201224 }
202- err = verr
203- return
204- }
205- basicID = td .BasicID
225+ basicID = td .BasicID
226+ })
206227 return
207228}
208229
0 commit comments