diff --git a/internal/rpc/rpc_client.go b/internal/rpc/rpc_client.go index 35190c29..79d611dd 100644 --- a/internal/rpc/rpc_client.go +++ b/internal/rpc/rpc_client.go @@ -424,6 +424,10 @@ func (this *RPCClient) UserAccessKeyRPC() pb.UserAccessKeyServiceClient { return pb.NewUserAccessKeyServiceClient(this.pickConn()) } +func (this *RPCClient) UserIdentityRPC() pb.UserIdentityServiceClient { + return pb.NewUserIdentityServiceClient(this.pickConn()) +} + func (this *RPCClient) LoginRPC() pb.LoginServiceClient { return pb.NewLoginServiceClient(this.pickConn()) } diff --git a/internal/web/actions/default/files/file.go b/internal/web/actions/default/files/file.go new file mode 100644 index 00000000..30c7e108 --- /dev/null +++ b/internal/web/actions/default/files/file.go @@ -0,0 +1,62 @@ +// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn . + +package files + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/types" + "mime" + "path/filepath" +) + +type FileAction struct { + actionutils.ParentAction +} + +func (this *FileAction) Init() { + this.Nav("", "", "") +} + +func (this *FileAction) RunGet(params struct { + FileId int64 +}) { + fileResp, err := this.RPC().FileRPC().FindEnabledFile(this.AdminContext(), &pb.FindEnabledFileRequest{FileId: params.FileId}) + if err != nil { + this.ErrorPage(err) + return + } + + var file = fileResp.File + if file == nil { + this.NotFound("File", params.FileId) + return + } + + chunkIdsResp, err := this.RPC().FileChunkRPC().FindAllFileChunkIds(this.AdminContext(), &pb.FindAllFileChunkIdsRequest{FileId: file.Id}) + if err != nil { + this.ErrorPage(err) + return + } + + this.AddHeader("Content-Length", types.String(file.Size)) + if len(file.MimeType) > 0 { + this.AddHeader("Content-Type", file.MimeType) + } else if len(file.Filename) > 0 { + var ext = filepath.Ext(file.Filename) + var mimeType = mime.TypeByExtension(ext) + this.AddHeader("Content-Type", mimeType) + } + + for _, chunkId := range chunkIdsResp.FileChunkIds { + chunkResp, err := this.RPC().FileChunkRPC().DownloadFileChunk(this.AdminContext(), &pb.DownloadFileChunkRequest{FileChunkId: chunkId}) + if err != nil { + this.ErrorPage(err) + return + } + if chunkResp.FileChunk == nil { + continue + } + this.Write(chunkResp.FileChunk.Data) + } +} diff --git a/internal/web/actions/default/files/init.go b/internal/web/actions/default/files/init.go new file mode 100644 index 00000000..40258286 --- /dev/null +++ b/internal/web/actions/default/files/init.go @@ -0,0 +1,14 @@ +// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn . + +package files + +import "github.com/iwind/TeaGo" + +func init() { + TeaGo.BeforeStart(func(server *TeaGo.Server) { + server. + Prefix("/files"). + Get("/file", new(FileAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/users/update.go b/internal/web/actions/default/users/update.go index 13079564..4bf617e7 100644 --- a/internal/web/actions/default/users/update.go +++ b/internal/web/actions/default/users/update.go @@ -44,6 +44,13 @@ func (this *UpdateAction) RunGet(params struct { } countAccessKeys := countAccessKeyResp.Count + // 是否有实名认证 + hasNewIndividualIdentity, hasNewEnterpriseIdentity, identityTag, err := userutils.CheckUserIdentity(this.RPC(), this.AdminContext(), params.UserId) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["user"] = maps.Map{ "id": user.Id, "username": user.Username, @@ -54,6 +61,11 @@ func (this *UpdateAction) RunGet(params struct { "mobile": user.Mobile, "isOn": user.IsOn, "countAccessKeys": countAccessKeys, + + // 实名认证 + "hasNewIndividualIdentity": hasNewIndividualIdentity, + "hasNewEnterpriseIdentity": hasNewEnterpriseIdentity, + "identityTag": identityTag, } this.Data["clusterId"] = 0 diff --git a/internal/web/actions/default/users/user.go b/internal/web/actions/default/users/user.go index 613e1e48..37dcca66 100644 --- a/internal/web/actions/default/users/user.go +++ b/internal/web/actions/default/users/user.go @@ -34,7 +34,7 @@ func (this *UserAction) RunGet(params struct { this.ErrorPage(err) return } - user := userResp.User + var user = userResp.User if user == nil { this.NotFound("user", params.UserId) return @@ -69,6 +69,13 @@ func (this *UserAction) RunGet(params struct { } } + // 是否有实名认证 + hasNewIndividualIdentity, hasNewEnterpriseIdentity, identityTag, err := userutils.CheckUserIdentity(this.RPC(), this.AdminContext(), params.UserId) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["user"] = maps.Map{ "id": user.Id, "username": user.Username, @@ -85,6 +92,11 @@ func (this *UserAction) RunGet(params struct { "isVerified": user.IsVerified, "registeredIP": user.RegisteredIP, "registeredRegion": registeredRegion, + + // 实名认证 + "hasNewIndividualIdentity": hasNewIndividualIdentity, + "hasNewEnterpriseIdentity": hasNewEnterpriseIdentity, + "identityTag": identityTag, } this.Show() diff --git a/internal/web/actions/default/users/userutils/utils.go b/internal/web/actions/default/users/userutils/utils.go index d513d8f5..8dd47c9e 100644 --- a/internal/web/actions/default/users/userutils/utils.go +++ b/internal/web/actions/default/users/userutils/utils.go @@ -1,10 +1,14 @@ package userutils import ( + "context" "errors" + "github.com/TeaOSLab/EdgeAdmin/internal/rpc" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/userconfigs" "github.com/iwind/TeaGo/maps" + "strings" ) var ErrUserNotFound = errors.New("not found user") @@ -28,11 +32,59 @@ func InitUser(p *actionutils.ParentAction, userId int64) error { return err } + // 是否有实名认证 + hasNewIndividualIdentity, hasNewEnterpriseIdentity, identityTag, err := CheckUserIdentity(p.RPC(), p.AdminContext(), userId) + if err != nil { + return err + } + p.Data["user"] = maps.Map{ - "id": userId, - "fullname": resp.User.Fullname, - "username": resp.User.Username, - "countAccessKeys": countAccessKeysResp.Count, + "id": userId, + "fullname": resp.User.Fullname, + "username": resp.User.Username, + "countAccessKeys": countAccessKeysResp.Count, + "hasNewIndividualIdentity": hasNewIndividualIdentity, + "hasNewEnterpriseIdentity": hasNewEnterpriseIdentity, + "identityTag": identityTag, } return nil } + +// CheckUserIdentity 实名认证信息 +func CheckUserIdentity(rpcClient *rpc.RPCClient, ctx context.Context, userId int64) (hasNewIndividualIdentity bool, hasNewEnterpriseIdentity bool, identityTag string, err error) { + var tags = []string{} + + // 个人 + individualIdentityResp, err := rpcClient.UserIdentityRPC().FindEnabledUserIdentityWithOrgType(ctx, &pb.FindEnabledUserIdentityWithOrgTypeRequest{ + UserId: userId, + OrgType: userconfigs.UserIdentityOrgTypeIndividual, + }) + if err != nil { + return false, false, "", err + } + var individualIdentity = individualIdentityResp.UserIdentity + hasNewIndividualIdentity = individualIdentity != nil && individualIdentity.Status == userconfigs.UserIdentityStatusSubmitted + + if individualIdentity != nil && individualIdentity.Status == userconfigs.UserIdentityStatusVerified { + tags = append(tags, "个人") + } + + // 企业 + enterpriseIdentityResp, err := rpcClient.UserIdentityRPC().FindEnabledUserIdentityWithOrgType(ctx, &pb.FindEnabledUserIdentityWithOrgTypeRequest{ + UserId: userId, + OrgType: userconfigs.UserIdentityOrgTypeEnterprise, + }) + if err != nil { + return false, false, "", err + } + var enterpriseIdentity = enterpriseIdentityResp.UserIdentity + hasNewEnterpriseIdentity = enterpriseIdentity != nil && enterpriseIdentity.Status == userconfigs.UserIdentityStatusSubmitted + + if enterpriseIdentity != nil && enterpriseIdentity.Status == userconfigs.UserIdentityStatusVerified { + tags = append(tags, "企业") + } + + identityTag = strings.Join(tags, "+") + + return +} diff --git a/internal/web/import.go b/internal/web/import.go index 89bec0b3..7ceb2989 100644 --- a/internal/web/import.go +++ b/internal/web/import.go @@ -3,6 +3,7 @@ package web import ( _ "github.com/TeaOSLab/EdgeAdmin/internal/tasks" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/about" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/files" // 系统用户 _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/admins" diff --git a/web/views/@default/users/@user_menu.html b/web/views/@default/users/@user_menu.html index 532487a8..59681d1d 100644 --- a/web/views/@default/users/@user_menu.html +++ b/web/views/@default/users/@user_menu.html @@ -4,5 +4,6 @@ {{user.fullname}}  ({{user.username}}) 修改 功能 + 实名认证(待审核)({{user.identityTag}}) API AccessKey({{user.countAccessKeys}}) \ No newline at end of file