@ -8,8 +8,11 @@ import (
"fmt"
migration "code.gitea.io/gitea/modules/migrations/base"
"code.gitea.io/gitea/modules/secret"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/timeutil"
"code.gitea.io/gitea/modules/util"
jsoniter "github.com/json-iterator/go"
"xorm.io/builder"
@ -110,6 +113,24 @@ func (task *Task) MigrateConfig() (*migration.MigrateOptions, error) {
if err != nil {
return nil , err
}
// decrypt credentials
if opts . CloneAddrEncrypted != "" {
if opts . CloneAddr , err = secret . DecryptSecret ( setting . SecretKey , opts . CloneAddrEncrypted ) ; err != nil {
return nil , err
}
}
if opts . AuthPasswordEncrypted != "" {
if opts . AuthPassword , err = secret . DecryptSecret ( setting . SecretKey , opts . AuthPasswordEncrypted ) ; err != nil {
return nil , err
}
}
if opts . AuthTokenEncrypted != "" {
if opts . AuthToken , err = secret . DecryptSecret ( setting . SecretKey , opts . AuthTokenEncrypted ) ; err != nil {
return nil , err
}
}
return & opts , nil
}
return nil , fmt . Errorf ( "Task type is %s, not Migrate Repo" , task . Type . Name ( ) )
@ -205,12 +226,31 @@ func createTask(e Engine, task *Task) error {
func FinishMigrateTask ( task * Task ) error {
task . Status = structs . TaskStatusFinished
task . EndTime = timeutil . TimeStampNow ( )
// delete credentials when we're done, they're a liability.
conf , err := task . MigrateConfig ( )
if err != nil {
return err
}
conf . AuthPassword = ""
conf . AuthToken = ""
conf . CloneAddr = util . SanitizeURLCredentials ( conf . CloneAddr , true )
conf . AuthPasswordEncrypted = ""
conf . AuthTokenEncrypted = ""
conf . CloneAddrEncrypted = ""
json := jsoniter . ConfigCompatibleWithStandardLibrary
confBytes , err := json . Marshal ( conf )
if err != nil {
return err
}
task . PayloadContent = string ( confBytes )
sess := x . NewSession ( )
defer sess . Close ( )
if err := sess . Begin ( ) ; err != nil {
return err
}
if _ , err := sess . ID ( task . ID ) . Cols ( "status" , "end_time" ) . Update ( task ) ; err != nil {
if _ , err := sess . ID ( task . ID ) . Cols ( "status" , "end_time" , "payload_content" ). Update ( task ) ; err != nil {
return err
}