feat: self-connection blocking API support (token-device internal endpoint, jti)
This commit is contained in:
1 parent
37b9991d0e
commit
9e34bdce9e
6 files changed
+73
-1
No files matched your search
@@ -0,0 +1,50 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/lejianwen/rustdesk-api/v2/global"
|
||||
"github.com/lejianwen/rustdesk-api/v2/service"
|
||||
)
|
||||
|
||||
type Internal struct {
|
||||
}
|
||||
|
||||
// localOnly 仅允许本机/容器内回环访问
|
||||
func (in *Internal) localOnly(c *gin.Context) bool {
|
||||
ip := c.RemoteIP()
|
||||
return ip == "127.0.0.1" || ip == "::1"
|
||||
}
|
||||
|
||||
// TokenDevice 根据token查询登录设备ID,供hbbs自连拦截内部调用
|
||||
// @Tags 内部接口
|
||||
// @Summary 根据token查询设备ID
|
||||
// @Description 仅供hbbs在容器内调用,需回环地址与共享密钥
|
||||
// @Param token query string true "访问令牌"
|
||||
// @Success 200 {object} map[string]string
|
||||
// @Failure 403 {object} map[string]string
|
||||
// @Failure 404 {object} map[string]string
|
||||
// @Router /api/internal/token-device [get]
|
||||
func (in *Internal) TokenDevice(c *gin.Context) {
|
||||
if !in.localOnly(c) {
|
||||
c.JSON(http.StatusForbidden, gin.H{"error": "forbidden"})
|
||||
return
|
||||
}
|
||||
// 共享密钥:hbbs 通过 RUSTDESK_API_JWT_KEY 持有同一密钥
|
||||
if global.Config.Jwt.Key == "" || c.GetHeader("X-Secret") != global.Config.Jwt.Key {
|
||||
c.JSON(http.StatusForbidden, gin.H{"error": "forbidden"})
|
||||
return
|
||||
}
|
||||
token := c.Query("token")
|
||||
if token == "" {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "token required"})
|
||||
return
|
||||
}
|
||||
deviceId := service.AllService.UserService.GetDeviceIdByToken(token)
|
||||
if deviceId == "" {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "not found"})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, gin.H{"device_id": deviceId})
|
||||
}
|
||||
Reference in new issue
Block a user