Skip to content

Commit

Permalink
Load client config from /etc/plik/plikrc
Browse files Browse the repository at this point in the history
  • Loading branch information
Skatkatt (epik) committed Jan 11, 2017
1 parent d6fb698 commit c82d16c
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 86 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ Commands :
curl -s 'https://127.0.0.1:8080/file/0KfNj6eMb93ilCrl/q73tEBEqM04b22GP/mydirectory.tar.gz' | openssl aes-256-cbc -d -pass pass:30ICoKdFeoKaKNdnFf36n0kMH | tar xvf - --gzip
```

Client configuration and preferences are stored at ~/.plikrc ( overridable with PLIKRC environement variable )
Client configuration and preferences are stored at ~/.plikrc or /etc/plik/plikrc ( overridable with PLIKRC environement variable )

### Available data backends

Expand Down
154 changes: 91 additions & 63 deletions client/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,15 @@ func NewFileToUpload() (fileToUpload *FileToUpload) {
return
}

// LoadConfigFromFile load TOML config file
func LoadConfigFromFile(path string) error {
if _, err := toml.DecodeFile(path, &Config); err != nil {
return fmt.Errorf("Failed to deserialize ~/.plickrc : %s", err)
}

return nil
}

// Load creates a new default configuration and override it with .plikrc fike.
// If plikrc does not exist, ask domain,
// and create a new one in user HOMEDIR
Expand All @@ -142,96 +151,115 @@ func Load() (err error) {
Upload = common.NewUpload()
Files = make([]*FileToUpload, 0)

// Get config file
configFile := os.Getenv("PLIKRC")
if configFile == "" {
// Detect home dir
home, err := homedir.Dir()
// Load config file from environment variable
path := os.Getenv("PLIKRC")
if path != "" {
_, err := os.Stat(path)
if err != nil {
home = os.Getenv("HOME")
}
if home == "" {
return fmt.Errorf("Unable to find home directory, please use PLIKRC environement variable")
return fmt.Errorf("Plikrc file %s not found", path)
}
configFile = home + "/.plikrc"
return LoadConfigFromFile(path)
}

// Stat file
_, err = os.Stat(configFile)
// Detect home dir
home, err := homedir.Dir()
if err != nil {
// File not found.
home = os.Getenv("HOME")
if home == "" {
home = "."
}
}

// Check if quiet mode ( you'll have to pass --server flag )
for _, arg := range os.Args[1:] {
if arg == "-q" || arg == "--quiet" {
return
}
// Load config file from ~/.plikrc
path = home + "/.plikrc"
_, err = os.Stat(path)
if err == nil {
err = LoadConfigFromFile(path)
if err == nil {
return
}
} else {

// Ask for domain
var domain string
fmt.Printf("Please enter your plik domain [default:http://127.0.0.1:8080] : ")
_, err := fmt.Scanf("%s", &domain)
// Load global config file from /etc directory
path = "/etc/plik/plikrc"
_, err = os.Stat(path)
if err == nil {
domain = strings.TrimRight(domain, "/")
parsedDomain, err := url.Parse(domain)
err = LoadConfigFromFile(path)
if err == nil {
if parsedDomain.Scheme == "" {
parsedDomain.Scheme = "http"
}
Config.URL = parsedDomain.String()
return
}
}

// Try to HEAD the site to see if we have a redirection
resp, err := http.Head(Config.URL)
if err != nil {
return err
}
}

finalURL := resp.Request.URL.String()
if finalURL != "" && finalURL != Config.URL {
fmt.Printf("We have been redirected to : %s\n", finalURL)
fmt.Printf("Replace current url (%s) with the new one ? [Y/n] ", Config.URL)
// Check if quiet mode ( you'll have to pass --server flag )
for _, arg := range os.Args[1:] {
if arg == "-q" || arg == "--quiet" {
return nil
}
}

input := "y"
fmt.Scanln(&input)
// Config file not found. Create one.
path = home + "/.plikrc"

if strings.HasPrefix(strings.ToLower(input), "y") {
Config.URL = strings.TrimSuffix(finalURL, "/")
// Ask for domain
var domain string
fmt.Println("Please enter your plik domain [default:http://127.0.0.1:8080] : ")
_, err = fmt.Scanf("%s", &domain)
if err == nil {
domain = strings.TrimRight(domain, "/")
parsedDomain, err := url.Parse(domain)
if err == nil {
if parsedDomain.Scheme == "" {
parsedDomain.Scheme = "http"
}
Config.URL = parsedDomain.String()
}
}

// Try to HEAD the site to see if we have a redirection
resp, err := http.Head(Config.URL)
if err != nil {
return err
}

finalURL := resp.Request.URL.String()
if finalURL != "" && finalURL != Config.URL {
fmt.Printf("We have been redirected to : %s\n", finalURL)
fmt.Printf("Replace current url (%s) with the new one ? [Y/n] ", Config.URL)

// Enable client updates ?
fmt.Printf("Do you want to enable client auto update ? [Y/n] ")
input := "y"
fmt.Scanln(&input)
if strings.HasPrefix(strings.ToLower(input), "y") {
Config.AutoUpdate = true
}

// Encode in toml
buf := new(bytes.Buffer)
if err = toml.NewEncoder(buf).Encode(Config); err != nil {
return fmt.Errorf("Failed to serialize ~/.plickrc : %s", err)
if strings.HasPrefix(strings.ToLower(input), "y") {
Config.URL = strings.TrimSuffix(finalURL, "/")
}
}

// Write file
f, err := os.OpenFile(configFile, os.O_CREATE|os.O_RDWR, 0700)
if err != nil {
return fmt.Errorf("Failed to save ~/.plickrc : %s", err)
}
// Enable client updates ?
fmt.Println("Do you want to enable client auto update ? [Y/n] ")
input := "y"
fmt.Scanln(&input)
if strings.HasPrefix(strings.ToLower(input), "y") {
Config.AutoUpdate = true
}

f.Write(buf.Bytes())
f.Close()
// Encode in TOML
buf := new(bytes.Buffer)
if err = toml.NewEncoder(buf).Encode(Config); err != nil {
return fmt.Errorf("Failed to serialize ~/.plickrc : %s", err)
}

fmt.Println("Plik client settings successfully saved to " + configFile)
} else {
// Load toml
if _, err := toml.DecodeFile(configFile, &Config); err != nil {
return fmt.Errorf("Failed to deserialize ~/.plickrc : %s", err)
}
// Write file
f, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR, 0700)
if err != nil {
return fmt.Errorf("Failed to save ~/.plickrc : %s", err)
}

f.Write(buf.Bytes())
f.Close()

fmt.Println("Plik client settings successfully saved to " + path)
return
}

Expand Down
6 changes: 5 additions & 1 deletion client/plik.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,11 @@ func main() {
ts.GetSize()

// Load config
config.Load()
err = config.Load()
if err != nil {
fmt.Printf("Unable to load configuration : %s\n", err)
os.Exit(1)
}

// Usage /!\ INDENT THIS WITH SPACES NOT TABS /!\
usage := `plik
Expand Down
6 changes: 5 additions & 1 deletion client/plik.sh
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,11 @@ TTL=0
#

