Compare commits

...

5 Commits

Author SHA1 Message Date
skiffer-git da040b1e11 update the front image (#2692)
* update the front image

* update version
2024-09-30 12:05:37 +08:00
icey-yu 953ed22313 fix: admin token (#2687) 2024-09-30 03:12:25 +00:00
Monet Lee 6259a49c61 fix: update workflows logic. (#2688)
* refactor: add GetAdminToken interface.

* update config.

* update workflows logic.
2024-09-29 11:08:25 +00:00
icey-yu 82845df518 fix: admin token (#2686) 2024-09-29 10:02:45 +00:00
Monet Lee 5452741af8 refactor: add GetAdminToken interface. (#2684)
* refactor: add GetAdminToken interface.

* update config.
2024-09-29 08:20:34 +00:00
13 changed files with 66 additions and 52 deletions
+4 -4
View File
@@ -8,12 +8,12 @@ PROMETHEUS_IMAGE=prom/prometheus:v2.45.6
ALERTMANAGER_IMAGE=prom/alertmanager:v0.27.0 ALERTMANAGER_IMAGE=prom/alertmanager:v0.27.0
GRAFANA_IMAGE=grafana/grafana:11.0.1 GRAFANA_IMAGE=grafana/grafana:11.0.1
OPENIM_WEB_FRONT_IMAGE=openim/openim-web-front:release-v3.8.0 OPENIM_WEB_FRONT_IMAGE=openim/openim-web-front:release-v3.8.1
OPENIM_ADMIN_FRONT_IMAGE=openim/openim-admin-front:release-v1.8.0 OPENIM_ADMIN_FRONT_IMAGE=openim/openim-admin-front:release-v1.8.2
#FRONT_IMAGE: use aliyun images #FRONT_IMAGE: use aliyun images
#OPENIM_WEB_FRONT_IMAGE=registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-web-front:release-v3.5.1 #OPENIM_WEB_FRONT_IMAGE=registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-web-front:release-v3.8.1
#OPENIM_ADMIN_FRONT_IMAGE=registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-admin-front:release-v1.7 #OPENIM_ADMIN_FRONT_IMAGE=registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-admin-front:release-v1.8.2
DATA_DIR=./ DATA_DIR=./
+27 -27
View File
@@ -63,34 +63,34 @@ jobs:
docker compose up -d docker compose up -d
sleep 60 sleep 60
- name: Check openim-server health # - name: Check openim-server health
run: | # run: |
timeout=300 # timeout=300
interval=30 # interval=30
elapsed=0 # elapsed=0
while [[ $elapsed -le $timeout ]]; do # while [[ $elapsed -le $timeout ]]; do
if ! docker exec openim-server mage check; then # if ! docker exec openim-server mage check; then
echo "openim-server is not ready, waiting..." # echo "openim-server is not ready, waiting..."
sleep $interval # sleep $interval
elapsed=$(($elapsed + $interval)) # elapsed=$(($elapsed + $interval))
else # else
echo "Health check successful" # echo "Health check successful"
exit 0 # exit 0
fi # fi
done # done
echo "Health check failed after 5 minutes" # echo "Health check failed after 5 minutes"
exit 1 # exit 1
- name: Check openim-chat health # - name: Check openim-chat health
if: success() # if: success()
run: | # run: |
if ! docker exec openim-chat mage check; then # if ! docker exec openim-chat mage check; then
echo "openim-chat check failed" # echo "openim-chat check failed"
exit 1 # exit 1
else # else
echo "Health check successful" # echo "Health check successful"
exit 0 # exit 0
fi # fi
- name: Extract metadata for Docker # (tags, labels) - name: Extract metadata for Docker # (tags, labels)
+1 -1
View File
@@ -1,4 +1,4 @@
url: webhook://127.0.0.1:10008/callbackExample url: http://127.0.0.1:10006/callbackExample
beforeSendSingleMsg: beforeSendSingleMsg:
enable: false enable: false
timeout: 5 timeout: 5
+1 -1
View File
@@ -12,7 +12,7 @@ require (
github.com/gorilla/websocket v1.5.1 github.com/gorilla/websocket v1.5.1
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
github.com/mitchellh/mapstructure v1.5.0 github.com/mitchellh/mapstructure v1.5.0
github.com/openimsdk/protocol v0.0.72-alpha.38 github.com/openimsdk/protocol v0.0.72
github.com/openimsdk/tools v0.0.50-alpha.15 github.com/openimsdk/tools v0.0.50-alpha.15
github.com/pkg/errors v0.9.1 // indirect github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_golang v1.18.0 github.com/prometheus/client_golang v1.18.0
+2 -2
View File
@@ -319,8 +319,8 @@ github.com/onsi/gomega v1.25.0 h1:Vw7br2PCDYijJHSfBOWhov+8cAnUf8MfMaIOV323l6Y=
github.com/onsi/gomega v1.25.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= github.com/onsi/gomega v1.25.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM=
github.com/openimsdk/gomake v0.0.14-alpha.5 h1:VY9c5x515lTfmdhhPjMvR3BBRrRquAUCFsz7t7vbv7Y= github.com/openimsdk/gomake v0.0.14-alpha.5 h1:VY9c5x515lTfmdhhPjMvR3BBRrRquAUCFsz7t7vbv7Y=
github.com/openimsdk/gomake v0.0.14-alpha.5/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI= github.com/openimsdk/gomake v0.0.14-alpha.5/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI=
github.com/openimsdk/protocol v0.0.72-alpha.38 h1:v0GLgS9cNm627NSG3B2k2VF2AMoo90DSKixxiBMKPS4= github.com/openimsdk/protocol v0.0.72 h1:K+vslwaR7lDXyBzb07UuEQITaqsgighz7NyXVIWsu6A=
github.com/openimsdk/protocol v0.0.72-alpha.38/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8= github.com/openimsdk/protocol v0.0.72/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8=
github.com/openimsdk/tools v0.0.50-alpha.15 h1:HV9aKZ4vvCZCGG4wFDsgUONkkdJeCcrFNn3BT52nUVQ= github.com/openimsdk/tools v0.0.50-alpha.15 h1:HV9aKZ4vvCZCGG4wFDsgUONkkdJeCcrFNn3BT52nUVQ=
github.com/openimsdk/tools v0.0.50-alpha.15/go.mod h1:h1cYmfyaVtgFbKmb1Cfsl8XwUOMTt8ubVUQrdGtsUh4= github.com/openimsdk/tools v0.0.50-alpha.15/go.mod h1:h1cYmfyaVtgFbKmb1Cfsl8XwUOMTt8ubVUQrdGtsUh4=
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
+2 -2
View File
@@ -27,8 +27,8 @@ func NewAuthApi(client rpcclient.Auth) AuthApi {
return AuthApi(client) return AuthApi(client)
} }
func (o *AuthApi) UserToken(c *gin.Context) { func (o *AuthApi) GetAdminToken(c *gin.Context) {
a2r.Call(auth.AuthClient.UserToken, o.Client, c) a2r.Call(auth.AuthClient.GetAdminToken, o.Client, c)
} }
func (o *AuthApi) GetUserToken(c *gin.Context) { func (o *AuthApi) GetUserToken(c *gin.Context) {
+2 -2
View File
@@ -169,7 +169,7 @@ func newGinRouter(disCov discovery.SvcDiscoveryRegistry, config *Config) *gin.En
authRouterGroup := r.Group("/auth") authRouterGroup := r.Group("/auth")
{ {
a := NewAuthApi(*authRpc) a := NewAuthApi(*authRpc)
authRouterGroup.POST("/user_token", a.UserToken) authRouterGroup.POST("/get_admin_token", a.GetAdminToken)
authRouterGroup.POST("/get_user_token", a.GetUserToken) authRouterGroup.POST("/get_user_token", a.GetUserToken)
authRouterGroup.POST("/parse_token", a.ParseToken) authRouterGroup.POST("/parse_token", a.ParseToken)
authRouterGroup.POST("/force_logout", a.ForceLogout) authRouterGroup.POST("/force_logout", a.ForceLogout)
@@ -288,6 +288,6 @@ func GinParseToken(authRPC *rpcclient.Auth) gin.HandlerFunc {
// Whitelist api not parse token // Whitelist api not parse token
var Whitelist = []string{ var Whitelist = []string{
"/auth/user_token", "/auth/get_admin_token",
"/auth/parse_token", "/auth/parse_token",
} }
+2 -2
View File
@@ -72,8 +72,8 @@ func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryReg
return nil return nil
} }
func (s *authServer) UserToken(ctx context.Context, req *pbauth.UserTokenReq) (*pbauth.UserTokenResp, error) { func (s *authServer) GetAdminToken(ctx context.Context, req *pbauth.GetAdminTokenReq) (*pbauth.GetAdminTokenResp, error) {
resp := pbauth.UserTokenResp{} resp := pbauth.GetAdminTokenResp{}
if req.Secret != s.config.Share.Secret { if req.Secret != s.config.Share.Secret {
return nil, errs.ErrNoPermission.WrapMsg("secret invalid") return nil, errs.ErrNoPermission.WrapMsg("secret invalid")
} }
+5 -4
View File
@@ -15,13 +15,14 @@
package cmd package cmd
import ( import (
"math"
"testing"
"github.com/openimsdk/protocol/auth" "github.com/openimsdk/protocol/auth"
"github.com/openimsdk/tools/apiresp" "github.com/openimsdk/tools/apiresp"
"github.com/openimsdk/tools/utils/jsonutil" "github.com/openimsdk/tools/utils/jsonutil"
"github.com/stretchr/testify/mock" "github.com/stretchr/testify/mock"
"go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/bson/primitive"
"math"
"testing"
) )
// MockRootCmd is a mock type for the RootCmd type // MockRootCmd is a mock type for the RootCmd type
@@ -39,7 +40,7 @@ func TestName(t *testing.T) {
ErrCode: 1234, ErrCode: 1234,
ErrMsg: "test", ErrMsg: "test",
ErrDlt: "4567", ErrDlt: "4567",
Data: &auth.UserTokenResp{ Data: &auth.GetUserTokenResp{
Token: "1234567", Token: "1234567",
ExpireTimeSeconds: math.MaxInt64, ExpireTimeSeconds: math.MaxInt64,
}, },
@@ -51,7 +52,7 @@ func TestName(t *testing.T) {
t.Log(string(data)) t.Log(string(data))
var rReso apiresp.ApiResponse var rReso apiresp.ApiResponse
rReso.Data = &auth.UserTokenResp{} rReso.Data = &auth.GetUserTokenResp{}
if err := jsonutil.JsonUnmarshal(data, &rReso); err != nil { if err := jsonutil.JsonUnmarshal(data, &rReso); err != nil {
panic(err) panic(err)
+12
View File
@@ -16,6 +16,7 @@ package controller
import ( import (
"context" "context"
"github.com/openimsdk/tools/log"
"github.com/golang-jwt/jwt/v4" "github.com/golang-jwt/jwt/v4"
"github.com/openimsdk/open-im-server/v3/pkg/authverify" "github.com/openimsdk/open-im-server/v3/pkg/authverify"
@@ -77,12 +78,23 @@ func (a *authDatabase) CreateToken(ctx context.Context, userID string, platformI
return "", err return "", err
} }
} }
const adminTokenMaxNum = 30
if platformID == constant.AdminPlatformID {
if len(kickedTokenKey) > adminTokenMaxNum {
kickedTokenKey = kickedTokenKey[:len(kickedTokenKey)-adminTokenMaxNum]
} else {
kickedTokenKey = nil
}
}
if len(kickedTokenKey) != 0 { if len(kickedTokenKey) != 0 {
for _, k := range kickedTokenKey { for _, k := range kickedTokenKey {
err := a.cache.SetTokenFlagEx(ctx, userID, platformID, k, constant.KickedToken) err := a.cache.SetTokenFlagEx(ctx, userID, platformID, k, constant.KickedToken)
if err != nil { if err != nil {
return "", err return "", err
} }
log.ZDebug(ctx, "kicked token in create token", "token", k)
} }
} }
+4 -4
View File
@@ -87,13 +87,13 @@ func (a *Api) apiPost(ctx context.Context, path string, req any, resp any) error
return nil return nil
} }
func (a *Api) GetToken(ctx context.Context) (string, error) { func (a *Api) GetAdminToken(ctx context.Context) (string, error) {
req := auth.UserTokenReq{ req := auth.GetAdminTokenReq{
UserID: a.UserID, UserID: a.UserID,
Secret: a.Secret, Secret: a.Secret,
} }
var resp auth.UserTokenResp var resp auth.GetAdminTokenResp
if err := a.apiPost(ctx, "/auth/user_token", &req, &resp); err != nil { if err := a.apiPost(ctx, "/auth/get_admin_token", &req, &resp); err != nil {
return "", err return "", err
} }
return resp.Token, nil return resp.Token, nil
+3 -2
View File
@@ -21,7 +21,6 @@ import (
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/openimsdk/tools/errs"
"io" "io"
"log" "log"
"net/http" "net/http"
@@ -34,6 +33,8 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/openimsdk/tools/errs"
"github.com/openimsdk/protocol/third" "github.com/openimsdk/protocol/third"
) )
@@ -95,7 +96,7 @@ func (m *Manage) Run() error {
} }
var err error var err error
ctx := context.WithValue(m.ctx, "operationID", fmt.Sprintf("%s_init", m.prefix)) ctx := context.WithValue(m.ctx, "operationID", fmt.Sprintf("%s_init", m.prefix))
m.api.Token, err = m.api.GetToken(ctx) m.api.Token, err = m.api.GetAdminToken(ctx)
if err != nil { if err != nil {
return err return err
} }
+1 -1
View File
@@ -1 +1 @@
3.8.0 3.8.1