Skip to content

Commit 1a67e77

Browse files
authored
refactor: remove dead code (#759)
1 parent acd7007 commit 1a67e77

8 files changed

+8
-1103
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ require (
3838
github.com/trim21/pkg v0.0.4
3939
go.uber.org/fx v1.23.0
4040
go.uber.org/zap v1.27.0
41-
golang.org/x/crypto v0.36.0
4241
golang.org/x/text v0.23.0
4342
gopkg.in/yaml.v3 v3.0.1
4443
gorm.io/driver/mysql v1.5.7
@@ -111,6 +110,7 @@ require (
111110
go.uber.org/multierr v1.11.0 // indirect
112111
go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect
113112
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
113+
golang.org/x/crypto v0.36.0 // indirect
114114
golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac // indirect
115115
golang.org/x/mod v0.23.0 // indirect
116116
golang.org/x/net v0.36.0 // indirect

internal/auth/domain.go

-25
Original file line numberDiff line numberDiff line change
@@ -28,35 +28,10 @@ type Repo interface {
2828
// GetByToken return an authorized user by a valid access token.
2929
GetByToken(ctx context.Context, token string) (UserInfo, error)
3030
GetPermission(ctx context.Context, groupID uint8) (Permission, error)
31-
32-
CreateAccessToken(
33-
ctx context.Context, userID model.UserID, name string, expiration time.Duration,
34-
) (token string, err error)
35-
36-
ListAccessToken(ctx context.Context, userID model.UserID) ([]AccessToken, error)
37-
DeleteAccessToken(ctx context.Context, tokenID uint32) (bool, error)
38-
39-
// GetByEmail return (Auth, HashedPassword, error)
40-
GetByEmail(ctx context.Context, email string) (UserInfo, []byte, error)
41-
GetTokenByID(ctx context.Context, id uint32) (AccessToken, error)
4231
}
4332

4433
type Service interface {
4534
GetByToken(ctx context.Context, token string) (Auth, error)
46-
GetByID(ctx context.Context, userID model.UserID) (Auth, error)
47-
48-
ComparePassword(hashed []byte, password string) (bool, error)
49-
50-
Login(ctx context.Context, email, password string) (Auth, bool, error)
51-
52-
GetTokenByID(ctx context.Context, tokenID uint32) (AccessToken, error)
53-
CreateAccessToken(
54-
ctx context.Context, userID model.UserID, name string, expiration time.Duration,
55-
) (token string, err error)
56-
ListAccessToken(ctx context.Context, userID model.UserID) ([]AccessToken, error)
57-
DeleteAccessToken(ctx context.Context, tokenID uint32) (bool, error)
58-
59-
// GetPermission(ctx context.Context, id model.UserGroupID) (Permission, error)
6035
}
6136

6237
type UserInfo struct {

internal/auth/mysql_repository.go

-144
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,17 @@ package auth
1717
import (
1818
"context"
1919
"database/sql"
20-
"encoding/json"
2120
"errors"
22-
"strconv"
2321
"time"
2422

2523
"github.com/jmoiron/sqlx"
2624
"github.com/trim21/errgo"
2725
"go.uber.org/zap"
2826
"gorm.io/gorm"
2927

30-
"github.com/bangumi/server/dal/dao"
3128
"github.com/bangumi/server/dal/query"
3229
"github.com/bangumi/server/domain/gerr"
33-
"github.com/bangumi/server/internal/model"
3430
"github.com/bangumi/server/internal/pkg/gstr"
35-
"github.com/bangumi/server/internal/pkg/logger"
36-
"github.com/bangumi/server/internal/pkg/random"
3731
"github.com/bangumi/server/internal/user"
3832
)
3933

@@ -51,23 +45,6 @@ type mysqlRepo struct {
5145
log *zap.Logger
5246
}
5347

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-
7148
func (m mysqlRepo) GetByToken(ctx context.Context, token string) (UserInfo, error) {
7249
var access struct {
7350
UserID string `db:"user_id"`
@@ -129,124 +106,3 @@ func (m mysqlRepo) GetPermission(ctx context.Context, groupID uint8) (Permission
129106

130107
return p, nil
131108
}
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-
}

internal/auth/mysql_repository_test.go

+6-84
Original file line numberDiff line numberDiff line change
@@ -16,37 +16,33 @@ package auth_test
1616

1717
import (
1818
"context"
19-
"strconv"
2019
"strings"
2120
"testing"
22-
"time"
2321

2422
"github.com/jmoiron/sqlx"
2523
"github.com/samber/lo"
2624
"github.com/stretchr/testify/require"
2725
"go.uber.org/zap"
2826

29-
"github.com/bangumi/server/dal/dao"
3027
"github.com/bangumi/server/dal/query"
3128
"github.com/bangumi/server/domain/gerr"
3229
"github.com/bangumi/server/internal/auth"
33-
"github.com/bangumi/server/internal/pkg/gtime"
3430
"github.com/bangumi/server/internal/pkg/test"
3531
)
3632

37-
func getRepo(t *testing.T) (auth.Repo, *query.Query) {
33+
func getRepo(t *testing.T) auth.Repo {
3834
t.Helper()
3935
q := query.Use(test.GetGorm(t))
4036
repo := auth.NewMysqlRepo(q, zap.NewNop(), sqlx.NewDb(lo.Must(q.DB().DB()), "mysql"))
4137

42-
return repo, q
38+
return repo
4339
}
4440

4541
func TestMysqlRepo_GetByToken_NotFound(t *testing.T) {
4642
test.RequireEnv(t, "mysql")
4743
t.Parallel()
4844

49-
repo, _ := getRepo(t)
45+
repo := getRepo(t)
5046

5147
_, err := repo.GetByToken(context.Background(), "not exist token")
5248
require.ErrorIs(t, err, gerr.ErrNotFound)
@@ -56,7 +52,7 @@ func TestMysqlRepo_GetByToken(t *testing.T) {
5652
test.RequireEnv(t, "mysql")
5753
t.Parallel()
5854

59-
repo, _ := getRepo(t)
55+
repo := getRepo(t)
6056

6157
u, err := repo.GetByToken(context.Background(), "a_development_access_token")
6258
require.NoError(t, err)
@@ -68,7 +64,7 @@ func TestMysqlRepo_GetByToken_case_sensitive(t *testing.T) {
6864
test.RequireEnv(t, "mysql")
6965
t.Parallel()
7066

71-
repo, _ := getRepo(t)
67+
repo := getRepo(t)
7268

7369
_, err := repo.GetByToken(context.Background(), strings.ToUpper("a_development_access_token"))
7470
require.ErrorIs(t, err, gerr.ErrNotFound)
@@ -78,82 +74,8 @@ func TestMysqlRepo_GetByToken_expired(t *testing.T) {
7874
test.RequireEnv(t, "mysql")
7975
t.Parallel()
8076

81-
repo, _ := getRepo(t)
77+
repo := getRepo(t)
8278

8379
_, err := repo.GetByToken(context.Background(), "a_expired_token")
8480
require.ErrorIs(t, err, gerr.ErrNotFound)
8581
}
86-
87-
func TestMysqlRepo_CreateAccessToken(t *testing.T) {
88-
test.RequireEnv(t, "mysql")
89-
t.Parallel()
90-
91-
repo, q := getRepo(t)
92-
t.Cleanup(func() {
93-
_, err := q.AccessToken.WithContext(context.TODO()).Where(q.AccessToken.UserID.Eq("1")).Delete()
94-
require.NoError(t, err)
95-
})
96-
97-
token, err := repo.CreateAccessToken(context.Background(), 1, "token name", gtime.OneWeek)
98-
require.NoError(t, err)
99-
require.Len(t, token, 40)
100-
}
101-
102-
func TestMysqlRepo_DeleteAccessToken(t *testing.T) {
103-
test.RequireEnv(t, "mysql")
104-
t.Parallel()
105-
106-
const id = 100
107-
repo, q := getRepo(t)
108-
109-
cleanup := func() {
110-
_, err := q.AccessToken.WithContext(context.TODO()).Where(q.AccessToken.ID.Eq(id)).Delete()
111-
require.NoError(t, err)
112-
}
113-
t.Cleanup(cleanup)
114-
115-
err := q.AccessToken.WithContext(context.Background()).Create(&dao.AccessToken{
116-
ID: id,
117-
Type: auth.TokenTypeAccessToken,
118-
AccessToken: t.Name(),
119-
ClientID: "access token",
120-
UserID: "2",
121-
ExpiredAt: time.Now().Add(gtime.OneWeek),
122-
Scope: nil,
123-
Info: []byte{},
124-
})
125-
require.NoError(t, err)
126-
127-
ok, err := repo.DeleteAccessToken(context.Background(), id)
128-
require.NoError(t, err)
129-
require.True(t, ok)
130-
}
131-
132-
func TestMysqlRepo_ListAccessToken(t *testing.T) {
133-
test.RequireEnv(t, "mysql")
134-
t.Parallel()
135-
136-
repo, q := getRepo(t)
137-
138-
test.RunAndCleanup(t, func() {
139-
_, err := q.AccessToken.WithContext(context.TODO()).Where(q.AccessToken.UserID.Eq("3")).Delete()
140-
require.NoError(t, err)
141-
})
142-
143-
for i := 1; i < 5; i++ {
144-
err := q.AccessToken.WithContext(context.Background()).Create(&dao.AccessToken{
145-
Type: auth.TokenTypeAccessToken,
146-
AccessToken: t.Name() + strconv.Itoa(i),
147-
ClientID: "access token",
148-
UserID: "3",
149-
ExpiredAt: time.Now().Add(gtime.OneWeek),
150-
Scope: nil,
151-
Info: []byte{},
152-
})
153-
require.NoError(t, err)
154-
}
155-
156-
tokens, err := repo.ListAccessToken(context.Background(), 3)
157-
require.NoError(t, err)
158-
require.Len(t, tokens, 4)
159-
}

0 commit comments

Comments
 (0)