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