fix bug of main.go
This commit is contained in:
parent
5d02ca9fca
commit
bcf80842b0
|
|
@ -1,5 +1,5 @@
|
||||||
postgres:
|
postgres:
|
||||||
host: "192.168.2.103"
|
host: "192.168.1.20"
|
||||||
port: 5432
|
port: 5432
|
||||||
database: "demo"
|
database: "demo"
|
||||||
user: "postgres"
|
user: "postgres"
|
||||||
|
|
@ -38,14 +38,14 @@ ants:
|
||||||
|
|
||||||
# redis config
|
# redis config
|
||||||
locker_redis:
|
locker_redis:
|
||||||
addr: "192.168.2.104:6379"
|
addr: "127.0.0.1:6379"
|
||||||
password: ""
|
password: ""
|
||||||
db: 1
|
db: 1
|
||||||
poolsize: 50
|
poolsize: 50
|
||||||
timeout: 10
|
timeout: 10
|
||||||
|
|
||||||
storage_redis:
|
storage_redis:
|
||||||
addr: "192.168.2.104:6379"
|
addr: "127.0.0.1:6379"
|
||||||
password: ""
|
password: ""
|
||||||
db: 0
|
db: 0
|
||||||
poolsize: 50
|
poolsize: 50
|
||||||
|
|
@ -60,7 +60,7 @@ base:
|
||||||
# modelRT service config
|
# modelRT service config
|
||||||
service:
|
service:
|
||||||
service_name: "modelRT"
|
service_name: "modelRT"
|
||||||
secret_key: "modelRT"
|
secret_key: "modelrt_key"
|
||||||
|
|
||||||
# dataRT api config
|
# dataRT api config
|
||||||
dataRT:
|
dataRT:
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ func AttrDeleteHandler(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.ShouldBindJSON(&request); err != nil {
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
logger.Error(c, "Failed to unmarshal attribute delete request", "error", err)
|
logger.Error(c, "failed to unmarshal attribute delete request", "error", err)
|
||||||
c.JSON(http.StatusOK, network.FailureResponse{
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
Msg: err.Error(),
|
Msg: err.Error(),
|
||||||
|
|
@ -37,7 +37,7 @@ func AttrDeleteHandler(c *gin.Context) {
|
||||||
|
|
||||||
rs := diagram.NewRedisString(c, request.AttrToken, clientToken, 10, true)
|
rs := diagram.NewRedisString(c, request.AttrToken, clientToken, 10, true)
|
||||||
if err := rs.GETDEL(request.AttrToken); err != nil {
|
if err := rs.GETDEL(request.AttrToken); err != nil {
|
||||||
logger.Error(c, "Failed to delete attribute from Redis", "attr_token", request.AttrToken, "error", err)
|
logger.Error(c, "failed to delete attribute from Redis", "attr_token", request.AttrToken, "error", err)
|
||||||
c.JSON(http.StatusOK, network.FailureResponse{
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
Msg: err.Error(),
|
Msg: err.Error(),
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ func AttrGetHandler(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.ShouldBindJSON(&request); err != nil {
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
logger.Error(c, "Failed to unmarshal attribute get request", "error", err)
|
logger.Error(c, "failed to unmarshal attribute get request", "error", err)
|
||||||
c.JSON(http.StatusOK, network.FailureResponse{
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
Msg: err.Error(),
|
Msg: err.Error(),
|
||||||
|
|
@ -42,7 +42,7 @@ func AttrGetHandler(c *gin.Context) {
|
||||||
attrModel, err := database.ParseAttrToken(c, tx, request.AttrToken, clientToken)
|
attrModel, err := database.ParseAttrToken(c, tx, request.AttrToken, clientToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
logger.Error(c, "Failed to parse attribute token", "attr_token", request.AttrToken, "error", err)
|
logger.Error(c, "failed to parse attribute token", "attr_token", request.AttrToken, "error", err)
|
||||||
c.JSON(http.StatusOK, network.FailureResponse{
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
Msg: err.Error(),
|
Msg: err.Error(),
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ func AttrSetHandler(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.ShouldBindJSON(&request); err != nil {
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
logger.Error(c, "Failed to unmarshal attribute set request", "error", err)
|
logger.Error(c, "failed to unmarshal attribute set request", "error", err)
|
||||||
c.JSON(http.StatusOK, network.FailureResponse{
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
Msg: err.Error(),
|
Msg: err.Error(),
|
||||||
|
|
@ -39,7 +39,7 @@ func AttrSetHandler(c *gin.Context) {
|
||||||
// The logic for handling Redis operations directly from the handler
|
// The logic for handling Redis operations directly from the handler
|
||||||
rs := diagram.NewRedisString(c, request.AttrToken, clientToken, 10, true)
|
rs := diagram.NewRedisString(c, request.AttrToken, clientToken, 10, true)
|
||||||
if err := rs.Set(request.AttrToken, request.AttrValue); err != nil {
|
if err := rs.Set(request.AttrToken, request.AttrValue); err != nil {
|
||||||
logger.Error(c, "Failed to set attribute value in Redis", "attr_token", request.AttrToken, "error", err)
|
logger.Error(c, "failed to set attribute value in Redis", "attr_token", request.AttrToken, "error", err)
|
||||||
c.JSON(http.StatusOK, network.FailureResponse{
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
Msg: err.Error(),
|
Msg: err.Error(),
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ func MeasurementGetHandler(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.ShouldBindJSON(&request); err != nil {
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
logger.Error(c, "Failed to unmarshal measurement get request", "error", err)
|
logger.Error(c, "failed to unmarshal measurement get request", "error", err)
|
||||||
c.JSON(http.StatusOK, network.FailureResponse{
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
Code: http.StatusBadRequest,
|
Code: http.StatusBadRequest,
|
||||||
Msg: err.Error(),
|
Msg: err.Error(),
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,15 @@ import (
|
||||||
func MeasurementRecommendHandler(c *gin.Context) {
|
func MeasurementRecommendHandler(c *gin.Context) {
|
||||||
var request network.MeasurementRecommendRequest
|
var request network.MeasurementRecommendRequest
|
||||||
|
|
||||||
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
|
logger.Error(c, "failed to unmarshal measurement recommend request", "error", err)
|
||||||
|
c.JSON(http.StatusOK, network.FailureResponse{
|
||||||
|
Code: http.StatusBadRequest,
|
||||||
|
Msg: err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
recommends, err := model.RedisSearchRecommend(c, request.Input)
|
recommends, err := model.RedisSearchRecommend(c, request.Input)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(c, "failed to get recommend data from redis", "input", request.Input, "error", err)
|
logger.Error(c, "failed to get recommend data from redis", "input", request.Input, "error", err)
|
||||||
|
|
|
||||||
83
main.go
83
main.go
|
|
@ -66,7 +66,7 @@ func main() {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
serviceToken, err := util.GenerateClientToken(hostName, modelRTConfig.ServiceConfig.ServiceName)
|
serviceToken, err := util.GenerateClientToken(hostName, modelRTConfig.ServiceConfig.ServiceName, modelRTConfig.ServiceConfig.SecretKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(ctx, "generate client token failed", "error", err)
|
logger.Error(ctx, "generate client token failed", "error", err)
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|
@ -136,8 +136,46 @@ func main() {
|
||||||
// TODO 暂时屏蔽完成 swagger 启动测试
|
// TODO 暂时屏蔽完成 swagger 启动测试
|
||||||
// go realtimedata.RealTimeDataComputer(ctx, nil, []string{}, "")
|
// go realtimedata.RealTimeDataComputer(ctx, nil, []string{}, "")
|
||||||
|
|
||||||
|
// use release mode in productio
|
||||||
|
// gin.SetMode(gin.ReleaseMode)
|
||||||
engine := gin.New()
|
engine := gin.New()
|
||||||
router.RegisterRoutes(engine, serviceToken)
|
router.RegisterRoutes(engine, serviceToken)
|
||||||
|
|
||||||
|
// real time data api
|
||||||
|
engine.GET("/ws/rtdatas", handler.RealTimeDataReceivehandler)
|
||||||
|
|
||||||
|
// anchor api
|
||||||
|
engine.POST("/model/anchor_replace", handler.ComponentAnchorReplaceHandler)
|
||||||
|
|
||||||
|
// alert api
|
||||||
|
engine.GET("/alert/events/query", handler.QueryAlertEventHandler)
|
||||||
|
|
||||||
|
// real time data api
|
||||||
|
engine.GET("/rt/datas/query", handler.QueryRealTimeDataHandler)
|
||||||
|
|
||||||
|
// dashborad api
|
||||||
|
dashboard := engine.Group("/dashboard", limiter.Middleware)
|
||||||
|
{
|
||||||
|
dashboard.GET("/load", nil)
|
||||||
|
dashboard.GET("/query", nil)
|
||||||
|
dashboard.POST("/create", nil)
|
||||||
|
dashboard.POST("/update", nil)
|
||||||
|
dashboard.POST("/delete", nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Swagger UI
|
||||||
|
engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||||
|
|
||||||
|
// 注册 Swagger UI 路由
|
||||||
|
// docs.SwaggerInfo.BasePath = "/model"
|
||||||
|
// v1 := engine.Group("/api/v1")
|
||||||
|
// {
|
||||||
|
// eg := v1.Group("/example")
|
||||||
|
// {
|
||||||
|
// eg.GET("/helloworld", Helloworld)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
server := http.Server{
|
server := http.Server{
|
||||||
Addr: ":8080",
|
Addr: ":8080",
|
||||||
Handler: engine,
|
Handler: engine,
|
||||||
|
|
@ -164,47 +202,4 @@ func main() {
|
||||||
logger.Error(ctx, "Server closed unexpected", "err", err)
|
logger.Error(ctx, "Server closed unexpected", "err", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// real time data api
|
|
||||||
engine.GET("/ws/rtdatas", handler.RealTimeDataReceivehandler)
|
|
||||||
|
|
||||||
// anchor api
|
|
||||||
engine.POST("/model/anchor_replace", handler.ComponentAnchorReplaceHandler)
|
|
||||||
|
|
||||||
// alert api
|
|
||||||
engine.GET("/alert/events/query", handler.QueryAlertEventHandler)
|
|
||||||
|
|
||||||
// real time data api
|
|
||||||
engine.GET("/rt/datas/query", handler.QueryRealTimeDataHandler)
|
|
||||||
|
|
||||||
// dashborad api
|
|
||||||
dashboard := engine.Group("/dashboard", limiter.Middleware)
|
|
||||||
{
|
|
||||||
dashboard.GET("/load", nil)
|
|
||||||
dashboard.GET("/query", nil)
|
|
||||||
dashboard.POST("/create", nil)
|
|
||||||
dashboard.POST("/update", nil)
|
|
||||||
dashboard.POST("/delete", nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
// engine.Group()
|
|
||||||
// Swagger UI
|
|
||||||
engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
|
||||||
|
|
||||||
// 注册 Swagger UI 路由
|
|
||||||
// docs.SwaggerInfo.BasePath = "/model"
|
|
||||||
// v1 := engine.Group("/api/v1")
|
|
||||||
// {
|
|
||||||
// eg := v1.Group("/example")
|
|
||||||
// {
|
|
||||||
// eg.GET("/helloworld", Helloworld)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// start route with 8080 port
|
|
||||||
engine.Run(":8080")
|
|
||||||
|
|
||||||
// Redis hashmap 母线模型、异步电动机模型
|
|
||||||
|
|
||||||
// kv key name value busx
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ var RecursiveSQL = `WITH RECURSIVE recursive_tree as (
|
||||||
FROM "Topologic"
|
FROM "Topologic"
|
||||||
WHERE uuid_from = ?
|
WHERE uuid_from = ?
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT t.uuid_from,t.uuid_to,t.page_id,t.flag
|
SELECT t.uuid_from,t.uuid_to,t.flag
|
||||||
FROM "Topologic" t
|
FROM "Topologic" t
|
||||||
JOIN recursive_tree rt ON t.uuid_from = rt.uuid_to
|
JOIN recursive_tree rt ON t.uuid_from = rt.uuid_to
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -12,15 +12,20 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// GenerateClientToken define func of generate a secure token for client identification
|
// GenerateClientToken define func of generate a secure token for client identification
|
||||||
func GenerateClientToken(host string, serviceName string) (string, error) {
|
func GenerateClientToken(host string, serviceName string, secretKey string) (string, error) {
|
||||||
uniqueID := fmt.Sprintf("%d", time.Now().UnixNano())
|
finalSecretKey := secretKey
|
||||||
clientInfo := fmt.Sprintf("host=%s;service=%s;id=%s", host, serviceName, uniqueID)
|
if finalSecretKey == "" {
|
||||||
secretKey := os.Getenv("TOKEN_SECRET_KEY")
|
finalSecretKey = os.Getenv("TOKEN_SECRET_KEY")
|
||||||
if secretKey == "" {
|
|
||||||
return "", fmt.Errorf("TOKEN_SECRET_KEY environment variable not set")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mac := hmac.New(sha256.New, []byte(secretKey))
|
if finalSecretKey == "" {
|
||||||
|
return "", fmt.Errorf("TOKEN_SECRET_KEY environment variable not set and no key provided in parameters")
|
||||||
|
}
|
||||||
|
|
||||||
|
uniqueID := fmt.Sprintf("%d", time.Now().UnixNano())
|
||||||
|
clientInfo := fmt.Sprintf("host=%s;service=%s;id=%s", host, serviceName, uniqueID)
|
||||||
|
|
||||||
|
mac := hmac.New(sha256.New, []byte(finalSecretKey))
|
||||||
mac.Write([]byte(clientInfo))
|
mac.Write([]byte(clientInfo))
|
||||||
signature := mac.Sum(nil)
|
signature := mac.Sum(nil)
|
||||||
|
|
||||||
|
|
@ -61,40 +66,3 @@ func verifyClientToken(token string, secretKey string) (bool, string, error) {
|
||||||
clientInfo := string(clientInfoBytes)
|
clientInfo := string(clientInfoBytes)
|
||||||
return true, clientInfo, nil
|
return true, clientInfo, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- 示例使用 ---
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
// 模拟获取客户端信息
|
|
||||||
// 实际应用中,host 可以通过获取本地主机名,serviceName 可以是当前服务的标识。
|
|
||||||
host, err := os.Hostname()
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("Error getting hostname:", err)
|
|
||||||
host = "unknown-host"
|
|
||||||
}
|
|
||||||
serviceName := "my-web-service" // 替换为你的服务名
|
|
||||||
|
|
||||||
// 设置一个示例密钥(在实际应用中,请从环境变量加载)
|
|
||||||
// export TOKEN_SECRET_KEY="your-super-secret-key-here"
|
|
||||||
os.Setenv("TOKEN_SECRET_KEY", "my-super-secret-and-long-key-for-hmac")
|
|
||||||
|
|
||||||
token, err := GenerateClientToken(host, serviceName)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("Error generating token:", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("Generated Token:", token)
|
|
||||||
|
|
||||||
// --- 验证 Token (示例) ---
|
|
||||||
// 在接收方,你需要实现一个验证函数
|
|
||||||
isValid, clientInfo, err := verifyClientToken(token, os.Getenv("TOKEN_SECRET_KEY"))
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("Error verifying token:", err)
|
|
||||||
} else if isValid {
|
|
||||||
fmt.Println("Token is valid!")
|
|
||||||
fmt.Println("Client Info:", clientInfo) // 包含 host, service, id
|
|
||||||
} else {
|
|
||||||
fmt.Println("Token is invalid.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue