Compare commits

...

46 Commits

Author SHA1 Message Date
junleea f90482ede2 Merge remote-tracking branch 'gitea/master' 2025-07-31 21:12:43 +08:00
junleea 7033b0ce5f 同步密钥 2025-07-31 21:12:23 +08:00
junleea 3fc24cbc1a Merge branch 'refs/heads/feat-sync-secret'
# Conflicts:
#	main.go
2025-07-31 21:10:46 +08:00
junleea 76d8a23f44 Merge branch 'refs/heads/feat-docker' 2025-07-29 20:56:19 +08:00
junleea 3721ba137d 修复run cid接口问题 2025-07-29 20:49:44 +08:00
junleea 9ef020f229 拦截请求处理 2025-06-13 13:58:47 +08:00
junleea 4e915d02ef 修改请求方式 2025-06-13 13:43:38 +08:00
junleea 6f3495f0f5 添加配置文件输出 2025-06-13 13:28:30 +08:00
junleea 97704ca8d2 修改docker文件挂载及配置文件读取 2025-06-13 13:11:18 +08:00
junleea cf0f656032 修改请求client的证书认证 2025-06-12 20:20:38 +08:00
junleea 13086e55ae 修改docker运行git gi
的配置文件
2025-06-12 19:33:57 +08:00
junleea f11e9ffa61 修改docker运行的配置文件 2025-06-12 19:27:48 +08:00
junleea f165eecf89 Merge branch 'refs/heads/feat-docker' 2025-06-12 18:45:28 +08:00
junleea d63d641058 修改Dockerfile,修改token拦截的返回 2025-06-12 18:45:21 +08:00
junleea 93076cf365 修改Dockerfile,修改token拦截的返回 2025-06-12 14:36:37 +08:00
junleea 3fd0ea7f0f 修改Dockerfile,修改token拦截的返回 2025-06-12 14:28:31 +08:00
junleea 86266ac556 修改配置文件,添加Dockerfile文件制作镜像 2025-06-11 14:38:34 +08:00
junleea db9d56aa29 Merge branch 'refs/heads/fix-get-shell-err' 2025-06-11 14:34:54 +08:00
junleea 008cbc653a Merge branch 'refs/heads/feat-user-center' 2025-06-03 13:44:39 +08:00
junleea 196887fa8b Merge branch 'refs/heads/release' 2025-06-03 13:41:11 +08:00
junleea 83552d12a2 Merge branch 'refs/heads/feat-cid' 2025-03-27 14:48:12 +08:00
junleea 2cb9909697 Merge branch 'refs/heads/feat-cid' 2025-03-27 11:19:25 +08:00
junleea 2d08dd7cec Merge branch 'refs/heads/feat-cmd' 2025-03-24 20:14:50 +08:00
junleea 6490779a2e Merge branch 'refs/heads/feat-cmd' 2025-03-05 19:59:58 +08:00
junleea 5f178e2123 Merge branch 'refs/heads/feat-cmd' 2025-03-05 19:08:47 +08:00
junleea de0f97ce7d Merge branch 'refs/heads/feat-cmd' 2025-03-03 15:17:56 +08:00
junleea b06f970dd8 Merge branch 'refs/heads/feat-file' 2025-01-03 17:48:55 +08:00
junleea 12cc7544db Merge branch 'refs/heads/feat-file' 2025-01-03 17:19:29 +08:00
junleea 1ca9dde471 Merge branch 'refs/heads/feat-file' 2025-01-03 16:11:23 +08:00
junleea fedb744675 Merge branch 'refs/heads/feat-file' 2025-01-03 16:03:59 +08:00
junleea 7aa6be4fe7 Merge branch 'refs/heads/feat-file' 2025-01-03 15:57:24 +08:00
junleea 8f2452c804 Merge branch 'refs/heads/feat-file' 2025-01-03 15:54:13 +08:00
junleea a6b12096f8 Merge branch 'refs/heads/feat-file' 2025-01-03 15:52:12 +08:00
junleea 191d466798 Merge branch 'refs/heads/feat-file' 2025-01-03 15:29:01 +08:00
junleea 7607d29386 Merge branch 'refs/heads/feat-send-mail' 2025-01-02 15:45:50 +08:00
junleea 04ec9bf9bf Merge branch 'refs/heads/feat-im-avator' 2025-01-01 14:21:30 +08:00
junleea 6de6a1a318 Merge branch 'refs/heads/feat-im-avator' 2025-01-01 14:08:46 +08:00
junleea 147d3f12cd Merge branch 'refs/heads/feat-file' 2024-12-28 13:30:21 +08:00
junleea ca400be8b8 Merge branch 'refs/heads/feat-file'
# Conflicts:
#	service/userService.go
2024-12-27 20:45:19 +08:00
junleea 720322bfd6 Merge branch 'refs/heads/feat-file' 2024-12-27 20:36:08 +08:00
junleea 87ae7db41c Merge branch 'refs/heads/feat-file' 2024-12-27 20:30:08 +08:00
junleea 50fef88276 Merge branch 'refs/heads/feat-file' 2024-12-27 20:27:25 +08:00
junleea f57150d14d Merge branch 'refs/heads/feat-file' 2024-12-27 19:37:27 +08:00
junleea b1befd31ca Merge branch 'refs/heads/feat-file' 2024-12-27 19:34:05 +08:00
junleea e219fb5a72 Merge branch 'refs/heads/feat-file' 2024-12-27 18:45:53 +08:00
junleea 7d458f70e0 Merge branch 'refs/heads/feat-file' 2024-12-27 17:43:31 +08:00
7 changed files with 106 additions and 42 deletions

