]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/cfgdir.go
self section is optional in nncp-cfgdir
[nncp.git] / src / cfgdir.go
index afe7b40eadab34d16fd7f460aa176bb8181906af..a68699173cce1ffbe6f9856a30fb028e35e34cb5 100644 (file)
@@ -168,29 +168,31 @@ func CfgToDir(dst string, cfg *CfgJSON) (err error) {
                }
        }
 
-       if err = cfgDirMkdir(dst, "self"); err != nil {
-               return
-       }
-       if err = cfgDirSave(cfg.Self.Id, dst, "self", "id"); err != nil {
-               return
-       }
-       if err = cfgDirSave(cfg.Self.ExchPub, dst, "self", "exchpub"); err != nil {
-               return
-       }
-       if err = cfgDirSave(cfg.Self.ExchPrv, dst, "self", "exchprv"); err != nil {
-               return
-       }
-       if err = cfgDirSave(cfg.Self.SignPub, dst, "self", "signpub"); err != nil {
-               return
-       }
-       if err = cfgDirSave(cfg.Self.SignPrv, dst, "self", "signprv"); err != nil {
-               return
-       }
-       if err = cfgDirSave(cfg.Self.NoisePub, dst, "self", "noisepub"); err != nil {
-               return
-       }
-       if err = cfgDirSave(cfg.Self.NoisePrv, dst, "self", "noiseprv"); err != nil {
-               return
+       if cfg.Self != nil {
+               if err = cfgDirMkdir(dst, "self"); err != nil {
+                       return
+               }
+               if err = cfgDirSave(cfg.Self.Id, dst, "self", "id"); err != nil {
+                       return
+               }
+               if err = cfgDirSave(cfg.Self.ExchPub, dst, "self", "exchpub"); err != nil {
+                       return
+               }
+               if err = cfgDirSave(cfg.Self.ExchPrv, dst, "self", "exchprv"); err != nil {
+                       return
+               }
+               if err = cfgDirSave(cfg.Self.SignPub, dst, "self", "signpub"); err != nil {
+                       return
+               }
+               if err = cfgDirSave(cfg.Self.SignPrv, dst, "self", "signprv"); err != nil {
+                       return
+               }
+               if err = cfgDirSave(cfg.Self.NoisePub, dst, "self", "noisepub"); err != nil {
+                       return
+               }
+               if err = cfgDirSave(cfg.Self.NoisePrv, dst, "self", "noiseprv"); err != nil {
+                       return
+               }
        }
 
        for name, n := range cfg.Neigh {
@@ -569,29 +571,33 @@ func DirToCfg(src string) (*CfgJSON, error) {
                cfg.Notify = &notify
        }
 
-       self := NodeOurJSON{}
-       if self.Id, err = cfgDirLoadMust(src, "self", "id"); err != nil {
-               return nil, err
-       }
-       if self.ExchPub, err = cfgDirLoadMust(src, "self", "exchpub"); err != nil {
-               return nil, err
-       }
-       if self.ExchPrv, err = cfgDirLoadMust(src, "self", "exchprv"); err != nil {
-               return nil, err
-       }
-       if self.SignPub, err = cfgDirLoadMust(src, "self", "signpub"); err != nil {
-               return nil, err
-       }
-       if self.SignPrv, err = cfgDirLoadMust(src, "self", "signprv"); err != nil {
-               return nil, err
-       }
-       if self.NoisePub, err = cfgDirLoadMust(src, "self", "noisepub"); err != nil {
-               return nil, err
-       }
-       if self.NoisePrv, err = cfgDirLoadMust(src, "self", "noiseprv"); err != nil {
+       if _, err = ioutil.ReadDir(filepath.Join(src, "self")); err == nil {
+               self := NodeOurJSON{}
+               if self.Id, err = cfgDirLoadMust(src, "self", "id"); err != nil {
+                       return nil, err
+               }
+               if self.ExchPub, err = cfgDirLoadMust(src, "self", "exchpub"); err != nil {
+                       return nil, err
+               }
+               if self.ExchPrv, err = cfgDirLoadMust(src, "self", "exchprv"); err != nil {
+                       return nil, err
+               }
+               if self.SignPub, err = cfgDirLoadMust(src, "self", "signpub"); err != nil {
+                       return nil, err
+               }
+               if self.SignPrv, err = cfgDirLoadMust(src, "self", "signprv"); err != nil {
+                       return nil, err
+               }
+               if self.NoisePub, err = cfgDirLoadMust(src, "self", "noisepub"); err != nil {
+                       return nil, err
+               }
+               if self.NoisePrv, err = cfgDirLoadMust(src, "self", "noiseprv"); err != nil {
+                       return nil, err
+               }
+               cfg.Self = &self
+       } else if !os.IsNotExist(err) {
                return nil, err
        }
-       cfg.Self = &self
 
        cfg.Neigh = make(map[string]NodeJSON)
        fis, err = ioutil.ReadDir(filepath.Join(src, "neigh"))