diff --git a/central_auth.go b/central_auth.go index 3a3a6ef..ecd0ac1 100644 --- a/central_auth.go +++ b/central_auth.go @@ -1,6 +1,7 @@ package steward import ( + "bytes" "fmt" "log" "os" @@ -13,21 +14,21 @@ import ( type signatureBase32 string type argsString string type centralAuth struct { - schema map[Node]map[argsString]signatureBase32 - nodePublicKeys *nodePublicKeys - configuration *Configuration - db *bolt.DB - bucketPublicKeys string - errorKernel *errorKernel + // schema map[Node]map[argsString]signatureBase32 + nodePublicKeys *nodePublicKeys + configuration *Configuration + db *bolt.DB + bucketNamePublicKeys string + errorKernel *errorKernel } func newCentralAuth(configuration *Configuration, errorKernel *errorKernel) *centralAuth { c := centralAuth{ - schema: make(map[Node]map[argsString]signatureBase32), - nodePublicKeys: newNodePublicKeys(configuration), - configuration: configuration, - bucketPublicKeys: "publicKeys", - errorKernel: errorKernel, + // schema: make(map[Node]map[argsString]signatureBase32), + nodePublicKeys: newNodePublicKeys(configuration), + configuration: configuration, + bucketNamePublicKeys: "publicKeys", + errorKernel: errorKernel, } databaseFilepath := filepath.Join(configuration.DatabaseFolder, "auth.db") @@ -66,14 +67,14 @@ func (c *centralAuth) addPublicKey(proc process, msg Message) { // Check if a key for the current node already exists in the map. existingKey, ok := c.nodePublicKeys.KeyMap[msg.FromNode] - if ok && existingKey == string(msg.Data) { + if ok && bytes.Equal(existingKey, msg.Data) { fmt.Printf(" * key value for node %v is the same, doing nothing\n", msg.FromNode) c.nodePublicKeys.mu.Unlock() return } // New key - c.nodePublicKeys.KeyMap[msg.FromNode] = string(msg.Data) + c.nodePublicKeys.KeyMap[msg.FromNode] = msg.Data c.nodePublicKeys.mu.Unlock() // Add key to persistent storage. @@ -99,9 +100,9 @@ func (c *centralAuth) dbGetPublicKey(node string) ([]byte, error) { // View is a help function to get values out of the database. err := c.db.View(func(tx *bolt.Tx) error { //Open a bucket to get key's and values from. - bu := tx.Bucket([]byte(c.bucketPublicKeys)) + bu := tx.Bucket([]byte(c.bucketNamePublicKeys)) if bu == nil { - log.Printf("info: no db bucket exist: %v\n", c.bucketPublicKeys) + log.Printf("info: no db bucket exist: %v\n", c.bucketNamePublicKeys) return nil } @@ -123,7 +124,7 @@ func (c *centralAuth) dbGetPublicKey(node string) ([]byte, error) { func (c *centralAuth) dbUpdatePublicKey(node string, value []byte) error { err := c.db.Update(func(tx *bolt.Tx) error { //Create a bucket - bu, err := tx.CreateBucketIfNotExists([]byte(c.bucketPublicKeys)) + bu, err := tx.CreateBucketIfNotExists([]byte(c.bucketNamePublicKeys)) if err != nil { return fmt.Errorf("error: CreateBuckerIfNotExists failed: %v", err) } @@ -144,11 +145,11 @@ func (c *centralAuth) dbUpdatePublicKey(node string, value []byte) error { // bucket if it exists. func (c *centralAuth) dbDeletePublicKey(key string) error { err := c.db.Update(func(tx *bolt.Tx) error { - bu := tx.Bucket([]byte(c.bucketPublicKeys)) + bu := tx.Bucket([]byte(c.bucketNamePublicKeys)) err := bu.Delete([]byte(key)) if err != nil { - log.Printf("error: delete key in bucket %v failed: %v\n", c.bucketPublicKeys, err) + log.Printf("error: delete key in bucket %v failed: %v\n", c.bucketNamePublicKeys, err) } return nil @@ -159,18 +160,18 @@ func (c *centralAuth) dbDeletePublicKey(key string) error { // dumpBucket will dump out all they keys and values in the // specified bucket, and return a sorted []samDBValue -func (c *centralAuth) dbDumpPublicKey() (map[Node]string, error) { - m := make(map[Node]string) +func (c *centralAuth) dbDumpPublicKey() (map[Node][]byte, error) { + m := make(map[Node][]byte) err := c.db.View(func(tx *bolt.Tx) error { - bu := tx.Bucket([]byte(c.bucketPublicKeys)) + bu := tx.Bucket([]byte(c.bucketNamePublicKeys)) if bu == nil { return fmt.Errorf("error: dumpBucket: tx.bucket returned nil") } // For each element found in the DB, print it. bu.ForEach(func(k, v []byte) error { - m[Node(k)] = string(v) + m[Node(k)] = v return nil }) @@ -188,13 +189,13 @@ func (c *centralAuth) dbDumpPublicKey() (map[Node]string, error) { // The keys will be written to a k/v store for persistence. type nodePublicKeys struct { mu sync.Mutex - KeyMap map[Node]string + KeyMap map[Node][]byte } // newNodePublicKeys will return a prepared type of nodePublicKeys. func newNodePublicKeys(configuration *Configuration) *nodePublicKeys { n := nodePublicKeys{ - KeyMap: make(map[Node]string), + KeyMap: make(map[Node][]byte), } return &n diff --git a/configuration_flags.go b/configuration_flags.go index 1261552..1404397 100644 --- a/configuration_flags.go +++ b/configuration_flags.go @@ -91,8 +91,6 @@ type Configuration struct { StartPubREQHello int // Publisher for asking central for public keys StartPubREQPublicKeysGet bool - // Subscriber for receiving reqests to get public keys registered on central - StartSubREQPublicKeysGet bool // Subscriber for receiving updates of public keys from central StartSubREQPublicKeysPut bool // Start the central error logger. @@ -170,7 +168,6 @@ type ConfigurationFromFile struct { StartPubREQHello *int StartPubREQPublicKeysGet *bool - StartSubREQPublicKeysGet *bool StartSubREQPublicKeysPut *bool StartSubREQErrorLog *bool StartSubREQHello *bool @@ -235,7 +232,6 @@ func newConfigurationDefaults() Configuration { StartPubREQHello: 30, StartPubREQPublicKeysGet: true, - StartSubREQPublicKeysGet: false, StartSubREQPublicKeysPut: true, StartSubREQErrorLog: false, StartSubREQHello: true, @@ -441,11 +437,6 @@ func checkConfigValues(cf ConfigurationFromFile) Configuration { } else { conf.StartPubREQPublicKeysGet = *cf.StartPubREQPublicKeysGet } - if cf.StartSubREQPublicKeysGet == nil { - conf.StartSubREQPublicKeysGet = cd.StartSubREQPublicKeysGet - } else { - conf.StartSubREQPublicKeysGet = *cf.StartSubREQPublicKeysGet - } if cf.StartSubREQPublicKeysPut == nil { conf.StartSubREQPublicKeysPut = cd.StartSubREQPublicKeysPut } else { @@ -600,7 +591,6 @@ func (c *Configuration) CheckFlags() error { flag.IntVar(&c.StartPubREQHello, "startPubREQHello", fc.StartPubREQHello, "Make the current node send hello messages to central at given interval in seconds") flag.BoolVar(&c.StartPubREQPublicKeysGet, "startPubREQPublicKeysGet", fc.StartPubREQPublicKeysGet, "true/false") - flag.BoolVar(&c.StartSubREQPublicKeysGet, "startSubREQPublicKeysGet", fc.StartSubREQPublicKeysGet, "true/false") flag.BoolVar(&c.StartSubREQPublicKeysPut, "startSubREQPublicKeysPut", fc.StartSubREQPublicKeysPut, "true/false") flag.BoolVar(&c.StartSubREQErrorLog, "startSubREQErrorLog", fc.StartSubREQErrorLog, "true/false") flag.BoolVar(&c.StartSubREQHello, "startSubREQHello", fc.StartSubREQHello, "true/false") diff --git a/processes.go b/processes.go index 9a8a9fe..024d96b 100644 --- a/processes.go +++ b/processes.go @@ -170,7 +170,7 @@ func (p *processes) Start(proc process) { proc.startup.pubREQPublicKeysGet(proc) } - if proc.configuration.StartSubREQPublicKeysGet { + if proc.configuration.IsCentralAuth { proc.startup.subREQPublicKeysGet(proc) }