cleaned up ipfs init

This commit is contained in:
Juan Batiz-Benet 2014-11-15 22:50:42 -08:00
parent e857a5bc9f
commit 7596bcce2d

View File

@ -50,40 +50,112 @@ var initCmd = &cmds.Command{
nBitsForKeypair = 4096
}
return nil, doInit(req.Context().ConfigRoot, dspathOverride, force, nBitsForKeypair)
return doInit(req.Context().ConfigRoot, dspathOverride, force, nBitsForKeypair)
},
}
var errCannotInitConfigExists = errors.New(`ipfs configuration file already exists!
Reinitializing would overwrite your keys.
(use -f to force overwrite)
`)
var welcomeMsg = `Hello and Welcome to IPFS!
If you're seeing this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!
For a short demo of what you can do, enter 'ipfs tour'
`
// TODO add default welcome hash: eaa68bedae247ed1e5bd0eb4385a3c0959b976e4
// NB: if dspath is not provided, it will be retrieved from the config
func doInit(configRoot string, dspathOverride string, force bool, nBitsForKeypair int) error {
func doInit(configRoot string, dspathOverride string, force bool, nBitsForKeypair int) (interface{}, error) {
u.POut("initializing ipfs node at %s\n", configRoot)
configFilename, err := config.Filename(configRoot)
if err != nil {
return errors.New("Couldn't get home directory path")
return nil, errors.New("Couldn't get home directory path")
}
fi, err := os.Lstat(configFilename)
if fi != nil || (err != nil && !os.IsNotExist(err)) {
if !force {
// TODO multi-line string
return errors.New("ipfs configuration file already exists!\nReinitializing would overwrite your keys.\n(use -f to force overwrite)")
return nil, errCannotInitConfigExists
}
}
conf, err := initConfig(configFilename, dspathOverride, nBitsForKeypair)
if err != nil {
return nil, err
}
nd, err := core.NewIpfsNode(conf, false)
if err != nil {
return nil, err
}
defer nd.Close()
// Set up default file
reader := bytes.NewBufferString(welcomeMsg)
defnd, err := imp.BuildDagFromReader(reader, nd.DAG, nd.Pinning.GetManual(), chunk.DefaultSplitter)
if err != nil {
return nil, err
}
k, _ := defnd.Key()
fmt.Printf("done.\nto test, enter: ipfs cat %s\n", k)
return nil, nil
}
func datastoreConfig(dspath string) (config.Datastore, error) {
ds := config.Datastore{}
if len(dspath) == 0 {
var err error
dspath, err = config.DataStorePath("")
if err != nil {
return ds, err
}
}
ds.Path = dspath
ds.Type = "leveldb"
// Construct the data store if missing
if err := os.MkdirAll(dspath, os.ModePerm); err != nil {
return ds, err
}
// Check the directory is writeable
if f, err := os.Create(filepath.Join(dspath, "._check_writeable")); err == nil {
os.Remove(f.Name())
} else {
return ds, errors.New("Datastore '" + dspath + "' is not writeable")
}
return ds, nil
}
func initConfig(configFilename string, dspathOverride string, nBitsForKeypair int) (*config.Config, error) {
ds, err := datastoreConfig(dspathOverride)
if err != nil {
return err
return nil, err
}
identity, err := identityConfig(nBitsForKeypair)
if err != nil {
return err
return nil, err
}
conf := config.Config{
conf := &config.Config{
// setup the node addresses.
Addresses: config.Addresses{
@ -114,61 +186,11 @@ func doInit(configRoot string, dspathOverride string, force bool, nBitsForKeypai
Version: config.VersionDefaultValue(),
}
err = config.WriteConfigFile(configFilename, conf)
if err != nil {
return err
if err := config.WriteConfigFile(configFilename, conf); err != nil {
return nil, err
}
nd, err := core.NewIpfsNode(&conf, false)
if err != nil {
return err
}
defer nd.Close()
// Set up default file
msg := `Hello and Welcome to IPFS!
If you're seeing this, that means that you have successfully
installed ipfs and are now interfacing with the wonderful
world of DAGs and hashes!
`
reader := bytes.NewBufferString(msg)
defnd, err := imp.BuildDagFromReader(reader, nd.DAG, nd.Pinning.GetManual(), chunk.DefaultSplitter)
if err != nil {
return err
}
k, _ := defnd.Key()
fmt.Printf("Default file key: %s\n", k)
return nil
}
func datastoreConfig(dspath string) (config.Datastore, error) {
ds := config.Datastore{}
if len(dspath) == 0 {
var err error
dspath, err = config.DataStorePath("")
if err != nil {
return ds, err
}
}
ds.Path = dspath
ds.Type = "leveldb"
// Construct the data store if missing
if err := os.MkdirAll(dspath, os.ModePerm); err != nil {
return ds, err
}
// Check the directory is writeable
if f, err := os.Create(filepath.Join(dspath, "._check_writeable")); err == nil {
os.Remove(f.Name())
} else {
return ds, errors.New("Datastore '" + dspath + "' is not writeable")
}
return ds, nil
return conf, nil
}
func identityConfig(nbits int) (config.Identity, error) {
@ -178,7 +200,7 @@ func identityConfig(nbits int) (config.Identity, error) {
return ident, errors.New("Bitsize less than 1024 is considered unsafe.")
}
fmt.Println("generating key pair...")
fmt.Printf("generating key pair...")
sk, pk, err := ci.GenerateKeyPair(ci.RSA, nbits)
if err != nil {
return ident, err