2024-09-10 22:59:28 +02:00
|
|
|
// Package pkg /
|
|
|
|
|
/*****
|
|
|
|
|
@author Jonas Kaninda
|
|
|
|
|
@license MIT License <https://opensource.org/licenses/MIT>
|
|
|
|
|
@Copyright © 2024 Jonas Kaninda
|
|
|
|
|
**/
|
2024-07-29 23:03:28 +02:00
|
|
|
package pkg
|
|
|
|
|
|
2024-08-29 21:49:35 +02:00
|
|
|
import (
|
|
|
|
|
"github.com/jkaninda/pg-bkup/utils"
|
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
|
"os"
|
|
|
|
|
)
|
|
|
|
|
|
2024-07-29 23:03:28 +02:00
|
|
|
type Config struct {
|
|
|
|
|
}
|
2024-08-29 21:49:35 +02:00
|
|
|
|
|
|
|
|
type dbConfig struct {
|
|
|
|
|
dbHost string
|
|
|
|
|
dbPort string
|
|
|
|
|
dbName string
|
|
|
|
|
dbUserName string
|
|
|
|
|
dbPassword string
|
|
|
|
|
}
|
2024-09-03 06:09:56 +02:00
|
|
|
type targetDbConfig struct {
|
|
|
|
|
targetDbHost string
|
|
|
|
|
targetDbPort string
|
|
|
|
|
targetDbUserName string
|
|
|
|
|
targetDbPassword string
|
|
|
|
|
targetDbName string
|
2024-08-29 21:49:35 +02:00
|
|
|
}
|
2024-09-10 22:59:28 +02:00
|
|
|
type TgConfig struct {
|
|
|
|
|
Token string
|
|
|
|
|
ChatId string
|
|
|
|
|
}
|
2024-09-28 09:20:35 +02:00
|
|
|
type BackupConfig struct {
|
|
|
|
|
backupFileName string
|
|
|
|
|
backupRetention int
|
|
|
|
|
disableCompression bool
|
|
|
|
|
prune bool
|
|
|
|
|
encryption bool
|
|
|
|
|
remotePath string
|
2024-09-29 20:00:30 +02:00
|
|
|
passphrase string
|
2024-09-28 09:20:35 +02:00
|
|
|
storage string
|
|
|
|
|
cronExpression string
|
|
|
|
|
}
|
2024-09-29 23:53:19 +02:00
|
|
|
type FTPConfig struct {
|
|
|
|
|
host string
|
|
|
|
|
user string
|
|
|
|
|
password string
|
|
|
|
|
port string
|
|
|
|
|
remotePath string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func initFtpConfig() *FTPConfig {
|
|
|
|
|
//Initialize backup configs
|
|
|
|
|
fConfig := FTPConfig{}
|
|
|
|
|
fConfig.host = os.Getenv("FTP_HOST_NAME")
|
|
|
|
|
fConfig.user = os.Getenv("FTP_USER")
|
|
|
|
|
fConfig.password = os.Getenv("FTP_PASSWORD")
|
|
|
|
|
fConfig.port = os.Getenv("FTP_PORT")
|
|
|
|
|
fConfig.remotePath = os.Getenv("REMOTE_PATH")
|
|
|
|
|
err := utils.CheckEnvVars(ftpVars)
|
|
|
|
|
if err != nil {
|
|
|
|
|
utils.Error("Please make sure all required environment variables for FTP are set")
|
|
|
|
|
utils.Fatal("Error checking environment variables: %s", err)
|
|
|
|
|
}
|
|
|
|
|
return &fConfig
|
|
|
|
|
}
|
2024-08-29 21:49:35 +02:00
|
|
|
|
2024-09-28 09:20:35 +02:00
|
|
|
func initDbConfig(cmd *cobra.Command) *dbConfig {
|
2024-08-29 21:49:35 +02:00
|
|
|
//Set env
|
|
|
|
|
utils.GetEnv(cmd, "dbname", "DB_NAME")
|
|
|
|
|
dConf := dbConfig{}
|
|
|
|
|
dConf.dbHost = os.Getenv("DB_HOST")
|
|
|
|
|
dConf.dbPort = os.Getenv("DB_PORT")
|
|
|
|
|
dConf.dbName = os.Getenv("DB_NAME")
|
|
|
|
|
dConf.dbUserName = os.Getenv("DB_USERNAME")
|
|
|
|
|
dConf.dbPassword = os.Getenv("DB_PASSWORD")
|
|
|
|
|
|
|
|
|
|
err := utils.CheckEnvVars(dbHVars)
|
|
|
|
|
if err != nil {
|
|
|
|
|
utils.Error("Please make sure all required environment variables for database are set")
|
|
|
|
|
utils.Fatal("Error checking environment variables: %s", err)
|
|
|
|
|
}
|
|
|
|
|
return &dConf
|
|
|
|
|
}
|
2024-09-28 09:20:35 +02:00
|
|
|
func initBackupConfig(cmd *cobra.Command) *BackupConfig {
|
|
|
|
|
utils.SetEnv("STORAGE_PATH", storagePath)
|
|
|
|
|
utils.GetEnv(cmd, "cron-expression", "BACKUP_CRON_EXPRESSION")
|
|
|
|
|
utils.GetEnv(cmd, "period", "BACKUP_CRON_EXPRESSION")
|
2024-09-29 23:53:19 +02:00
|
|
|
utils.GetEnv(cmd, "path", "REMOTE_PATH")
|
2024-09-28 09:20:35 +02:00
|
|
|
//Get flag value and set env
|
2024-09-29 23:53:19 +02:00
|
|
|
remotePath := utils.GetEnvVariable("REMOTE_PATH", "SSH_REMOTE_PATH")
|
2024-09-28 09:20:35 +02:00
|
|
|
storage = utils.GetEnv(cmd, "storage", "STORAGE")
|
|
|
|
|
backupRetention, _ := cmd.Flags().GetInt("keep-last")
|
|
|
|
|
prune, _ := cmd.Flags().GetBool("prune")
|
|
|
|
|
disableCompression, _ = cmd.Flags().GetBool("disable-compression")
|
2024-09-28 09:48:37 +02:00
|
|
|
_, _ = cmd.Flags().GetString("mode")
|
2024-09-29 20:00:30 +02:00
|
|
|
passphrase := os.Getenv("GPG_PASSPHRASE")
|
2024-09-28 09:20:35 +02:00
|
|
|
_ = utils.GetEnv(cmd, "path", "AWS_S3_PATH")
|
|
|
|
|
cronExpression := os.Getenv("BACKUP_CRON_EXPRESSION")
|
|
|
|
|
|
2024-09-29 20:00:30 +02:00
|
|
|
if passphrase != "" {
|
2024-09-28 09:20:35 +02:00
|
|
|
encryption = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Initialize backup configs
|
|
|
|
|
config := BackupConfig{}
|
|
|
|
|
config.backupRetention = backupRetention
|
|
|
|
|
config.disableCompression = disableCompression
|
|
|
|
|
config.prune = prune
|
|
|
|
|
config.storage = storage
|
|
|
|
|
config.encryption = encryption
|
|
|
|
|
config.remotePath = remotePath
|
2024-09-29 20:00:30 +02:00
|
|
|
config.passphrase = passphrase
|
2024-09-28 09:20:35 +02:00
|
|
|
config.cronExpression = cronExpression
|
|
|
|
|
return &config
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type RestoreConfig struct {
|
|
|
|
|
s3Path string
|
|
|
|
|
remotePath string
|
|
|
|
|
storage string
|
|
|
|
|
file string
|
|
|
|
|
bucket string
|
|
|
|
|
gpqPassphrase string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func initRestoreConfig(cmd *cobra.Command) *RestoreConfig {
|
|
|
|
|
utils.SetEnv("STORAGE_PATH", storagePath)
|
2024-09-29 23:53:19 +02:00
|
|
|
utils.GetEnv(cmd, "path", "REMOTE_PATH")
|
2024-09-28 09:20:35 +02:00
|
|
|
|
|
|
|
|
//Get flag value and set env
|
|
|
|
|
s3Path := utils.GetEnv(cmd, "path", "AWS_S3_PATH")
|
2024-09-29 23:53:19 +02:00
|
|
|
remotePath := utils.GetEnvVariable("REMOTE_PATH", "SSH_REMOTE_PATH")
|
2024-09-28 09:20:35 +02:00
|
|
|
storage = utils.GetEnv(cmd, "storage", "STORAGE")
|
|
|
|
|
file = utils.GetEnv(cmd, "file", "FILE_NAME")
|
|
|
|
|
_, _ = cmd.Flags().GetString("mode")
|
|
|
|
|
bucket := utils.GetEnvVariable("AWS_S3_BUCKET_NAME", "BUCKET_NAME")
|
|
|
|
|
gpqPassphrase := os.Getenv("GPG_PASSPHRASE")
|
|
|
|
|
//Initialize restore configs
|
|
|
|
|
rConfig := RestoreConfig{}
|
|
|
|
|
rConfig.s3Path = s3Path
|
|
|
|
|
rConfig.remotePath = remotePath
|
|
|
|
|
rConfig.storage = storage
|
|
|
|
|
rConfig.bucket = bucket
|
|
|
|
|
rConfig.file = file
|
|
|
|
|
rConfig.storage = storage
|
|
|
|
|
rConfig.gpqPassphrase = gpqPassphrase
|
|
|
|
|
return &rConfig
|
|
|
|
|
}
|
|
|
|
|
func initTargetDbConfig() *targetDbConfig {
|
2024-09-03 06:09:56 +02:00
|
|
|
tdbConfig := targetDbConfig{}
|
|
|
|
|
tdbConfig.targetDbHost = os.Getenv("TARGET_DB_HOST")
|
|
|
|
|
tdbConfig.targetDbPort = os.Getenv("TARGET_DB_PORT")
|
|
|
|
|
tdbConfig.targetDbName = os.Getenv("TARGET_DB_NAME")
|
|
|
|
|
tdbConfig.targetDbUserName = os.Getenv("TARGET_DB_USERNAME")
|
|
|
|
|
tdbConfig.targetDbPassword = os.Getenv("TARGET_DB_PASSWORD")
|
2024-08-29 21:49:35 +02:00
|
|
|
|
2024-09-03 06:09:56 +02:00
|
|
|
err := utils.CheckEnvVars(tdbRVars)
|
2024-08-29 21:49:35 +02:00
|
|
|
if err != nil {
|
2024-09-03 06:09:56 +02:00
|
|
|
utils.Error("Please make sure all required environment variables for the target database are set")
|
|
|
|
|
utils.Fatal("Error checking target database environment variables: %s", err)
|
2024-08-29 21:49:35 +02:00
|
|
|
}
|
2024-09-03 06:09:56 +02:00
|
|
|
return &tdbConfig
|
2024-08-29 21:49:35 +02:00
|
|
|
}
|