Compare commits

..

No commits in common. "36e0fdb7974568ca85fc751d96d90f545a315f79" and "fd71cc85c43640f576da019e92cc5fabc7ee8932" have entirely different histories.

6 changed files with 36 additions and 87 deletions

View File

@ -90,16 +90,11 @@ func FindRunLogByAuthID(auth_id int) []CIDRunLog {
return cidRunLogs return cidRunLogs
} }
func FindRunLogByID(auth_id, cid_id int) []CIDRunLog { func FindRunLogByID(auth_id, cid_id int) CIDRunLog {
var cidRunLog []CIDRunLog var cidRunLog CIDRunLog
DB.Debug().Where("cid_id = ? and auth_id = ?", cid_id, auth_id).Order("created_at desc").Find(&cidRunLog) DB.Debug().Where("cid_id = ? and auth_id = ?", cid_id, auth_id).First(&cidRunLog)
return cidRunLog return cidRunLog
} }
func FindRunLogByCIDLogID(id, auth_id int) []CIDRunLog {
var cidRunLogs []CIDRunLog
DB.Debug().Where("id = ? and auth_id = ?", id, auth_id).Order("created_at desc").Find(&cidRunLogs)
return cidRunLogs
}
func FindCIDByIDAndToken(id int, token string) CID { func FindCIDByIDAndToken(id int, token string) CID {
var cid CID var cid CID

View File

@ -37,12 +37,6 @@ func FindUserByID(id int) []proto.User {
return users return users
} }
func FindUserByUserID(id int) User {
var user User
DB.Debug().Where("id = ?", id).First(&user)
return user
}
func FindUserByName(name string) User { func FindUserByName(name string) User {
var user User var user User
fmt.Println("name:", name) fmt.Println("name:", name)

View File

@ -25,10 +25,6 @@ type CIDRunReq struct {
ID int `json:"id" form:"id"` ID int `json:"id" form:"id"`
} }
type CIDLogReq struct {
ID int `json:"id" form:"id"`
}
type CIDUpdateReq struct { type CIDUpdateReq struct {
ID int `json:"id" form:"id"` ID int `json:"id" form:"id"`
Name string `json:"name" form:"name"` Name string `json:"name" form:"name"`
@ -54,7 +50,6 @@ func RunCID(c *gin.Context) {
// 获取用户ID // 获取用户ID
id, _ := c.Get("id") id, _ := c.Get("id")
authID := int(id.(float64)) authID := int(id.(float64))
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"})
@ -65,32 +60,28 @@ func RunCID(c *gin.Context) {
names := strings.Split(name, ".") names := strings.Split(name, ".")
name = names[0] name = names[0]
//脚本内容,不同用户的持续集成、部署目录不同 //脚本内容
scriptContent := ` scriptContent := `#!/bin/bash
echo "start" TARGET_DIR = ` + proto.CID_BASE_DIR + `/workspace` + name + `
TARGET_DIR=` + proto.CID_BASE_DIR + username.(string) + `/workspace/` + name + ` if [ ! -d $TARGET_DIR ]; then
if [ ! -d $TARGET_DIR ]; then
git clone ` + cid.Url + ` git clone ` + cid.Url + `
cd $TARGET_DIR cd $TARGET_DIR/` + name + `
else else
cd $TARGET_DIR cd $TARGET_DIR/` + name + `
git pull git pull
fi fi
` + cid.Script + ` ` + cid.Script
pwd
ls -lh
echo "end"`
//执行脚本 //执行脚本
cmd := exec.Command("/bin/bash", "-c", scriptContent) cmd := exec.Command("/bin/bash", "-c", scriptContent)
// 使用bytes.Buffer捕获输出
var out bytes.Buffer
cmd.Stdout = &out
err3 := cmd.Run() err3 := cmd.Run()
err3_info := "" err3_info := ""
if err3 != nil { if err3 != nil {
err3_info = err3.Error() err3_info = err3.Error()
} }
fmt.Println("bash content:", scriptContent) fmt.Println("bash content:", scriptContent)
// 使用bytes.Buffer捕获输出
var out bytes.Buffer
cmd.Stdout = &out
dao.CreateRunLog(req.ID, authID, scriptContent, out.String(), err3_info) //添加执行日志 dao.CreateRunLog(req.ID, authID, scriptContent, out.String(), err3_info) //添加执行日志
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": "success"}) c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": "success"})
@ -170,7 +161,7 @@ func GetCIDLog(c *gin.Context) {
// 获取用户ID // 获取用户ID
id, _ := c.Get("id") id, _ := c.Get("id")
authID := int(id.(float64)) authID := int(id.(float64))
cidLogs := dao.FindRunLogByCIDLogID(req.ID, authID) cidLogs := dao.FindRunLogByID(req.ID, authID)
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": cidLogs}) c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": cidLogs})
} else { } else {
c.JSON(200, gin.H{"error": err.Error(), "code": proto.ParameterError, "message": "failed"}) c.JSON(200, gin.H{"error": err.Error(), "code": proto.ParameterError, "message": "failed"})
@ -181,13 +172,8 @@ func GetCIDLogList(c *gin.Context) {
// 获取用户ID // 获取用户ID
id, _ := c.Get("id") id, _ := c.Get("id")
authID := int(id.(float64)) authID := int(id.(float64))
var req CIDLogReq cidLogs := dao.FindRunLogByAuthID(authID)
if err := c.ShouldBind(&req); err == nil {
cidLogs := dao.FindRunLogByID(authID, req.ID)
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": cidLogs}) c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": cidLogs})
} else {
c.JSON(200, gin.H{"error": err.Error(), "code": proto.ParameterError, "message": "failed"})
}
} }
func CIDCallback(c *gin.Context) { func CIDCallback(c *gin.Context) {
@ -207,31 +193,26 @@ func CIDCallback(c *gin.Context) {
name := strs[len(strs)-1] name := strs[len(strs)-1]
names := strings.Split(name, ".") names := strings.Split(name, ".")
name = names[0] name = names[0]
user := dao.FindUserByUserID(res.Auth_id) scriptContent := `#!/bin/bash
scriptContent := ` TARGET_DIR = ` + proto.CID_BASE_DIR + `/workspace` + name + `
echo "start" if [ ! -d $TARGET_DIR ]; then
TARGET_DIR=` + proto.CID_BASE_DIR + user.Name + `workspace/` + name + `
if [ ! -d $TARGET_DIR ]; then
git clone ` + res.Url + ` git clone ` + res.Url + `
cd $TARGET_DIR cd $TARGET_DIR/` + name + `
else else
cd $TARGET_DIR cd $TARGET_DIR/` + name + `
git pull git pull
fi fi
` + res.Script + ` ` + res.Script
pwd
ls -lh
echo "end"`
//执行脚本 //执行脚本
cmd := exec.Command("/bin/bash", "-c", scriptContent) cmd := exec.Command("/bin/bash", "-c", scriptContent)
// 使用bytes.Buffer捕获输出
var out bytes.Buffer
cmd.Stdout = &out
err3 := cmd.Run() err3 := cmd.Run()
err3_info := "" err3_info := ""
if err3 != nil { if err3 != nil {
err3_info = err3.Error() err3_info = err3.Error()
} }
// 使用bytes.Buffer捕获输出
var out bytes.Buffer
cmd.Stdout = &out
dao.CreateRunLog(cid, res.Auth_id, scriptContent, out.String(), err3_info) //添加执行日志 dao.CreateRunLog(cid, res.Auth_id, scriptContent, out.String(), err3_info) //添加执行日志
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 {

View File

@ -181,7 +181,6 @@ func SRMessage(c *gin.Context) {
var res3 []byte var res3 []byte
var msg proto.Message var msg proto.Message
if res2 != "" { if res2 != "" {
//若有消息则发送消息
msg.Type = "msg" msg.Type = "msg"
msg.Msg = res2 msg.Msg = res2
msg.From_user_id = id1 msg.From_user_id = id1
@ -195,25 +194,12 @@ func SRMessage(c *gin.Context) {
msg.Session = res msg.Session = res
res3, _ = json.Marshal(msg) res3, _ = json.Marshal(msg)
} }
//判断对方是否在线,若不在线则发送离线消息,否则正常发送消息
if worker.IsContainKey(to_user_id+"_status") == true {
if worker.GetRedis(to_user_id+"_status") == "0" {
msg.Type = "offline"
msg.Msg = "offline"
msg.From_user_id = -1
msg.Session = res
res3, _ = json.Marshal(msg)
}
}
err2 := ws.WriteMessage(websocket.TextMessage, res3) err2 := ws.WriteMessage(websocket.TextMessage, res3)
if err2 != nil { if err2 != nil {
worker.SetRedisWithExpire("user_"+id.(string)+"_status", "0", time.Second*120) //设置用户在线状态,1为在线,0为离线,5秒后过期
clientsMux.Lock() clientsMux.Lock()
delete(clients, ws) delete(clients, ws)
clientsMux.Unlock() clientsMux.Unlock()
break break
} else {
worker.SetRedisWithExpire("user_"+id.(string)+"_status", "1", time.Second*5) //设置用户在线状态,1为在线,0为离线,5秒后过期
} }
time.Sleep(time.Second * 1) // 每1秒查询一次 time.Sleep(time.Second * 1) // 每1秒查询一次
} else { } else {

View File

@ -253,7 +253,6 @@ func loginHandler(c *gin.Context) {
func registerHandler(c *gin.Context) { func registerHandler(c *gin.Context) {
var req_data RLReq var req_data RLReq
tokenString := "" tokenString := ""
var id uint
if err := c.ShouldBindJSON(&req_data); err == nil { if err := c.ShouldBindJSON(&req_data); err == nil {
if len(req_data.Password) != 32 { if len(req_data.Password) != 32 {
hasher := md5.New() hasher := md5.New()
@ -264,7 +263,7 @@ func registerHandler(c *gin.Context) {
c.JSON(200, gin.H{"error": "user already exists", "code": proto.UsernameExists, "message": "error"}) c.JSON(200, gin.H{"error": "user already exists", "code": proto.UsernameExists, "message": "error"})
return return
} }
id = service.CreateUser(req_data.User, req_data.Password, req_data.Email, req_data.Gender, req_data.Age) id := service.CreateUser(req_data.User, req_data.Password, req_data.Email, req_data.Gender, req_data.Age)
if id == 0 { if id == 0 {
c.JSON(200, gin.H{"error": "create user error", "code": proto.OperationFailed, "message": "error"}) c.JSON(200, gin.H{"error": "create user error", "code": proto.OperationFailed, "message": "error"})
return return
@ -291,11 +290,6 @@ func registerHandler(c *gin.Context) {
return return
} }
// 返回令牌 // 返回令牌
data := make(map[string]interface{}) c.JSON(200, gin.H{"token": tokenString, "username": req_data.User, "code": proto.SuccessCode, "message": "success"})
data["id"] = id
data["username"] = req_data.User
data["email"] = req_data.Email
data["token"] = tokenString
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "date": data})
return return
} }

View File

@ -17,7 +17,6 @@ var signingKey = []byte(proto.TOKEN_SECRET)
func main() { func main() {
r := gin.Default() r := gin.Default()
gin.SetMode(gin.ReleaseMode)
dao.Init() dao.Init()
worker.InitRedis() worker.InitRedis()
r.Use(handler.CrosHandler()) r.Use(handler.CrosHandler())
@ -70,7 +69,7 @@ func JWTAuthMiddleware() gin.HandlerFunc {
} }
//如果请求为login或register则不需要验证token //如果请求为login或register则不需要验证token
if strings.Contains(c.Request.URL.Path, "/login") || strings.Contains(c.Request.URL.Path, "/register") || strings.Contains(c.Request.URL.Path, "/uuid") || strings.Contains(c.Request.URL.Path, "/gqr") || strings.Contains(c.Request.URL.Path, "/cid/callback") { if strings.Contains(c.Request.URL.Path, "/login") || strings.Contains(c.Request.URL.Path, "/register") || strings.Contains(c.Request.URL.Path, "/uuid") || strings.Contains(c.Request.URL.Path, "/gqr") {
c.Next() c.Next()
return return
} }