func (c *initCmd) RunCommand(args []string) error { if len(args) > 0 { return cmdmain.ErrUsage } if c.newKey && c.keyId != "" { log.Fatal("--newkey and --gpgkey are mutually exclusive") } if c.userPass != "" { cc, err := c.clientConfigFromServer() if err != nil { return err } return c.writeConfig(cc) } var err error if c.newKey { c.secretRing = osutil.DefaultSecretRingFile() c.keyId, err = jsonsign.GenerateNewSecRing(c.secretRing) if err != nil { return err } } else { if err := c.initSecretRing(); err != nil { return err } if err := c.initKeyId(); err != nil { return err } } pubArmor, err := c.getPublicKeyArmored() if err != nil { return err } bref := blob.SHA1FromString(string(pubArmor)) log.Printf("Your Camlistore identity (your GPG public key's blobref) is: %s", bref.String()) if c.noconfig { return nil } return c.writeConfig(&clientconfig.Config{ Servers: map[string]*clientconfig.Server{ "localhost": { Server: "http://localhost:3179", IsDefault: true, Auth: "localhost", }, }, Identity: c.keyId, IgnoredFiles: []string{".DS_Store"}, }) }
func (c *initCmd) RunCommand(args []string) error { if len(args) > 0 { return cmdmain.ErrUsage } var err error if c.dumpJSON { type jsonConfig struct { Identity_secring *jsonsign.IdentitySecring Client_config *clientconfig.Config Server_config *serverconfig.Config } var config jsonConfig // generate a new secring struct config.Identity_secring, err = jsonsign.GenerateNewSecRingStruct() if err != nil { return err } c.keyId = config.Identity_secring.KeyId // generate a new server config struct config.Server_config = GenerateServerConfig(c.keyId) // generate a new client config struct config.Client_config = GenerateClientConfig(c.keyId) jsonBytes, err := json.MarshalIndent(config, "", " ") if err != nil { log.Fatalf("JSON serialization error: %v", err) } //log.Printf("%+#v\n", string(jsonBytes)) _, err = os.Stdout.Write(jsonBytes) return err } if c.newKey && c.keyId != "" { log.Fatal("--newkey and --gpgkey are mutually exclusive") } if c.newKey { c.secretRing = osutil.DefaultSecretRingFile() c.keyId, err = jsonsign.GenerateNewSecRing(c.secretRing) if err != nil { return err } } else { if err := c.initSecretRing(); err != nil { return err } if err := c.initKeyId(); err != nil { return err } } pubArmor, err := c.getPublicKeyArmored() if err != nil { return err } bref := blob.SHA1FromString(string(pubArmor)) log.Printf("Your Camlistore identity (your GPG public key's blobref) is: %s", bref.String()) if c.noconfig { return nil } configFilePath := osutil.UserClientConfigPath() _, err = os.Stat(configFilePath) if err == nil { log.Fatalf("Config file %q already exists; quitting without touching it.", configFilePath) } if err := os.MkdirAll(filepath.Dir(configFilePath), 0700); err != nil { return err } if f, err := os.OpenFile(configFilePath, os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0600); err == nil { defer f.Close() // refactored to a service routine m := GenerateClientConfig(c.keyId) jsonBytes, err := json.MarshalIndent(m, "", " ") if err != nil { log.Fatalf("JSON serialization error: %v", err) } _, err = f.Write(jsonBytes) if err != nil { log.Fatalf("Error writing to %q: %v", configFilePath, err) } log.Printf("Wrote %q; modify as necessary.", configFilePath) } else { return fmt.Errorf("could not write client config file %v: %v", configFilePath, err) } return nil }
func (c *initCmd) RunCommand(args []string) error { if len(args) > 0 { return cmdmain.ErrUsage } if c.newKey && c.keyId != "" { log.Fatal("--newkey and --gpgkey are mutually exclusive") } var err error if c.newKey { c.secretRing = osutil.DefaultSecretRingFile() c.keyId, err = jsonsign.GenerateNewSecRing(c.secretRing) if err != nil { return err } } else { if err := c.initSecretRing(); err != nil { return err } if err := c.initKeyId(); err != nil { return err } } pubArmor, err := c.getPublicKeyArmored() if err != nil { return err } bref := blob.SHA1FromString(string(pubArmor)) log.Printf("Your Camlistore identity (your GPG public key's blobref) is: %s", bref.String()) if c.noconfig { return nil } configFilePath := osutil.UserClientConfigPath() _, err = os.Stat(configFilePath) if err == nil { log.Fatalf("Config file %q already exists; quitting without touching it.", configFilePath) } if err := os.MkdirAll(filepath.Dir(configFilePath), 0700); err != nil { return err } if f, err := os.OpenFile(configFilePath, os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0600); err == nil { defer f.Close() m := &clientconfig.Config{ Servers: map[string]*clientconfig.Server{ "localhost": { Server: "http://localhost:3179", IsDefault: true, Auth: "localhost", }, }, Identity: c.keyId, IgnoredFiles: []string{".DS_Store"}, } jsonBytes, err := json.MarshalIndent(m, "", " ") if err != nil { log.Fatalf("JSON serialization error: %v", err) } _, err = f.Write(jsonBytes) if err != nil { log.Fatalf("Error writing to %q: %v", configFilePath, err) } log.Printf("Wrote %q; modify as necessary.", configFilePath) } else { return fmt.Errorf("could not write client config file %v: %v", configFilePath, err) } return nil }
"flag" "fmt" "log" "net/http" "time" "golang.org/x/net/http2" "camlistore.org/pkg/gpgchallenge" "camlistore.org/pkg/httputil" "camlistore.org/pkg/osutil" ) var ( flagPort = flag.Int("p", 443, "port that the server will challenge us on.") flagKeyRing = flag.String("keyring", osutil.DefaultSecretRingFile(), "path to the GPG keyring file") flagKeyID = flag.String("keyid", "", "GPG key ID") flagClaimedIP = flag.String("ip", "", "IP address to prove control over") flagServer = flag.String("server", "camnetdns.camlistore.org", "server we want to run the challenge against") ) func main() { flag.Parse() if *flagKeyID == "" { log.Fatal("you need to specify -keyid") } if *flagClaimedIP == "" { log.Fatal("you need to specify -ip") }