2 changed files with 114 additions and 0 deletions
@ -0,0 +1,76 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"os" |
||||
|
"os/user" |
||||
|
"path/filepath" |
||||
|
"strings" |
||||
|
|
||||
|
flags "github.com/jessevdk/go-flags" |
||||
|
"github.com/roasbeef/btcutil" |
||||
|
) |
||||
|
|
||||
|
const ( |
||||
|
defaultConfigFilename = "lnd.conf" |
||||
|
defaultTLSCertFilename = "tls.cert" |
||||
|
defaultAdminMacFilename = "admin.macaroon" |
||||
|
) |
||||
|
|
||||
|
var ( |
||||
|
defaultLndDir = btcutil.AppDataDir("lnd", false) |
||||
|
defaultConfigFile = filepath.Join(defaultLndDir, defaultConfigFilename) |
||||
|
defaultTLSCertPath = filepath.Join(defaultLndDir, defaultTLSCertFilename) |
||||
|
defaultAdminMacPath = filepath.Join(defaultLndDir, defaultAdminMacFilename) |
||||
|
) |
||||
|
|
||||
|
// config defines the configuration options for lnd.
|
||||
|
//
|
||||
|
// See loadConfig for further details regarding the configuration
|
||||
|
// loading+parsing process.
|
||||
|
type config struct { |
||||
|
LndDir string `long:"lnddir" description:"The base directory that contains lnd's data, logs, configuration file, etc."` |
||||
|
ConfigFile string `long:"C" long:"configfile" description:"Path to configuration file"` |
||||
|
TLSCertPath string `long:"tlscertpath" description:"Path to write the TLS certificate for lnd's RPC and REST services"` |
||||
|
AdminMacPath string `long:"adminmacaroonpath" description:"Path to write the admin macaroon for lnd's RPC and REST services if it doesn't exist"` |
||||
|
} |
||||
|
|
||||
|
func loadConfig() (*config, error) { |
||||
|
defaultCfg := config{ |
||||
|
LndDir: defaultLndDir, |
||||
|
ConfigFile: defaultConfigFile, |
||||
|
TLSCertPath: defaultTLSCertPath, |
||||
|
AdminMacPath: defaultAdminMacPath, |
||||
|
} |
||||
|
|
||||
|
cfg := defaultCfg |
||||
|
configFile := cleanAndExpandPath(defaultCfg.ConfigFile) |
||||
|
flags.IniParse(configFile, &cfg) |
||||
|
|
||||
|
cfg.TLSCertPath = cleanAndExpandPath(cfg.TLSCertPath) |
||||
|
cfg.AdminMacPath = cleanAndExpandPath(cfg.AdminMacPath) |
||||
|
|
||||
|
return &cfg, nil |
||||
|
} |
||||
|
|
||||
|
// cleanAndExpandPath expands environment variables and leading ~ in the
|
||||
|
// passed path, cleans the result, and returns it.
|
||||
|
// This function is taken from https://github.com/btcsuite/btcd
|
||||
|
func cleanAndExpandPath(path string) string { |
||||
|
// Expand initial ~ to OS specific home directory.
|
||||
|
if strings.HasPrefix(path, "~") { |
||||
|
var homeDir string |
||||
|
|
||||
|
user, err := user.Current() |
||||
|
if err == nil { |
||||
|
homeDir = user.HomeDir |
||||
|
} else { |
||||
|
homeDir = os.Getenv("HOME") |
||||
|
} |
||||
|
|
||||
|
path = strings.Replace(path, "~", homeDir, 1) |
||||
|
} |
||||
|
|
||||
|
// NOTE: The os.ExpandEnv doesn't work with Windows-style %VARIABLE%,
|
||||
|
// but the variables can still be expanded via POSIX-style $VARIABLE.
|
||||
|
return filepath.Clean(os.ExpandEnv(path)) |
||||
|
} |
@ -0,0 +1,38 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"fmt" |
||||
|
"io/ioutil" |
||||
|
"github.com/Baozisoftware/qrcode-terminal-go" |
||||
|
"encoding/json" |
||||
|
b64 "encoding/base64" |
||||
|
) |
||||
|
|
||||
|
type certificates struct { |
||||
|
Cert string `json:"c"` |
||||
|
Macaroon string `json:"m"` |
||||
|
} |
||||
|
|
||||
|
func main() { |
||||
|
loadedConfig, _ := loadConfig() |
||||
|
|
||||
|
certBytes, err := ioutil.ReadFile(loadedConfig.TLSCertPath) |
||||
|
if err != nil { |
||||
|
fmt.Print(err) |
||||
|
} |
||||
|
|
||||
|
macBytes, err := ioutil.ReadFile(loadedConfig.AdminMacPath) |
||||
|
if err != nil { |
||||
|
fmt.Print(err) |
||||
|
} |
||||
|
|
||||
|
sEnc := b64.StdEncoding.EncodeToString([]byte(macBytes)) |
||||
|
|
||||
|
cert := &certificates{ |
||||
|
Cert: string(certBytes), |
||||
|
Macaroon: sEnc} |
||||
|
certB, _ := json.Marshal(cert) |
||||
|
|
||||
|
obj := qrcodeTerminal.New() |
||||
|
obj.Get(string(certB)).Print() |
||||
|
} |
Loading…
Reference in new issue