@@ -81,6 +81,20 @@ func (ts *TokenStore) c(name string) *mgo.Collection {
8181
8282// Create Create and store the new token information
8383func (ts * TokenStore ) Create (info oauth2.TokenInfo ) (err error ) {
84+ jv , err := json .Marshal (info )
85+ if err != nil {
86+ return
87+ }
88+
89+ 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 ()),
94+ })
95+ return
96+ }
97+
8498 aexp := info .GetAccessCreateAt ().Add (info .GetAccessExpiresIn ())
8599 rexp := aexp
86100 if refresh := info .GetRefresh (); refresh != "" {
@@ -90,10 +104,6 @@ func (ts *TokenStore) Create(info oauth2.TokenInfo) (err error) {
90104 }
91105 }
92106 id := bson .NewObjectId ().Hex ()
93- jv , err := json .Marshal (info )
94- if err != nil {
95- return
96- }
97107 runner := txn .NewRunner (ts .c (ts .tcfg .TxnCName ))
98108 ops := []txn.Op {{
99109 C : ts .tcfg .BasicCName ,
@@ -127,9 +137,9 @@ func (ts *TokenStore) Create(info oauth2.TokenInfo) (err error) {
127137 return
128138}
129139
130- // RemoveByAccess Use the access token to delete the token information
131- func (ts * TokenStore ) RemoveByAccess ( access string ) (err error ) {
132- verr := ts .c (ts .tcfg .AccessCName ).RemoveId (access )
140+ // RemoveByCode Use the authorization code to delete the token information
141+ func (ts * TokenStore ) RemoveByCode ( code string ) (err error ) {
142+ verr := ts .c (ts .tcfg .BasicCName ).RemoveId (code )
133143 if verr != nil {
134144 if verr == mgo .ErrNotFound {
135145 return
@@ -139,9 +149,9 @@ func (ts *TokenStore) RemoveByAccess(access string) (err error) {
139149 return
140150}
141151
142- // RemoveByRefresh Use the refresh token to delete the token information
143- func (ts * TokenStore ) RemoveByRefresh ( refresh string ) (err error ) {
144- verr := ts .c (ts .tcfg .RefreshCName ).RemoveId (refresh )
152+ // RemoveByAccess Use the access token to delete the token information
153+ func (ts * TokenStore ) RemoveByAccess ( access string ) (err error ) {
154+ verr := ts .c (ts .tcfg .AccessCName ).RemoveId (access )
145155 if verr != nil {
146156 if verr == mgo .ErrNotFound {
147157 return
@@ -151,19 +161,21 @@ func (ts *TokenStore) RemoveByRefresh(refresh string) (err error) {
151161 return
152162}
153163
154- // get
155- func (ts * TokenStore ) get (cname , token string ) (ti oauth2.TokenInfo , err error ) {
156- var td tokenData
157- verr := ts .c (cname ).FindId (token ).One (& td )
164+ // RemoveByRefresh Use the refresh token to delete the token information
165+ func (ts * TokenStore ) RemoveByRefresh (refresh string ) (err error ) {
166+ verr := ts .c (ts .tcfg .RefreshCName ).RemoveId (refresh )
158167 if verr != nil {
159168 if verr == mgo .ErrNotFound {
160169 return
161170 }
162171 err = verr
163- return
164172 }
173+ return
174+ }
175+
176+ func (ts * TokenStore ) getData (basicID string ) (ti oauth2.TokenInfo , err error ) {
165177 var bd basicData
166- verr = ts .c (ts .tcfg .BasicCName ).FindId (td . BasicID ).One (& bd )
178+ verr : = ts .c (ts .tcfg .BasicCName ).FindId (basicID ).One (& bd )
167179 if verr != nil {
168180 if verr == mgo .ErrNotFound {
169181 return
@@ -180,15 +192,43 @@ func (ts *TokenStore) get(cname, token string) (ti oauth2.TokenInfo, err error)
180192 return
181193}
182194
195+ func (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 {
200+ return
201+ }
202+ err = verr
203+ return
204+ }
205+ basicID = td .BasicID
206+ return
207+ }
208+
209+ // GetByCode Use the authorization code for token information data
210+ func (ts * TokenStore ) GetByCode (code string ) (ti oauth2.TokenInfo , err error ) {
211+ ti , err = ts .getData (code )
212+ return
213+ }
214+
183215// GetByAccess Use the access token for token information data
184216func (ts * TokenStore ) GetByAccess (access string ) (ti oauth2.TokenInfo , err error ) {
185- ti , err = ts .get (ts .tcfg .AccessCName , access )
217+ basicID , err := ts .getBasicID (ts .tcfg .AccessCName , access )
218+ if err != nil && basicID == "" {
219+ return
220+ }
221+ ti , err = ts .getData (basicID )
186222 return
187223}
188224
189225// GetByRefresh Use the refresh token for token information data
190226func (ts * TokenStore ) GetByRefresh (refresh string ) (ti oauth2.TokenInfo , err error ) {
191- ti , err = ts .get (ts .tcfg .RefreshCName , refresh )
227+ basicID , err := ts .getBasicID (ts .tcfg .RefreshCName , refresh )
228+ if err != nil && basicID == "" {
229+ return
230+ }
231+ ti , err = ts .getData (basicID )
192232 return
193233}
194234
0 commit comments