feat: Plik z hasłami musi być szyfrowany. Polecenie szyfrowania
This commit is contained in:
parent
9ab0bcdb35
commit
c8c1ba52b9
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,6 +1,6 @@
|
||||
/.vscode
|
||||
/output
|
||||
/pgpass
|
||||
/pgpass*
|
||||
|
||||
#exec
|
||||
/multisql
|
||||
|
@ -8,13 +8,16 @@ import (
|
||||
"os"
|
||||
)
|
||||
|
||||
const MULTISQLPASS = "MULTISQLPASS" // nazwa ziennej środowiskowej z hasłem
|
||||
|
||||
type Parameters struct {
|
||||
Verbose bool
|
||||
ConfigFile string
|
||||
Passfile string
|
||||
OutDir string
|
||||
SqlDir string
|
||||
LogFile string
|
||||
Verbose bool
|
||||
AskPass bool
|
||||
}
|
||||
|
||||
var params Parameters
|
||||
@ -26,6 +29,8 @@ func init() {
|
||||
flag.StringVar(¶ms.OutDir, "outdir", "", "Katalog (istniejący i z prawem do zapisu), do którego generowane są wyniki")
|
||||
flag.StringVar(¶ms.SqlDir, "sqldir", "scripts", "Katalog, w którym znajdują się skrypty do uruchomienia")
|
||||
flag.StringVar(¶ms.LogFile, "log", "", "Plik, do którego zostanie dopisany log programu")
|
||||
flag.BoolVar(¶ms.AskPass, "P", false, "Pytaj o hasło. Jeśli nie podane wymaga się hasła w ")
|
||||
|
||||
flag.Usage = printUsage
|
||||
flag.Parse()
|
||||
}
|
||||
|
@ -1,10 +1,13 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"baal.ar76.eu/x/pub/multisql/cfg"
|
||||
"baal.ar76.eu/x/pub/multisql/mgr"
|
||||
"baal.ar76.eu/x/pub/multisql/pass"
|
||||
|
||||
"log"
|
||||
)
|
||||
@ -13,6 +16,12 @@ func main() {
|
||||
log.SetFlags(log.LstdFlags)
|
||||
params := cfg.GetParams()
|
||||
|
||||
args := flag.Args()
|
||||
if len (args) > 0 {
|
||||
encryption(args, params)
|
||||
return
|
||||
}
|
||||
|
||||
if params.LogFile != "" {
|
||||
fh, err := os.OpenFile(params.LogFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o664)
|
||||
if err != nil {
|
||||
@ -44,7 +53,7 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
manager, err := mgr.Create(params.Verbose, params.OutDir, config)
|
||||
manager, err := mgr.Create(params.Verbose, params.AskPass, params.OutDir, config)
|
||||
if err != nil {
|
||||
log.Fatalf("Nie można wystartować operacji: %v\n", err)
|
||||
}
|
||||
@ -56,3 +65,47 @@ func main() {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func encryption(args []string, params cfg.Parameters) {
|
||||
password := pass.GetMasterPass(params.AskPass)
|
||||
|
||||
switch strings.ToLower(args[0]) {
|
||||
case "encrypt":
|
||||
if len(args) < 3 {
|
||||
log.Fatal("encrypt wymaga dwu plików: cel-plik.zaszyfrowany źródło-plik.jawny")
|
||||
return
|
||||
}
|
||||
plain, err := os.ReadFile(args[2])
|
||||
if err != nil {
|
||||
log.Fatalf("Błąd odczytu pliku: %v", err)
|
||||
}
|
||||
err = pass.EncryptFile(password, args[1], plain)
|
||||
if err != nil {
|
||||
log.Fatalf("Błąd szyfrowania pliku: %v", err)
|
||||
}
|
||||
case "decrypt":
|
||||
if len(args) < 2 {
|
||||
log.Fatal("decryp wymaga podania pliku zaszyfrowanego")
|
||||
return
|
||||
}
|
||||
data, err := pass.DecryptFile(password, args[1])
|
||||
if err !=nil {
|
||||
log.Fatalf("Błąd deszyfrowania pliku: %v", err)
|
||||
}
|
||||
if len(args) > 2 {
|
||||
err = os.WriteFile(args[2], data, 0o600)
|
||||
if err != nil {
|
||||
log.Fatalf("Błąd zapisu pliku: %v", err)
|
||||
}
|
||||
log.Printf("Zapisano odszyfrowane dane do pliku %s", args[2])
|
||||
} else {
|
||||
os.Stdout.Write(data)
|
||||
}
|
||||
|
||||
default:
|
||||
log.Println("W trybie komend wymagane jest podanie polecenie encrypt lub decrypt i nazw plików: zaszyfrowanego i jawnego");
|
||||
log.Println("Np:")
|
||||
log.Println("multisql encrypt hasła.zaszyfrowany hasła")
|
||||
log.Println("multisql decrypt hasła.zaszyfrowany hasła")
|
||||
}
|
||||
}
|
||||
|
@ -17,15 +17,17 @@ type Manager struct {
|
||||
config cfg.Config
|
||||
runDir string
|
||||
verbose bool
|
||||
askPass bool
|
||||
}
|
||||
|
||||
func Create(verbose bool, outdir string, config cfg.Config) (Manager, error) {
|
||||
func Create(verbose bool, askPass bool, outdir string, config cfg.Config) (Manager, error) {
|
||||
runDir := createRunDir(outdir)
|
||||
|
||||
manager := Manager{
|
||||
config: config,
|
||||
runDir: runDir,
|
||||
verbose: verbose,
|
||||
askPass: askPass,
|
||||
}
|
||||
|
||||
return manager, nil
|
||||
@ -73,7 +75,8 @@ func (self Manager) Run() error {
|
||||
var passdb *pass.PassDb
|
||||
|
||||
if self.config.PassFile != "" {
|
||||
passdb, err = pass.Load(self.config.PassFile, "TODO")
|
||||
password := pass.GetMasterPass(self.askPass)
|
||||
passdb, err = pass.Load(self.config.PassFile, password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -115,7 +118,6 @@ func (self Manager) createDirPerCon(con cfg.Connection) (string, error) {
|
||||
return dir, err
|
||||
}
|
||||
|
||||
|
||||
func (self Manager) Logger(group *sync.WaitGroup, stream <-chan psql.Result, con cfg.Connection) {
|
||||
for event := range stream {
|
||||
if event.Err != nil {
|
||||
|
@ -3,7 +3,6 @@ package pass
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
type pgpassrow struct {
|
||||
@ -21,7 +20,7 @@ type PassDb struct {
|
||||
|
||||
func Load(file string, master string) (*PassDb, error) {
|
||||
|
||||
data, err := os.ReadFile(file)
|
||||
data, err := DecryptFile(master, file)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user