@@ -17,23 +17,17 @@ package auth
17
17
import (
18
18
"context"
19
19
"database/sql"
20
- "encoding/json"
21
20
"errors"
22
- "strconv"
23
21
"time"
24
22
25
23
"github.com/jmoiron/sqlx"
26
24
"github.com/trim21/errgo"
27
25
"go.uber.org/zap"
28
26
"gorm.io/gorm"
29
27
30
- "github.com/bangumi/server/dal/dao"
31
28
"github.com/bangumi/server/dal/query"
32
29
"github.com/bangumi/server/domain/gerr"
33
- "github.com/bangumi/server/internal/model"
34
30
"github.com/bangumi/server/internal/pkg/gstr"
35
- "github.com/bangumi/server/internal/pkg/logger"
36
- "github.com/bangumi/server/internal/pkg/random"
37
31
"github.com/bangumi/server/internal/user"
38
32
)
39
33
@@ -51,23 +45,6 @@ type mysqlRepo struct {
51
45
log * zap.Logger
52
46
}
53
47
54
- func (m mysqlRepo ) GetByEmail (ctx context.Context , email string ) (UserInfo , []byte , error ) {
55
- u , err := m .q .Member .WithContext (ctx ).Where (m .q .Member .Email .Eq (email )).Take ()
56
- if err != nil {
57
- if errors .Is (err , gorm .ErrRecordNotFound ) {
58
- return UserInfo {}, nil , gerr .ErrNotFound
59
- }
60
-
61
- return UserInfo {}, nil , errgo .Wrap (err , "gorm" )
62
- }
63
-
64
- return UserInfo {
65
- RegTime : time .Unix (u .Regdate , 0 ),
66
- ID : u .ID ,
67
- GroupID : u .Groupid ,
68
- }, u .PasswordCrypt , nil
69
- }
70
-
71
48
func (m mysqlRepo ) GetByToken (ctx context.Context , token string ) (UserInfo , error ) {
72
49
var access struct {
73
50
UserID string `db:"user_id"`
@@ -129,124 +106,3 @@ func (m mysqlRepo) GetPermission(ctx context.Context, groupID uint8) (Permission
129
106
130
107
return p , nil
131
108
}
132
-
133
- const defaultAccessTokenLength = 40
134
-
135
- func (m mysqlRepo ) CreateAccessToken (
136
- ctx context.Context , id model.UserID , name string , expiration time.Duration ,
137
- ) (string , error ) {
138
- token := random .Base62String (defaultAccessTokenLength )
139
- var now = time .Now ()
140
-
141
- var info = TokenInfo {
142
- Name : name ,
143
- CreatedAt : now ,
144
- }
145
-
146
- var expiredAt = now .Add (expiration )
147
- if expiration < 0 {
148
- expiredAt = time.Time {}
149
- }
150
-
151
- infoByte , err := json .Marshal (info )
152
- if err != nil {
153
- // marshal simple struct should never fail
154
- m .log .Fatal ("marshal simple struct should never fail" ,
155
- zap .Error (err ), zap .String ("name" , name ), zap .Time ("now" , now ))
156
- panic ("unexpected json encode error" )
157
- }
158
-
159
- err = m .q .AccessToken .WithContext (ctx ).Create (& dao.AccessToken {
160
- Type : TokenTypeAccessToken ,
161
- AccessToken : token ,
162
- ClientID : "access token" ,
163
- UserID : strconv .FormatUint (uint64 (id ), 10 ),
164
- ExpiredAt : expiredAt ,
165
- Scope : nil ,
166
- Info : infoByte ,
167
- })
168
- if err != nil {
169
- return "" , errgo .Wrap (err , "dal" )
170
- }
171
-
172
- return token , nil
173
- }
174
-
175
- type TokenInfo struct {
176
- CreatedAt time.Time `json:"created_at"`
177
- Name string `json:"name"`
178
- }
179
-
180
- func (m mysqlRepo ) ListAccessToken (ctx context.Context , userID model.UserID ) ([]AccessToken , error ) {
181
- records , err := m .q .AccessToken .WithContext (ctx ).
182
- Where (m .q .AccessToken .UserID .Eq (strconv .FormatUint (uint64 (userID ), 10 )),
183
- m .q .AccessToken .ExpiredAt .Gte (time .Now ())).Find ()
184
- if err != nil {
185
- return nil , errgo .Wrap (err , "dal" )
186
- }
187
-
188
- var tokens = make ([]AccessToken , len (records ))
189
- for i , record := range records {
190
- tokens [i ] = convertAccessToken (record )
191
- }
192
-
193
- return tokens , errgo .Wrap (err , "dal" )
194
- }
195
-
196
- const defaultOauthAccessExpiration = time .Hour * 168
197
-
198
- func convertAccessToken (t * dao.AccessToken ) AccessToken {
199
- var createdAt time.Time
200
- var name = "oauth token"
201
-
202
- switch t .Type {
203
- case TokenTypeAccessToken :
204
- if len (t .Info ) > 0 {
205
- var info TokenInfo
206
- if err := json .Unmarshal (t .Info , & info ); err != nil {
207
- logger .Fatal ("unexpected error when trying to unmarshal json data" ,
208
- zap .Error (err ), zap .ByteString ("raw" , t .Info ))
209
- }
210
- name = info .Name
211
- createdAt = info .CreatedAt
212
- } else {
213
- name = "personal access token"
214
- }
215
- case TokenTypeOauthToken :
216
- createdAt = t .ExpiredAt .Add (- defaultOauthAccessExpiration )
217
- }
218
-
219
- v , err := strconv .ParseUint (t .UserID , 10 , 32 )
220
- if err != nil {
221
- logger .Fatal ("parsing UserID" , zap .String ("raw" , t .UserID ), zap .Error (err ))
222
- }
223
-
224
- return AccessToken {
225
- ExpiredAt : t .ExpiredAt ,
226
- CreatedAt : createdAt ,
227
- Name : name ,
228
- UserID : model .UserID (v ),
229
- ClientID : t .ClientID ,
230
- ID : t .ID ,
231
- }
232
- }
233
-
234
- func (m mysqlRepo ) DeleteAccessToken (ctx context.Context , id uint32 ) (bool , error ) {
235
- info , err := m .q .AccessToken .WithContext (ctx ).Where (m .q .AccessToken .ID .Eq (id )).Delete ()
236
-
237
- return info .RowsAffected > 0 , errgo .Wrap (err , "dal.Delete" )
238
- }
239
-
240
- func (m mysqlRepo ) GetTokenByID (ctx context.Context , id uint32 ) (AccessToken , error ) {
241
- record , err := m .q .AccessToken .WithContext (ctx ).Where (m .q .AccessToken .ID .Eq (id )).Take ()
242
- if err != nil {
243
- if errors .Is (err , gorm .ErrRecordNotFound ) {
244
- return AccessToken {}, gerr .ErrNotFound
245
- }
246
-
247
- m .log .Error ("unexpected error happened" , zap .Error (err ))
248
- return AccessToken {}, errgo .Wrap (err , "dal" )
249
- }
250
-
251
- return convertAccessToken (record ), errgo .Wrap (err , "dal" )
252
- }
0 commit comments