Support YAML for the configuration and rearrange the config struct
This commit is contained in:
parent
fb15dcf3d5
commit
95ce7fccee
3 changed files with 69 additions and 66 deletions
81
README.md
81
README.md
|
@ -10,61 +10,58 @@ Uploads .torrent files from a local "blackhole" to a remote (SSH) rtorrent watch
|
|||
|
||||
# Configuration
|
||||
## Example
|
||||
Ignore the keys that start with an underscore, they are comments.
|
||||
```json
|
||||
{
|
||||
"_rtorrent_addr": "The address to the rtorrent XMLRPC endpoint",
|
||||
"rtorrent_addr": "mycoolrtorrentserver.com/XMLRPC",
|
||||
```yaml
|
||||
# The file mode to use for downloaded files and directories
|
||||
file_download_filemode: 0777
|
||||
|
||||
"_rtorrent_insecure_cert": "true to ignore the certificate authenticity; false to honor it",
|
||||
"rtorrent_insecure_cert": false,
|
||||
# The correlation of .torrent file paths and where their contents should be downloaded to"
|
||||
watch_to_download_paths:
|
||||
/home/tblyler/torrent_files/tv: /home/tblyler/Downloads/tv
|
||||
/home/tblyler/torrent_files/movies: /home/tblyler/Downloads/movies
|
||||
/home/tblyler/torrent_files: /home/tblyler/Downloads
|
||||
|
||||
"_torrent_username": "The HTTP Basic auth username to use for rtorrent's XMLRPC",
|
||||
"rtorrent_username": "JohnDoe",
|
||||
# The root path to temporarily download to and then move to the folder in the setting above. The destination path is created underneath the temp_download_path
|
||||
temp_download_path: /home/tblyler/tempDownloads
|
||||
|
||||
"_rtorrent_password": "The HTTP Basic auth password to use for rtorrent's XMLRPC",
|
||||
"rtorrent_password": "correct horse battery staple",
|
||||
# If defined, the finished .torrent files finished are moved to their respected path here. Otherwise, they are deleted.
|
||||
watch_to_finish_path:
|
||||
/home/tblyler/torrent_files/tv: /home/tblyler/completed_torrent_files/tv
|
||||
/home/tblyler/torrent_files: /home/tblyler/completed_torrent_files
|
||||
|
||||
"_ssh_username": "The ssh username to use for getting finished torrents from the remote host",
|
||||
"ssh_username": "JohnDoe",
|
||||
# The time in nano seconds to update the list of torrents and their statuses in rTorrent
|
||||
rtorrent_update_interval: 60000000000
|
||||
|
||||
"_SSH_AUTH_COMMENT": "You may choose to use an ssh key or ssh password. If both are supplied, the password will not be used.",
|
||||
# The number of concurrent completed torrent downloads to have at one time
|
||||
download_jobs: 2
|
||||
|
||||
"_ssh_password": "The SSH password to use for SSH authentication",
|
||||
"ssh_password": "correct horse battery staple SSH",
|
||||
rtorrent:
|
||||
# The address to the rtorrent XMLRPC endpoint
|
||||
addr: mycoolrtorrentserver.com/XMLRPC
|
||||
|
||||
"_ssh_privkey_path": "The path to the private SSH key for SSH authentication",
|
||||
"ssh_privkey_path": "/home/tblyler/.ssh/id_rsa",
|
||||
# true to ignore the certificate authenticity; false to honor it
|
||||
insecure_cert: false
|
||||
|
||||
"_ssh_addr": "The SSH address to connect to",
|
||||
"ssh_addr": "mysshserver.com:22",
|
||||
# The HTTP Basic auth username to use for rtorrent's XMLRPC
|
||||
username: JohnDoe
|
||||
|
||||
"_ssh_connect_timeout": "The time in nano seconds to wait for an SSH connection attempt",
|
||||
"ssh_connect_timeout": 30000000000,
|
||||
# The HTTP Basic auth password to use for rtorrent's XMLRPC
|
||||
password: "correct horse battery staple"
|
||||
|
||||
"_file_download_filemode": "The base 10 file mode to use for downloaded files",
|
||||
"file_download_filemode": 511,
|
||||
ssh:
|
||||
# The ssh username to use for getting finished torrents from the remote host
|
||||
username: JohnDoe
|
||||
|
||||
"_watch_to_download_paths": "The correlation of .torrent file paths and where their contents should be downloaded to",
|
||||
"watch_to_download_paths": {
|
||||
"/home/tblyler/torrent_files/tv": "/home/tblyler/Downloads/tv",
|
||||
"/home/tblyler/torrent_files/movies": "/home/tblyler/Downloads/movies",
|
||||
"/home/tblyler/torrent_files": "/home/tblyler/Downloads"
|
||||
},
|
||||
# You may choose to use an ssh key or ssh password. If both are supplied, the password will not be used.
|
||||
|
||||
"_temp_download_path": "The root path to temporarily download to and then move to the folder in the setting above. The destination path is created underneath the temp_download_path",
|
||||
"temp_download_path": "/home/tblyler/tempDownloads",
|
||||
# The SSH password to use for SSH authentication
|
||||
password: "correct horse battery staple SSH"
|
||||
|
||||
"_watch_to_finish_path": "If defined, the finished .torrent files finished are moved to their respected path here. Otherwise, they are deleted.",
|
||||
"watch_to_finish_path": {
|
||||
"/home/tblyler/torrent_files/tv": "/home/tblyler/completed_torrent_files/tv",
|
||||
"/home/tblyler/torrent_files": "/home/tblyler/completed_torrent_files"
|
||||
},
|
||||
# The path to the private SSH key for SSH authentication
|
||||
privkey_path: /home/tblyler/.ssh/id_rsa
|
||||
|
||||
"_rtorrent_update_interval": "The time in nano seconds to update the list of torrents and their statuses in rTorrent",
|
||||
"rtorrent_update_interval": 300000000000,
|
||||
# The SSH address to connect to
|
||||
addr: "mysshserver.com:22"
|
||||
|
||||
"_download_jobs": "The number of concurrent download streams to have at one time",
|
||||
"download_jobs": 2
|
||||
}
|
||||
# The time in nano seconds to wait for an SSH connection attempt
|
||||
connect_timeout: 30000000000
|
||||
```
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"github.com/tblyler/hoarder/queue"
|
||||
"gopkg.in/yaml.v2"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
|
@ -28,7 +28,7 @@ func main() {
|
|||
}
|
||||
|
||||
config := &queue.Config{}
|
||||
err = json.Unmarshal(configRaw, config)
|
||||
err = yaml.Unmarshal(configRaw, config)
|
||||
if err != nil {
|
||||
logger.Printf("Unable to decode config json at '%s': '%s'", *configPath, err)
|
||||
os.Exit(1)
|
||||
|
|
|
@ -19,21 +19,27 @@ import (
|
|||
|
||||
// Config defines the settings for watching, uploading, and downloading
|
||||
type Config struct {
|
||||
RtorrentAddr string `json:"rtorrent_addr"`
|
||||
RtorrentInsecureCert bool `json:"rtorrent_insecure_cert"`
|
||||
RtorrentUsername string `json:"rtorrent_username"`
|
||||
RtorrentPassword string `json:"rtorrent_password"`
|
||||
SSHUsername string `json:"ssh_username"`
|
||||
SSHPassword string `json:"ssh_password"`
|
||||
SSHKeyPath string `json:"ssh_privkey_path"`
|
||||
SSHAddr string `json:"ssh_addr"`
|
||||
SSHTimeout time.Duration `json:"ssh_connect_timeout"`
|
||||
DownloadFileMode os.FileMode `json:"file_download_filemode"`
|
||||
WatchDownloadPaths map[string]string `json:"watch_to_download_paths"`
|
||||
TempDownloadPath string `json:"temp_download_path"`
|
||||
FinishedTorrentFilePath map[string]string `json:"watch_to_finish_path"`
|
||||
TorrentListUpdateInterval time.Duration `json:"rtorrent_update_interval"`
|
||||
ConcurrentDownloads uint `json:"download_jobs"`
|
||||
Rtorrent struct {
|
||||
Addr string `json:"addr" yaml:"addr"`
|
||||
InsecureCert bool `json:"insecure_cert" yaml:"insecure_cert"`
|
||||
Username string `json:"username" yaml:"username"`
|
||||
Password string `json:"password" yaml:"password"`
|
||||
} `json:"rtorrent" yaml:"rtorrent,flow"`
|
||||
|
||||
SSH struct {
|
||||
Username string `json:"username" yaml:"username"`
|
||||
Password string `json:"password" yaml:"password"`
|
||||
KeyPath string `json:"privkey_path" yaml:"privkey_path"`
|
||||
Addr string `json:"addr" yaml:"addr"`
|
||||
Timeout time.Duration `json:"connect_timeout" yaml:"connect_timeout"`
|
||||
} `json:"ssh" yaml:"ssh,flow"`
|
||||
|
||||
DownloadFileMode os.FileMode `json:"file_download_filemode" yaml:"file_download_filemode"`
|
||||
WatchDownloadPaths map[string]string `json:"watch_to_download_paths" yaml:"watch_to_download_paths,flow"`
|
||||
TempDownloadPath string `json:"temp_download_path" yaml:"temp_download_path"`
|
||||
FinishedTorrentFilePath map[string]string `json:"watch_to_finish_path" yaml:"watch_to_finish_path,flow"`
|
||||
TorrentListUpdateInterval time.Duration `json:"rtorrent_update_interval" yaml:"rtorrent_update_interval"`
|
||||
ConcurrentDownloads uint `json:"download_jobs" yaml:"download_jobs"`
|
||||
}
|
||||
|
||||
// Queue watches the given folders for new .torrent files,
|
||||
|
@ -116,15 +122,15 @@ func NewQueue(config *Config, logger *log.Logger) (*Queue, error) {
|
|||
}
|
||||
}
|
||||
|
||||
rtClient := rtorrent.New(config.RtorrentAddr, config.RtorrentInsecureCert)
|
||||
rtClient.SetAuth(config.RtorrentUsername, config.RtorrentPassword)
|
||||
rtClient := rtorrent.New(config.Rtorrent.Addr, config.Rtorrent.InsecureCert)
|
||||
rtClient.SetAuth(config.Rtorrent.Username, config.Rtorrent.Password)
|
||||
|
||||
sftpClient, err := easysftp.Connect(&easysftp.ClientConfig{
|
||||
Username: config.SSHUsername,
|
||||
Password: config.SSHPassword,
|
||||
KeyPath: config.SSHKeyPath,
|
||||
Host: config.SSHAddr,
|
||||
Timeout: config.SSHTimeout,
|
||||
Username: config.SSH.Username,
|
||||
Password: config.SSH.Password,
|
||||
KeyPath: config.SSH.KeyPath,
|
||||
Host: config.SSH.Addr,
|
||||
Timeout: config.SSH.Timeout,
|
||||
FileMode: config.DownloadFileMode,
|
||||
})
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in a new issue