...

Source file src/codeberg.org/tslocum/sshtargate/config.go

Documentation: codeberg.org/tslocum/sshtargate

     1  package main
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"os"
     7  	"path"
     8  	"path/filepath"
     9  
    10  	"gopkg.in/yaml.v2"
    11  )
    12  
    13  type portalConfig struct {
    14  	Command string
    15  	Host    []string `yaml:",flow"`
    16  }
    17  
    18  type appConfig struct {
    19  	Portals map[string]*portalConfig
    20  }
    21  
    22  var config = &appConfig{}
    23  
    24  func defaultConfigPath() (string, error) {
    25  	homedir, err := os.UserHomeDir()
    26  	if err != nil {
    27  		return "", err
    28  	} else if homedir == "" {
    29  		return "", errors.New("a blank path to user homedir was returned")
    30  	}
    31  
    32  	dir := path.Join(homedir, ".config", "sshtargate")
    33  	_, err = os.Stat(path.Join(dir, "config.yaml"))
    34  	if err == nil {
    35  		return path.Join(dir, "config.yaml"), nil
    36  	}
    37  
    38  	_, err = os.Stat(path.Join(dir, "config.yml"))
    39  	if err == nil {
    40  		return path.Join(dir, "config.yml"), nil
    41  	}
    42  
    43  	return path.Join(dir, "config.yaml"), nil
    44  }
    45  
    46  func serializeConfig(path string) error {
    47  	if path == "" {
    48  		return errors.New("failed to serialize: no path specified")
    49  
    50  	}
    51  
    52  	out, err := yaml.Marshal(config)
    53  	if err != nil {
    54  		return fmt.Errorf("failed to marshal configuration: %s", err)
    55  	}
    56  
    57  	os.MkdirAll(filepath.Dir(path), 0755)
    58  	err = os.WriteFile(path, out, 0644)
    59  	if err != nil {
    60  		return fmt.Errorf("failed to write to %s: %s", path, err)
    61  	}
    62  
    63  	return nil
    64  }
    65  
    66  func deserializeConfig(path string) error {
    67  	if path == "" {
    68  		return errors.New("failed to deserialize: no path specified")
    69  	}
    70  
    71  	_, err := os.Stat(path)
    72  	if os.IsNotExist(err) {
    73  		return nil
    74  	}
    75  
    76  	configData, err := os.ReadFile(path)
    77  	if err != nil {
    78  		return fmt.Errorf("failed to read file: %s", err)
    79  	}
    80  
    81  	err = yaml.Unmarshal(configData, config)
    82  	if err != nil {
    83  		return fmt.Errorf("failed to parse file: %s", err)
    84  	}
    85  
    86  	return nil
    87  }
    88  

View as plain text