func followAdd(c *cli.Context) error { if c.NArg() < 2 { log.Fatal("Please give a group-definition, an ID, and optionally a service-name of the skipchain to follow") } cfg, _ := loadConfig(c) group := getGroup(c) idBytes, err := hex.DecodeString(c.Args().Get(1)) log.ErrFatal(err) id := identity.ID(idBytes) newID, err := identity.NewIdentityFromCothority(group.Roster, id) log.ErrFatal(err) if c.NArg() == 3 { newID.DeviceName = c.Args().Get(2) } else { var err error newID.DeviceName, err = os.Hostname() log.ErrFatal(err) log.Info("Using", newID.DeviceName, "as the device-name.") } cfg.Follow = append(cfg.Follow, newID) cfg.writeAuthorizedKeys(c) // Identity needs to exist, else saving/loading will fail. For // followers it doesn't matter if the identity will be overwritten, // as it is not used. cfg.Identity = newID return cfg.saveConfig(c) }
func followDel(c *cli.Context) error { if c.NArg() != 1 { log.Fatal("Please give id of skipchain to unfollow") } cfg := loadConfigOrFail(c) idBytes, err := hex.DecodeString(c.Args().First()) log.ErrFatal(err) idDel := identity.ID(idBytes) newSlice := cfg.Follow[:0] for _, id := range cfg.Follow { if !bytes.Equal(id.ID, idDel) { newSlice = append(newSlice, id) } } cfg.Follow = newSlice cfg.writeAuthorizedKeys(c) return cfg.saveConfig(c) }
func idConnect(c *cli.Context) error { log.Info("Connecting") name, err := os.Hostname() log.ErrFatal(err) switch c.NArg() { case 2: // We'll get all arguments after case 3: name = c.Args().Get(2) default: log.Fatal("Please give the following arguments: group.toml id [hostname]", c.NArg()) } group := getGroup(c) idBytes, err := hex.DecodeString(c.Args().Get(1)) log.ErrFatal(err) id := identity.ID(idBytes) cfg := &ciscConfig{Identity: identity.NewIdentity(group.Roster, 0, name)} cfg.AttachToIdentity(id) log.Infof("Public key: %s", cfg.Proposed.Device[cfg.DeviceName].Point.String()) return cfg.saveConfig(c) }