33
Dockerfile Normal file
View File

@ -0,0 +1,33 @@
# 第一阶段使用最新Go版本构建
FROM docker.1ms.run/golang:1.24 AS builder
WORKDIR /app
ENV GOPROXY=https://goproxy.cn,direct
# 复制go.mod和go.sum以缓存依赖
COPY go.mod go.sum ./
RUN go mod download
# 复制源代码并构建
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags="-s -w" -o videoplayer .
# 第二阶段:生产环境(最小化镜像)
FROM scratch
# 复制配置文件
COPY --from=builder /app/vp.conf /home/videoplayer/vp.conf
# 复制二进制文件
COPY --from=builder /app/videoplayer /home/videoplayer/videoplayer
# 设置工作目录
WORKDIR /home/videoplayer
# 暴露端口
EXPOSE 8083
# 运行应用
CMD ["./videoplayer"]

12
docker-compose.yml Normal file
View File

@ -0,0 +1,12 @@
version: '3.8'
services:
app:
image: vp-image:latest
container_name: vp-container
ports:
- "8088:8083"
volumes:
- logs:/var/log/vp.log
- /etc/vp-app:/etc/vp-app
- /data/file:/data/file

View File

@ -72,13 +72,13 @@ func RunCID(c *gin.Context) {
if err := c.ShouldBind(&req); err == nil { if err := c.ShouldBind(&req); err == nil {
// 获取用户ID // 获取用户ID
username, _ := c.Get("username") //username, _ := c.Get("username")
cid := dao.FindCIDByID(req.ID, authID) cid := dao.FindCIDByID(req.ID, authID)
if cid.ID == 0 { if cid.ID == 0 {
c.JSON(200, gin.H{"error": "CID not found", "code": proto.OperationFailed, "message": "failed"}) c.JSON(200, gin.H{"error": "CID not found", "code": proto.OperationFailed, "message": "failed"})
return return
} else { } else {
go RunShell(username.(string), cid.Url, cid.Script, req.ID, authID) go RunShell("", cid.Url, cid.Script, req.ID, authID)
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": "success"}) c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": "success"})
} }
} else { } else {

25
main.go
View File

@ -100,7 +100,6 @@ func JWTAuthMiddleware() gin.HandlerFunc {
} }
// 从请求头中获取 JWT 令牌 // 从请求头中获取 JWT 令牌
tokenString := c.Request.Header.Get("token") tokenString := c.Request.Header.Get("token")
//请求方式为get时从url中获取token //请求方式为get时从url中获取token
if tokenString == "" { if tokenString == "" {
tokenString = c.Query("token") tokenString = c.Query("token")
@ -117,12 +116,7 @@ func JWTAuthMiddleware() gin.HandlerFunc {
return return
} }
if tokenString == "" { if tokenString == "" {
//c.AbortWithStatus(200) c.AbortWithStatusJSON(http.StatusOK, gin.H{"message": "unauthorized", "error": "token is empty", "code": proto.TokenIsNull})
c.JSON(200, gin.H{
"message": "Unauthorized",
"error": "token is empty",
"code": proto.TokenIsNull,
})
return return
} }
if proto.Config.TOKEN_USE_REDIS { if proto.Config.TOKEN_USE_REDIS {
@ -132,7 +126,6 @@ func JWTAuthMiddleware() gin.HandlerFunc {
return return
} }
} }
//查看token是否在超级token中 //查看token是否在超级token中
if worker.IsContainSet("super_permission_tokens", tokenString) { if worker.IsContainSet("super_permission_tokens", tokenString) {
sId := c.Request.Header.Get("super_id") sId := c.Request.Header.Get("super_id")
@ -147,6 +140,7 @@ func JWTAuthMiddleware() gin.HandlerFunc {
idFloat64 := float64(id) idFloat64 := float64(id)
//查看s_id类型 //查看s_id类型
c.Set("id", idFloat64) c.Set("id", idFloat64)
c.Set("user_id", id)
c.Next() c.Next()
return return
} }
@ -169,15 +163,14 @@ func JWTAuthMiddleware() gin.HandlerFunc {
} }
// 将用户信息添加到上下文中 // 将用户信息添加到上下文中
c.Set("id", token.Claims.(jwt.MapClaims)["id"]) id := token.Claims.(jwt.MapClaims)["id"]
c.Set("username", token.Claims.(jwt.MapClaims)["username"]) username := token.Claims.(jwt.MapClaims)["username"]
c.Set("id", id)
c.Set("username", username)
c.Set("user_id", int(id.(float64)))
if UserFuncIntercept(int(token.Claims.(jwt.MapClaims)["id"].(float64)), c.Request.URL.Path) { if UserFuncIntercept(int(id.(float64)), c.Request.URL.Path) {
c.AbortWithStatusJSON(http.StatusOK, gin.H{ c.AbortWithStatusJSON(http.StatusOK, gin.H{"message": "unauthorized", "error": "no function permission", "code": proto.NoPermission})
"message": "no function permission",
"error": "no permission",
"code": proto.NoPermission,
})
return return
} }

