mirror of
https://github.com/openimsdk/open-im-server.git
synced 2026-05-12 04:55:59 +08:00
Compare commits
5 Commits
v3.8.1-rc.4
...
v3.8.1
| Author | SHA1 | Date | |
|---|---|---|---|
| da040b1e11 | |||
| 953ed22313 | |||
| 6259a49c61 | |||
| 82845df518 | |||
| 5452741af8 |
@@ -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=./
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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=
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -1 +1 @@
|
|||||||
3.8.0
|
3.8.1
|
||||||
Reference in New Issue
Block a user