mirror of
https://github.com/tuna/tunasync.git
synced 2025-04-21 04:42:46 +00:00
feat(worker): added username option for rsync providers
This commit is contained in:
parent
16c49b8083
commit
ebeee6bc34
@ -93,6 +93,7 @@ type mirrorConfig struct {
|
|||||||
Command string `toml:"command"`
|
Command string `toml:"command"`
|
||||||
UseIPv6 bool `toml:"use_ipv6"`
|
UseIPv6 bool `toml:"use_ipv6"`
|
||||||
ExcludeFile string `toml:"exclude_file"`
|
ExcludeFile string `toml:"exclude_file"`
|
||||||
|
Username string `toml:"username"`
|
||||||
Password string `toml:"password"`
|
Password string `toml:"password"`
|
||||||
Stage1Profile string `toml:"stage1_profile"`
|
Stage1Profile string `toml:"stage1_profile"`
|
||||||
}
|
}
|
||||||
|
@ -119,6 +119,7 @@ func newMirrorProvider(mirror mirrorConfig, cfg *Config) mirrorProvider {
|
|||||||
name: mirror.Name,
|
name: mirror.Name,
|
||||||
upstreamURL: mirror.Upstream,
|
upstreamURL: mirror.Upstream,
|
||||||
rsyncCmd: mirror.Command,
|
rsyncCmd: mirror.Command,
|
||||||
|
username: mirror.Username,
|
||||||
password: mirror.Password,
|
password: mirror.Password,
|
||||||
excludeFile: mirror.ExcludeFile,
|
excludeFile: mirror.ExcludeFile,
|
||||||
workingDir: mirrorDir,
|
workingDir: mirrorDir,
|
||||||
@ -139,6 +140,7 @@ func newMirrorProvider(mirror mirrorConfig, cfg *Config) mirrorProvider {
|
|||||||
stage1Profile: mirror.Stage1Profile,
|
stage1Profile: mirror.Stage1Profile,
|
||||||
upstreamURL: mirror.Upstream,
|
upstreamURL: mirror.Upstream,
|
||||||
rsyncCmd: mirror.Command,
|
rsyncCmd: mirror.Command,
|
||||||
|
username: mirror.Username,
|
||||||
password: mirror.Password,
|
password: mirror.Password,
|
||||||
excludeFile: mirror.ExcludeFile,
|
excludeFile: mirror.ExcludeFile,
|
||||||
workingDir: mirrorDir,
|
workingDir: mirrorDir,
|
||||||
|
@ -71,7 +71,7 @@ func TestRsyncProvider(t *testing.T) {
|
|||||||
Convey("Let's try a run", func() {
|
Convey("Let's try a run", func() {
|
||||||
scriptContent := `#!/bin/bash
|
scriptContent := `#!/bin/bash
|
||||||
echo "syncing to $(pwd)"
|
echo "syncing to $(pwd)"
|
||||||
echo $@
|
echo $RSYNC_PASSWORD $@
|
||||||
sleep 1
|
sleep 1
|
||||||
echo "Done"
|
echo "Done"
|
||||||
exit 0
|
exit 0
|
||||||
@ -103,6 +103,71 @@ exit 0
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRsyncProviderWithAuthentication(t *testing.T) {
|
||||||
|
Convey("Rsync Provider with password should work", t, func() {
|
||||||
|
tmpDir, err := ioutil.TempDir("", "tunasync")
|
||||||
|
defer os.RemoveAll(tmpDir)
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
scriptFile := filepath.Join(tmpDir, "myrsync")
|
||||||
|
tmpFile := filepath.Join(tmpDir, "log_file")
|
||||||
|
|
||||||
|
c := rsyncConfig{
|
||||||
|
name: "tuna",
|
||||||
|
upstreamURL: "rsync://rsync.tuna.moe/tuna/",
|
||||||
|
rsyncCmd: scriptFile,
|
||||||
|
username: "tunasync",
|
||||||
|
password: "tunasyncpassword",
|
||||||
|
workingDir: tmpDir,
|
||||||
|
logDir: tmpDir,
|
||||||
|
logFile: tmpFile,
|
||||||
|
useIPv6: true,
|
||||||
|
interval: 600 * time.Second,
|
||||||
|
}
|
||||||
|
|
||||||
|
provider, err := newRsyncProvider(c)
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
|
||||||
|
So(provider.Name(), ShouldEqual, c.name)
|
||||||
|
So(provider.WorkingDir(), ShouldEqual, c.workingDir)
|
||||||
|
So(provider.LogDir(), ShouldEqual, c.logDir)
|
||||||
|
So(provider.LogFile(), ShouldEqual, c.logFile)
|
||||||
|
So(provider.Interval(), ShouldEqual, c.interval)
|
||||||
|
|
||||||
|
Convey("Let's try a run", func() {
|
||||||
|
scriptContent := `#!/bin/bash
|
||||||
|
echo "syncing to $(pwd)"
|
||||||
|
echo $USER $RSYNC_PASSWORD $@
|
||||||
|
sleep 1
|
||||||
|
echo "Done"
|
||||||
|
exit 0
|
||||||
|
`
|
||||||
|
err = ioutil.WriteFile(scriptFile, []byte(scriptContent), 0755)
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
|
||||||
|
expectedOutput := fmt.Sprintf(
|
||||||
|
"syncing to %s\n"+
|
||||||
|
"%s\n"+
|
||||||
|
"Done\n",
|
||||||
|
provider.WorkingDir(),
|
||||||
|
fmt.Sprintf(
|
||||||
|
"%s %s -aHvh --no-o --no-g --stats --exclude .~tmp~/ "+
|
||||||
|
"--delete --delete-after --delay-updates --safe-links "+
|
||||||
|
"--timeout=120 --contimeout=120 -6 %s %s",
|
||||||
|
provider.username, provider.password, provider.upstreamURL, provider.WorkingDir(),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
err = provider.Run()
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
loggedContent, err := ioutil.ReadFile(provider.LogFile())
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
So(string(loggedContent), ShouldEqual, expectedOutput)
|
||||||
|
// fmt.Println(string(loggedContent))
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestCmdProvider(t *testing.T) {
|
func TestCmdProvider(t *testing.T) {
|
||||||
Convey("Command Provider should work", t, func(ctx C) {
|
Convey("Command Provider should work", t, func(ctx C) {
|
||||||
tmpDir, err := ioutil.TempDir("", "tunasync")
|
tmpDir, err := ioutil.TempDir("", "tunasync")
|
||||||
|
@ -9,7 +9,7 @@ import (
|
|||||||
type rsyncConfig struct {
|
type rsyncConfig struct {
|
||||||
name string
|
name string
|
||||||
rsyncCmd string
|
rsyncCmd string
|
||||||
upstreamURL, password, excludeFile string
|
upstreamURL, username, password, excludeFile string
|
||||||
workingDir, logDir, logFile string
|
workingDir, logDir, logFile string
|
||||||
useIPv6 bool
|
useIPv6 bool
|
||||||
interval time.Duration
|
interval time.Duration
|
||||||
@ -81,6 +81,9 @@ func (p *rsyncProvider) Run() error {
|
|||||||
func (p *rsyncProvider) Start() error {
|
func (p *rsyncProvider) Start() error {
|
||||||
|
|
||||||
env := map[string]string{}
|
env := map[string]string{}
|
||||||
|
if p.username != "" {
|
||||||
|
env["USER"] = p.username
|
||||||
|
}
|
||||||
if p.password != "" {
|
if p.password != "" {
|
||||||
env["RSYNC_PASSWORD"] = p.password
|
env["RSYNC_PASSWORD"] = p.password
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ type twoStageRsyncConfig struct {
|
|||||||
name string
|
name string
|
||||||
rsyncCmd string
|
rsyncCmd string
|
||||||
stage1Profile string
|
stage1Profile string
|
||||||
upstreamURL, password, excludeFile string
|
upstreamURL, username, password, excludeFile string
|
||||||
workingDir, logDir, logFile string
|
workingDir, logDir, logFile string
|
||||||
useIPv6 bool
|
useIPv6 bool
|
||||||
interval time.Duration
|
interval time.Duration
|
||||||
@ -110,6 +110,9 @@ func (p *twoStageRsyncProvider) Options(stage int) ([]string, error) {
|
|||||||
func (p *twoStageRsyncProvider) Run() error {
|
func (p *twoStageRsyncProvider) Run() error {
|
||||||
|
|
||||||
env := map[string]string{}
|
env := map[string]string{}
|
||||||
|
if p.username != "" {
|
||||||
|
env["USER"] = p.username
|
||||||
|
}
|
||||||
if p.password != "" {
|
if p.password != "" {
|
||||||
env["RSYNC_PASSWORD"] = p.password
|
env["RSYNC_PASSWORD"] = p.password
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user