View File

@ -157,6 +157,12 @@ func ReadConfig(path string) error {
Config.SERVER_PORT = "8083" // 默认端口 Config.SERVER_PORT = "8083" // 默认端口
} }
} }
configJson, cErr := json.Marshal(Config)
if cErr != nil {
log.Println("ReadConfig Error encoding config,err :", cErr)
} else {
log.Println("ReadConfig configJson:", string(configJson))
}
SigningKey = []byte(Config.TOKEN_SECRET) SigningKey = []byte(Config.TOKEN_SECRET)
return err return err
} }

18
vp.conf
View File

@ -1,15 +1,21 @@
{ {
"db":0, "db":0,
"mysql_dsn":"video_t2:2t2SKHmWEYj2xFKF@tcp(127.0.0.1:3306)/video_t2?charset=utf8mb4&parseTime=True&loc=Local", "mysql_dsn":"vp-db:ZcxsP7s7kaBxxDPc@tcp(tx.ljsea.top:3306)/vp-db?charset=utf8mb4&parseTime=True&loc=Local",
"pg_dsn":"host=localhost user=video_t2 dbname=video_t2 password=2t2SKHmWEYj2xFKF port=5432 TimeZone=Asia/Shanghai", "pg_dsn":"host=localhost user=video_t2 dbname=video_t2 password=2t2SKHmWEYj2xFKF port=5432 TimeZone=Asia/Shanghai",
"redis_addr":"127.0.0.1:6379", "redis_addr":"tx.ljsea.top:6379",
"redis_db":2, "redis_db":2,
"redis_user_pw":true, "redis_user_pw":true,
"token_use_redis":true, "token_use_redis":false,
"redis_password":"lj502138", "redis_password":"vbgyfea87423wear",
"token_secret":"mfjurnc_32ndj9dfhj", "token_secret":"mfjurnc_32ndj9dfhj",
"cid_base_dir":"/home/lijun/cid/", "cid_base_dir":"/home/lijun/cid/",
"file_base_dir":"/home/lijun/file/", "file_base_dir":"/home/lijun/file/",
"monitor":false, "monitor": true,
"server_port":"8083" "server_port": "8083",
"log_save_days": 3,
"user_type": "slave",
"master_server_domain": "tx.ljsea.top",
"user_sync_time": 0,
"server_name": "home_vp_docker_server",
"monitor_server_token": "627gyf3488h"
} }

View File

