func initCmd(c *commander.Command, inp []string) error { filename, err := config.Filename(config.DefaultConfigFilePath) if err != nil { return errors.New("Couldn't get home directory path") } fi, err := os.Lstat(filename) force := c.Flag.Lookup("f").Value.Get().(bool) if fi != nil || (err != nil && !os.IsNotExist(err)) && !force { return errors.New("ipfs configuration file already exists!\nReinitializing would overwrite your keys.\n(use -f to force overwrite)") } cfg := new(config.Config) cfg.Datastore = config.Datastore{} dspath, err := u.TildeExpansion("~/.go-ipfs/datastore") if err != nil { return err } cfg.Datastore.Path = dspath cfg.Datastore.Type = "leveldb" cfg.Identity = new(config.Identity) // This needs thought // cfg.Identity.Address = "" nbits := c.Flag.Lookup("b").Value.Get().(int) if nbits < 1024 { return errors.New("Bitsize less than 1024 is considered unsafe.") } sk, pk, err := ci.GenerateKeyPair(ci.RSA, nbits) if err != nil { return err } // pretend to encrypt key, then store it unencrypted skbytes, err := sk.Bytes() if err != nil { return err } cfg.Identity.PrivKey = base64.StdEncoding.EncodeToString(skbytes) id, err := identify.IDFromPubKey(pk) if err != nil { return err } cfg.Identity.PeerID = id.Pretty() path, err := u.TildeExpansion(config.DefaultConfigFilePath) if err != nil { return err } err = config.WriteConfigFile(path, cfg) if err != nil { return err } return nil }
func configCmd(c *commander.Command, inp []string) error { // todo: implement --config filename flag. filename, err := config.Filename("") if err != nil { return err } // if editing, open the editor if c.Flag.Lookup("edit").Value.Get().(bool) { return configEditor(filename) } // if showing, cat the file if c.Flag.Lookup("show").Value.Get().(bool) { return configCat(filename) } if len(inp) == 0 { // "ipfs config" run without parameters u.POut(c.Long) return nil } // Getter (1 param) if len(inp) == 1 { value, err := config.ReadConfigKey(filename, inp[0]) if err != nil { return fmt.Errorf("Failed to get config value: %s", err) } strval, ok := value.(string) if ok { u.POut("%s\n", strval) return nil } if err := config.Encode(os.Stdout, value); err != nil { return fmt.Errorf("Failed to encode config value: %s", err) } u.POut("\n") return nil } // Setter (>1 params) err = config.WriteConfigKey(filename, inp[0], inp[1]) if err != nil { return fmt.Errorf("Failed to set config value: %s", err) } return nil }