mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2026-04-15 01:41:56 +00:00
Improve forge token refreshing
This commit is contained in:
@@ -19,13 +19,9 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rs/zerolog/log"
|
||||
|
||||
"go.woodpecker-ci.org/woodpecker/v3/server"
|
||||
"go.woodpecker-ci.org/woodpecker/v3/server/forge"
|
||||
"go.woodpecker-ci.org/woodpecker/v3/server/model"
|
||||
"go.woodpecker-ci.org/woodpecker/v3/server/pipeline"
|
||||
"go.woodpecker-ci.org/woodpecker/v3/server/store"
|
||||
"go.woodpecker-ci.org/woodpecker/v3/server/store/types"
|
||||
)
|
||||
|
||||
@@ -52,19 +48,6 @@ func handleDBError(c *gin.Context, err error) {
|
||||
_ = c.AbortWithError(http.StatusInternalServerError, err)
|
||||
}
|
||||
|
||||
// If the forge has a refresh token, the current access token may be stale.
|
||||
// Therefore, we should refresh prior to dispatching the job.
|
||||
func refreshUserToken(c *gin.Context, user *model.User) {
|
||||
_store := store.FromContext(c)
|
||||
_forge, err := server.Config.Services.Manager.ForgeFromUser(user)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("Cannot get forge from user")
|
||||
c.AbortWithStatus(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
forge.Refresh(c, _forge, _store, user)
|
||||
}
|
||||
|
||||
// pipelineDeleteAllowed checks if the given pipeline can be deleted based on its status.
|
||||
// It returns a bool indicating if delete is allowed, and the pipeline's status.
|
||||
func pipelineDeleteAllowed(pl *model.Pipeline) bool {
|
||||
|
||||
+2
-2
@@ -296,12 +296,12 @@ func PostHook(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
user, err := _store.GetUser(repo.UserID)
|
||||
repoUser, err := _store.GetUser(repo.UserID)
|
||||
if err != nil {
|
||||
handleDBError(c, err)
|
||||
return
|
||||
}
|
||||
forge.Refresh(c, _forge, _store, user)
|
||||
forge.Refresh(c, _forge, _store, repoUser)
|
||||
|
||||
//
|
||||
// 4. Update the repo
|
||||
|
||||
+10
-5
@@ -29,6 +29,7 @@ import (
|
||||
"github.com/rs/zerolog/log"
|
||||
|
||||
"go.woodpecker-ci.org/woodpecker/v3/server"
|
||||
"go.woodpecker-ci.org/woodpecker/v3/server/forge"
|
||||
"go.woodpecker-ci.org/woodpecker/v3/server/model"
|
||||
"go.woodpecker-ci.org/woodpecker/v3/server/pipeline"
|
||||
"go.woodpecker-ci.org/woodpecker/v3/server/pipeline/stepbuilder"
|
||||
@@ -604,7 +605,7 @@ func PostPipeline(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
user, err := _store.GetUser(repo.UserID)
|
||||
repoUser, err := _store.GetUser(repo.UserID)
|
||||
if err != nil {
|
||||
handleDBError(c, err)
|
||||
return
|
||||
@@ -617,9 +618,13 @@ func PostPipeline(c *gin.Context) {
|
||||
}
|
||||
|
||||
// refresh the token to make sure, pipeline.Restart can still obtain the pipeline config if necessary again
|
||||
refreshUserToken(c, user)
|
||||
|
||||
// make Deploy overridable
|
||||
_forge, err := server.Config.Services.Manager.ForgeFromUser(repoUser)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("Cannot get forge from user")
|
||||
_ = c.AbortWithError(http.StatusBadRequest, err)
|
||||
return
|
||||
}
|
||||
forge.Refresh(c, _forge, _store, repoUser)
|
||||
|
||||
// make Deploy task overridable
|
||||
pl.DeployTask = c.DefaultQuery("deploy_task", pl.DeployTask)
|
||||
@@ -656,7 +661,7 @@ func PostPipeline(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
newPipeline, err := pipeline.Restart(c, _store, pl, user, repo, envs)
|
||||
newPipeline, err := pipeline.Restart(c, _store, pl, repoUser, repo, envs)
|
||||
if err != nil {
|
||||
handlePipelineErr(c, err)
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user