PLIKRC=${PLIKRC-"$HOME/.plikrc"}
if [ -e "$PLIKRC" ]; then
if [ ! -f "$PLIKRC" ]; then
PLIKRC="/etc/plik/plikrc"
fi

if [ -f "$PLIKRC" ]; then
URL=$(grep URL $PLIKRC | grep -Po '(http[^\"]*)')
if [ "$URL" != "" ]; then
PLIK_URL=$URL
Expand Down
20 changes: 0 additions & 20 deletions client/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -393,26 +393,6 @@ grep "$URL/file/.*/.*/FILE1" $CLIENT_LOG >/dev/null 2>/dev/null

echo "OK"

#---------------------------------------------

echo -n " - quiet and no .plikrc : "

before
rm $PLIKRC
cp $SPECIMEN $TMPDIR/upload/FILE1
upload -q
test $(cat $CLIENT_LOG | wc -l) -eq 1
grep "$URL/file/.*/.*/FILE1" $CLIENT_LOG >/dev/null 2>/dev/null

before
rm $PLIKRC
cp $SPECIMEN $TMPDIR/upload/FILE1
upload --quiet
test $(cat $CLIENT_LOG | wc -l) -eq 1
grep "$URL/file/.*/.*/FILE1" $CLIENT_LOG >/dev/null 2>/dev/null

echo "OK"

###
# Tar archive
###
Expand Down

0 comments on commit c82d16c

Please sign in to comment.