/*
NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2022 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2016-2023 Sergey Matveev <stargrave@stargrave.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
package nncp
import (
+ "errors"
"fmt"
- "io/ioutil"
+ "io/fs"
"os"
"path/filepath"
"sort"
if strings.HasSuffix(dst[len(dst)-1], "prv") {
mode = os.FileMode(0600)
}
- return ioutil.WriteFile(filepath.Join(dst...), []byte(r+"\n"), mode)
+ return os.WriteFile(filepath.Join(dst...), []byte(r+"\n"), mode)
}
func cfgDirTouch(dst ...string) error {
}
}
+ if len(cfg.YggdrasilAliases) > 0 {
+ if err = cfgDirMkdir(dst, "yggdrasil-aliases"); err != nil {
+ return
+ }
+ for alias, v := range cfg.YggdrasilAliases {
+ if err = cfgDirSave(v, dst, "yggdrasil-aliases", alias); err != nil {
+ return
+ }
+ }
+ }
+
return
}
func cfgDirLoad(src ...string) (v string, exists bool, err error) {
- b, err := ioutil.ReadFile(filepath.Join(src...))
+ b, err := os.ReadFile(filepath.Join(src...))
if err != nil {
- if os.IsNotExist(err) {
+ if errors.Is(err, fs.ErrNotExist) {
return "", false, nil
}
return "", false, err
cfg.MCDRxIfis = strings.Split(*sp, "\n")
}
- fis, err := ioutil.ReadDir(filepath.Join(src, "mcd-send"))
- if err != nil && !os.IsNotExist(err) {
+ fis, err := os.ReadDir(filepath.Join(src, "mcd-send"))
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
if len(fis) > 0 {
if n[0] == '.' {
continue
}
- b, err := ioutil.ReadFile(filepath.Join(src, "mcd-send", fi.Name()))
+ b, err := os.ReadFile(filepath.Join(src, "mcd-send", fi.Name()))
if err != nil {
return nil, err
}
return nil, err
}
}
- fis, err = ioutil.ReadDir(filepath.Join(src, "notify", "exec"))
- if err != nil && !os.IsNotExist(err) {
+ fis, err = os.ReadDir(filepath.Join(src, "notify", "exec"))
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
for _, fi := range fis {
cfg.Notify = ¬ify
}
- if _, err = ioutil.ReadDir(filepath.Join(src, "self")); err == nil {
+ if _, err = os.ReadDir(filepath.Join(src, "self")); err == nil {
self := NodeOurJSON{}
if self.Id, err = cfgDirLoadMust(src, "self", "id"); err != nil {
return nil, err
return nil, err
}
cfg.Self = &self
- } else if !os.IsNotExist(err) {
+ } else if !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
cfg.Neigh = make(map[string]NodeJSON)
- fis, err = ioutil.ReadDir(filepath.Join(src, "neigh"))
- if err != nil && !os.IsNotExist(err) {
+ fis, err = os.ReadDir(filepath.Join(src, "neigh"))
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
for _, fi := range fis {
}
node.Exec = make(map[string][]string)
- fis2, err := ioutil.ReadDir(filepath.Join(src, "neigh", n, "exec"))
- if err != nil && !os.IsNotExist(err) {
+ fis2, err := os.ReadDir(filepath.Join(src, "neigh", n, "exec"))
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
for _, fi2 := range fis2 {
}
node.Addrs = make(map[string]string)
- fis2, err = ioutil.ReadDir(filepath.Join(src, "neigh", n, "addrs"))
- if err != nil && !os.IsNotExist(err) {
+ fis2, err = os.ReadDir(filepath.Join(src, "neigh", n, "addrs"))
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
for _, fi2 := range fis2 {
node.MaxOnlineTime = &i
}
- fis2, err = ioutil.ReadDir(filepath.Join(src, "neigh", n, "calls"))
- if err != nil && !os.IsNotExist(err) {
+ fis2, err = os.ReadDir(filepath.Join(src, "neigh", n, "calls"))
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
callsIdx := make([]int, 0, len(fis2))
}
cfg.Areas = make(map[string]AreaJSON)
- fis, err = ioutil.ReadDir(filepath.Join(src, "areas"))
- if err != nil && !os.IsNotExist(err) {
+ fis, err = os.ReadDir(filepath.Join(src, "areas"))
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
for _, fi := range fis {
}
area.Exec = make(map[string][]string)
- fis2, err := ioutil.ReadDir(filepath.Join(src, "areas", n, "exec"))
- if err != nil && !os.IsNotExist(err) {
+ fis2, err := os.ReadDir(filepath.Join(src, "areas", n, "exec"))
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
for _, fi2 := range fis2 {
cfg.Areas[n] = area
}
+ fis, err = os.ReadDir(filepath.Join(src, "yggdrasil-aliases"))
+ if err != nil && !errors.Is(err, fs.ErrNotExist) {
+ return nil, err
+ }
+ if len(fis) > 0 {
+ cfg.YggdrasilAliases = make(map[string]string, len(fis))
+ }
+ for _, fi := range fis {
+ n := fi.Name()
+ if n[0] == '.' {
+ continue
+ }
+ b, err := os.ReadFile(filepath.Join(src, "yggdrasil-aliases", fi.Name()))
+ if err != nil {
+ return nil, err
+ }
+ cfg.YggdrasilAliases[n] = strings.TrimSuffix(string(b), "\n")
+ }
+
return &cfg, nil
}