@ -2,6 +2,7 @@ package worker
import ( import (
"bytes" "bytes"
"crypto/tls"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
@ -20,7 +21,23 @@ var client *http.Client
// 初始化 // 初始化
func InitReq() { func InitReq() {
client = &http.Client{} client = &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true, // 设置为true将跳过证书验证
},
},
}
}
func InitReqClient() {
client = &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true, // 设置为true将跳过证书验证
},
},
}
} }
// 发起post请求 // 发起post请求
@ -104,9 +121,8 @@ func SyncDataFromMasterReq(url string, token string) proto.UserSync {
m["device"] = "" m["device"] = ""
if client == nil { if client == nil {
client = &http.Client{} InitReqClient()
} }
client = &http.Client{}
//获取数据 //获取数据
resp, err := client.Do(req) resp, err := client.Do(req)
if err != nil { if err != nil {
@ -173,7 +189,7 @@ func SyncDataFromMasterReq2(url string, data proto.SyncUserReq) (proto.UserSync,
req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Type", "application/json")
//传输数据 //传输数据
if client == nil { if client == nil {
client = &http.Client{} InitReqClient()
} }
//获取数据 //获取数据
resp, err := client.Do(req) resp, err := client.Do(req)
@ -218,7 +234,7 @@ func SyncDataFromMasterShellReq2(url string, data proto.SyncUserShellReq) ([]dao
req.Header.Set("token", data.Token) req.Header.Set("token", data.Token)
//传输数据 //传输数据
if client == nil { if client == nil {
client = &http.Client{} InitReqClient()
} }
//获取数据 //获取数据
resp, err := client.Do(req) resp, err := client.Do(req)
@ -262,7 +278,7 @@ func SyncDataFromMasterShellReq3(url string, data proto.SyncUserShellResp) ([]pr
req.Header.Set("token", data.Token) req.Header.Set("token", data.Token)
//传输数据 //传输数据
if client == nil { if client == nil {
client = &http.Client{} InitReqClient()
} }
//获取数据 //获取数据
resp, err := client.Do(req) resp, err := client.Do(req)
@ -285,7 +301,6 @@ func SyncDataFromMasterShellReq3(url string, data proto.SyncUserShellResp) ([]pr
} }
func DoPostRequestJSON(url string, jsonData []byte, headers map[string]string) (error, []byte) { func DoPostRequestJSON(url string, jsonData []byte, headers map[string]string) (error, []byte) {
httpClient := &http.Client{}
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
fmt.Println("SyncDataFromMasterReq2 error:", r) fmt.Println("SyncDataFromMasterReq2 error:", r)
@ -304,11 +319,12 @@ func DoPostRequestJSON(url string, jsonData []byte, headers map[string]string) (
req.Header.Set(k, v) req.Header.Set(k, v)
} }
//传输数据 //传输数据
if httpClient == nil { if client == nil {
httpClient = &http.Client{} InitReqClient()
client = client
} }
//获取数据 //获取数据
resp, err := httpClient.Do(req) resp, err := client.Do(req)
if err != nil { if err != nil {
return err, nil return err, nil
} }
@ -322,7 +338,6 @@ func DoPostRequestJSON(url string, jsonData []byte, headers map[string]string) (
} }
func DoPostRequestForm(url string, jsonData []byte, headers map[string]string) (error, []byte) { func DoPostRequestForm(url string, jsonData []byte, headers map[string]string) (error, []byte) {
httpClient := &http.Client{}
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
fmt.Println("SyncDataFromMasterReq2 error:", r) fmt.Println("SyncDataFromMasterReq2 error:", r)
@ -382,7 +397,7 @@ func DoPostRequestForm(url string, jsonData []byte, headers map[string]string) (
} }
// 发送请求 // 发送请求
resp, err := httpClient.Do(req) resp, err := client.Do(req)
if err != nil { if err != nil {
return err, nil return err, nil
} }
@ -398,7 +413,6 @@ func DoPostRequestForm(url string, jsonData []byte, headers map[string]string) (
} }
func DoPostRequestFormUrlEncoded(url_ string, jsonData []byte, headers map[string]string) (error, []byte) { func DoPostRequestFormUrlEncoded(url_ string, jsonData []byte, headers map[string]string) (error, []byte) {
httpClient := &http.Client{}
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
log.Println("SyncDataFromMasterReq2 error:", r) log.Println("SyncDataFromMasterReq2 error:", r)
@ -449,7 +463,7 @@ func DoPostRequestFormUrlEncoded(url_ string, jsonData []byte, headers map[strin
} }
// 发送请求 // 发送请求
resp, err := httpClient.Do(req) resp, err := client.Do(req)
if err != nil { if err != nil {
return err, nil return err, nil
} }
@ -465,7 +479,6 @@ func DoPostRequestFormUrlEncoded(url_ string, jsonData []byte, headers map[strin
} }
func DoGetRequest(url string, headers map[string]string) (error, []byte) { func DoGetRequest(url string, headers map[string]string) (error, []byte) {
httpClient := &http.Client{}
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
fmt.Println("SyncDataFromMasterReq2 error:", r) fmt.Println("SyncDataFromMasterReq2 error:", r)
@ -483,11 +496,12 @@ func DoGetRequest(url string, headers map[string]string) (error, []byte) {
req.Header.Set(k, v) req.Header.Set(k, v)
} }
//传输数据 //传输数据
if httpClient == nil { if client == nil {
httpClient = &http.Client{} InitReqClient()
client = client
} }
//获取数据 //获取数据
resp, err := httpClient.Do(req) resp, err := client.Do(req)
if err != nil { if err != nil {
return err, nil return err, nil
} }