From 3a25fea3745e417640dc95f11eec7da50f8ee9d1 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Wed, 16 Jun 2021 10:48:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7AccessKey=EF=BC=9A=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=9C=80=E8=BF=91=E8=AE=BF=E9=97=AE=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E3=80=81=E4=BF=AE=E5=A4=8DAccessKey=E6=B2=A1=E6=9C=89=E5=8C=BA?= =?UTF-8?q?=E5=88=86=E7=94=A8=E6=88=B7=E7=9A=84Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/user_access_key_dao.go | 26 +++++++++++++------ internal/db/models/user_access_key_model.go | 4 ++- .../rpc/services/service_api_access_token.go | 11 ++++++-- .../rpc/services/service_user_access_key.go | 11 ++++---- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/internal/db/models/user_access_key_dao.go b/internal/db/models/user_access_key_dao.go index 9ce811d4..05a0cbe8 100644 --- a/internal/db/models/user_access_key_dao.go +++ b/internal/db/models/user_access_key_dao.go @@ -6,6 +6,7 @@ import ( "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/rands" + "time" ) const ( @@ -34,7 +35,7 @@ func init() { }) } -// 启用条目 +// EnableUserAccessKey 启用条目 func (this *UserAccessKeyDAO) EnableUserAccessKey(tx *dbs.Tx, id int64) error { _, err := this.Query(tx). Pk(id). @@ -43,7 +44,7 @@ func (this *UserAccessKeyDAO) EnableUserAccessKey(tx *dbs.Tx, id int64) error { return err } -// 禁用条目 +// DisableUserAccessKey 禁用条目 func (this *UserAccessKeyDAO) DisableUserAccessKey(tx *dbs.Tx, id int64) error { _, err := this.Query(tx). Pk(id). @@ -52,7 +53,7 @@ func (this *UserAccessKeyDAO) DisableUserAccessKey(tx *dbs.Tx, id int64) error { return err } -// 查找启用中的条目 +// FindEnabledUserAccessKey 查找启用中的条目 func (this *UserAccessKeyDAO) FindEnabledUserAccessKey(tx *dbs.Tx, id int64) (*UserAccessKey, error) { result, err := this.Query(tx). Pk(id). @@ -64,7 +65,7 @@ func (this *UserAccessKeyDAO) FindEnabledUserAccessKey(tx *dbs.Tx, id int64) (*U return result.(*UserAccessKey), err } -// 创建Key +// CreateAccessKey 创建Key func (this *UserAccessKeyDAO) CreateAccessKey(tx *dbs.Tx, userId int64, description string) (int64, error) { if userId <= 0 { return 0, errors.New("invalid userId") @@ -79,9 +80,10 @@ func (this *UserAccessKeyDAO) CreateAccessKey(tx *dbs.Tx, userId int64, descript return this.SaveInt64(tx, op) } -// 查找用户所有的Key +// FindAllEnabledAccessKeys 查找用户所有的Key func (this *UserAccessKeyDAO) FindAllEnabledAccessKeys(tx *dbs.Tx, userId int64) (result []*UserAccessKey, err error) { _, err = this.Query(tx). + Attr("userId", userId). State(UserAccessKeyStateEnabled). DescPk(). Slice(&result). @@ -89,7 +91,7 @@ func (this *UserAccessKeyDAO) FindAllEnabledAccessKeys(tx *dbs.Tx, userId int64) return } -// 检查用户的AccessKey +// CheckUserAccessKey 检查用户的AccessKey func (this *UserAccessKeyDAO) CheckUserAccessKey(tx *dbs.Tx, userId int64, accessKeyId int64) (bool, error) { return this.Query(tx). Pk(accessKeyId). @@ -98,7 +100,7 @@ func (this *UserAccessKeyDAO) CheckUserAccessKey(tx *dbs.Tx, userId int64, acces Exist() } -// 设置是否启用 +// UpdateAccessKeyIsOn 设置是否启用 func (this *UserAccessKeyDAO) UpdateAccessKeyIsOn(tx *dbs.Tx, accessKeyId int64, isOn bool) error { if accessKeyId <= 0 { return errors.New("invalid accessKeyId") @@ -110,7 +112,7 @@ func (this *UserAccessKeyDAO) UpdateAccessKeyIsOn(tx *dbs.Tx, accessKeyId int64, return err } -// 根据UniqueId查找AccessKey +// FindAccessKeyWithUniqueId 根据UniqueId查找AccessKey func (this *UserAccessKeyDAO) FindAccessKeyWithUniqueId(tx *dbs.Tx, uniqueId string) (*UserAccessKey, error) { one, err := this.Query(tx). Attr("uniqueId", uniqueId). @@ -123,3 +125,11 @@ func (this *UserAccessKeyDAO) FindAccessKeyWithUniqueId(tx *dbs.Tx, uniqueId str return one.(*UserAccessKey), nil } + +// UpdateAccessKeyAccessedAt 更新AccessKey访问时间 +func (this *UserAccessKeyDAO) UpdateAccessKeyAccessedAt(tx *dbs.Tx, accessKeyId int64) error { + return this.Query(tx). + Pk(accessKeyId). + Set("accessedAt", time.Now().Unix()). + UpdateQuickly() +} diff --git a/internal/db/models/user_access_key_model.go b/internal/db/models/user_access_key_model.go index 1a324562..c8bbfc75 100644 --- a/internal/db/models/user_access_key_model.go +++ b/internal/db/models/user_access_key_model.go @@ -1,6 +1,6 @@ package models -// AccessKey +// UserAccessKey AccessKey type UserAccessKey struct { Id uint32 `field:"id"` // ID UserId uint32 `field:"userId"` // 用户ID @@ -9,6 +9,7 @@ type UserAccessKey struct { UniqueId string `field:"uniqueId"` // 唯一的Key Secret string `field:"secret"` // 密钥 Description string `field:"description"` // 备注 + AccessedAt uint64 `field:"accessedAt"` // 最近一次访问时间 State uint8 `field:"state"` // 状态 } @@ -20,6 +21,7 @@ type UserAccessKeyOperator struct { UniqueId interface{} // 唯一的Key Secret interface{} // 密钥 Description interface{} // 备注 + AccessedAt interface{} // 最近一次访问时间 State interface{} // 状态 } diff --git a/internal/rpc/services/service_api_access_token.go b/internal/rpc/services/service_api_access_token.go index 67eea975..91cd754c 100644 --- a/internal/rpc/services/service_api_access_token.go +++ b/internal/rpc/services/service_api_access_token.go @@ -7,12 +7,12 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" ) -// AccessToken相关服务 +// APIAccessTokenService AccessToken相关服务 type APIAccessTokenService struct { BaseService } -// 获取AccessToken +// GetAPIAccessToken 获取AccessToken func (this *APIAccessTokenService) GetAPIAccessToken(ctx context.Context, req *pb.GetAPIAccessTokenRequest) (*pb.GetAPIAccessTokenResponse, error) { if req.Type == "user" { // 用户 tx := this.NullTx() @@ -28,11 +28,18 @@ func (this *APIAccessTokenService) GetAPIAccessToken(ctx context.Context, req *p return nil, errors.New("access key not found") } + // 更新AccessKey访问时间 + err = models.SharedUserAccessKeyDAO.UpdateAccessKeyAccessedAt(tx, int64(accessKey.Id)) + if err != nil { + return nil, err + } + // 创建AccessToken token, expiresAt, err := models.SharedAPIAccessTokenDAO.GenerateAccessToken(tx, int64(accessKey.UserId)) if err != nil { return nil, err } + return &pb.GetAPIAccessTokenResponse{ Token: token, ExpiresAt: expiresAt, diff --git a/internal/rpc/services/service_user_access_key.go b/internal/rpc/services/service_user_access_key.go index cdf50832..ea0da9b9 100644 --- a/internal/rpc/services/service_user_access_key.go +++ b/internal/rpc/services/service_user_access_key.go @@ -6,12 +6,12 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" ) -// 用户AccessKey相关服务 +// UserAccessKeyService 用户AccessKey相关服务 type UserAccessKeyService struct { BaseService } -// 创建AccessKey +// CreateUserAccessKey 创建AccessKey func (this *UserAccessKeyService) CreateUserAccessKey(ctx context.Context, req *pb.CreateUserAccessKeyRequest) (*pb.CreateUserAccessKeyResponse, error) { _, _, err := this.ValidateAdminAndUser(ctx, 0, req.UserId) if err != nil { @@ -27,7 +27,7 @@ func (this *UserAccessKeyService) CreateUserAccessKey(ctx context.Context, req * return &pb.CreateUserAccessKeyResponse{UserAccessKeyId: userAccessKeyId}, nil } -// 查找所有的AccessKey +// FindAllEnabledUserAccessKeys 查找所有的AccessKey func (this *UserAccessKeyService) FindAllEnabledUserAccessKeys(ctx context.Context, req *pb.FindAllEnabledUserAccessKeysRequest) (*pb.FindAllEnabledUserAccessKeysResponse, error) { _, _, err := this.ValidateAdminAndUser(ctx, 0, req.UserId) if err != nil { @@ -51,13 +51,14 @@ func (this *UserAccessKeyService) FindAllEnabledUserAccessKeys(ctx context.Conte UniqueId: accessKey.UniqueId, Secret: accessKey.Secret, Description: accessKey.Description, + AccessedAt: int64(accessKey.AccessedAt), }) } return &pb.FindAllEnabledUserAccessKeysResponse{UserAccessKeys: result}, nil } -// 删除AccessKey +// DeleteUserAccessKey 删除AccessKey func (this *UserAccessKeyService) DeleteUserAccessKey(ctx context.Context, req *pb.DeleteUserAccessKeyRequest) (*pb.RPCSuccess, error) { _, userId, err := this.ValidateAdminAndUser(ctx, 0, 0) if err != nil { @@ -83,7 +84,7 @@ func (this *UserAccessKeyService) DeleteUserAccessKey(ctx context.Context, req * return this.Success() } -// 设置是否启用AccessKey +// UpdateUserAccessKeyIsOn 设置是否启用AccessKey func (this *UserAccessKeyService) UpdateUserAccessKeyIsOn(ctx context.Context, req *pb.UpdateUserAccessKeyIsOnRequest) (*pb.RPCSuccess, error) { _, userId, err := this.ValidateAdminAndUser(ctx, 0, 0) if err != nil {