diff --git a/central_auth.go b/central_auth.go index a409b89..95fecfb 100644 --- a/central_auth.go +++ b/central_auth.go @@ -14,7 +14,21 @@ import ( // centralAuth holds the logic related to handling public keys and auth maps. type centralAuth struct { // schema map[Node]map[argsString]signatureBase32 - authorization *authorization + authorization *authorization + keys *keys +} + +// newCentralAuth will return a new and prepared *centralAuth +func newCentralAuth(configuration *Configuration, errorKernel *errorKernel) *centralAuth { + c := centralAuth{ + authorization: newAuthorization(), + keys: newKeys(configuration, errorKernel), + } + + return &c +} + +type keys struct { nodePublicKeys *nodePublicKeys nodeNotAckedPublicKeys *nodeNotAckedPublicKeys configuration *Configuration @@ -23,10 +37,9 @@ type centralAuth struct { errorKernel *errorKernel } -// newCentralAuth will return a prepared *centralAuth with input values set. -func newCentralAuth(configuration *Configuration, errorKernel *errorKernel) *centralAuth { - c := centralAuth{ - authorization: newAuthorization(), +// newKeys will return a prepared *keys with input values set. +func newKeys(configuration *Configuration, errorKernel *errorKernel) *keys { + c := keys{ // schema: make(map[Node]map[argsString]signatureBase32), nodePublicKeys: newNodePublicKeys(configuration), nodeNotAckedPublicKeys: newNodeNotAckedPublicKeys(configuration), @@ -64,7 +77,7 @@ func newCentralAuth(configuration *Configuration, errorKernel *errorKernel) *cen } // addPublicKey to the db if the node do not exist, or if it is a new value. -func (c *centralAuth) addPublicKey(proc process, msg Message) { +func (c *keys) addPublicKey(proc process, msg Message) { // TODO: When receiviving a new or different keys for a node we should // have a service with it's own storage for these keys, and an operator @@ -156,7 +169,7 @@ func (c *centralAuth) addPublicKey(proc process, msg Message) { // } //dbUpdatePublicKey will update the public key for a node in the db. -func (c *centralAuth) dbUpdatePublicKey(node string, value []byte) error { +func (c *keys) dbUpdatePublicKey(node string, value []byte) error { err := c.db.Update(func(tx *bolt.Tx) error { //Create a bucket bu, err := tx.CreateBucketIfNotExists([]byte(c.bucketNamePublicKeys)) @@ -195,7 +208,7 @@ func (c *centralAuth) dbUpdatePublicKey(node string, value []byte) 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][]byte, error) { +func (c *keys) dbDumpPublicKey() (map[Node][]byte, error) { m := make(map[Node][]byte) err := c.db.View(func(tx *bolt.Tx) error { diff --git a/processes.go b/processes.go index 4c18aca..cb2575b 100644 --- a/processes.go +++ b/processes.go @@ -441,13 +441,13 @@ func (s startup) subREQHello(p process) { return nil } - s.centralAuth.addPublicKey(proc, m) + s.centralAuth.keys.addPublicKey(proc, m) // update the prometheus metrics - s.server.centralAuth.nodePublicKeys.mu.Lock() - mapLen := len(s.server.centralAuth.nodePublicKeys.KeyMap) - s.server.centralAuth.nodePublicKeys.mu.Unlock() + s.server.centralAuth.keys.nodePublicKeys.mu.Lock() + mapLen := len(s.server.centralAuth.keys.nodePublicKeys.KeyMap) + s.server.centralAuth.keys.nodePublicKeys.mu.Unlock() s.metrics.promHelloNodesTotal.Set(float64(mapLen)) s.metrics.promHelloNodesContactLast.With(prometheus.Labels{"nodeName": string(m.FromNode)}).SetToCurrentTime() diff --git a/requests.go b/requests.go index b729ab7..ab8407f 100644 --- a/requests.go +++ b/requests.go @@ -2060,9 +2060,9 @@ func (m methodREQPublicKeysGet) handler(proc process, message Message, node stri case <-ctx.Done(): // case out := <-outCh: case <-outCh: - proc.centralAuth.nodePublicKeys.mu.Lock() - b, err := json.Marshal(proc.centralAuth.nodePublicKeys.KeyMap) - proc.centralAuth.nodePublicKeys.mu.Unlock() + proc.centralAuth.keys.nodePublicKeys.mu.Lock() + b, err := json.Marshal(proc.centralAuth.keys.nodePublicKeys.KeyMap) + proc.centralAuth.keys.nodePublicKeys.mu.Unlock() if err != nil { er := fmt.Errorf("error: REQPublicKeysGet, failed to marshal keys map: %v", err) proc.errorKernel.errSend(proc, message, er) @@ -2178,22 +2178,22 @@ func (m methodREQPublicKeysAllow) handler(proc process, message Message, node st select { case <-ctx.Done(): case <-outCh: - proc.centralAuth.nodeNotAckedPublicKeys.mu.Lock() - defer proc.centralAuth.nodeNotAckedPublicKeys.mu.Unlock() + proc.centralAuth.keys.nodeNotAckedPublicKeys.mu.Lock() + defer proc.centralAuth.keys.nodeNotAckedPublicKeys.mu.Unlock() for _, n := range message.MethodArgs { - key, ok := proc.centralAuth.nodeNotAckedPublicKeys.KeyMap[Node(n)] + key, ok := proc.centralAuth.keys.nodeNotAckedPublicKeys.KeyMap[Node(n)] if ok { // Store/update the node and public key on the allowed pubKey map. - proc.centralAuth.nodePublicKeys.mu.Lock() - proc.centralAuth.nodePublicKeys.KeyMap[Node(n)] = key - proc.centralAuth.nodePublicKeys.mu.Unlock() + proc.centralAuth.keys.nodePublicKeys.mu.Lock() + proc.centralAuth.keys.nodePublicKeys.KeyMap[Node(n)] = key + proc.centralAuth.keys.nodePublicKeys.mu.Unlock() // Add key to persistent storage. - proc.centralAuth.dbUpdatePublicKey(string(n), key) + proc.centralAuth.keys.dbUpdatePublicKey(string(n), key) // Delete the key from the NotAcked map - delete(proc.centralAuth.nodeNotAckedPublicKeys.KeyMap, Node(n)) + delete(proc.centralAuth.keys.nodeNotAckedPublicKeys.KeyMap, Node(n)) er := fmt.Errorf("info: REQPublicKeysAllow : allowed new/updated public key for %v to allowed public key map", n) proc.errorKernel.infoSend(proc, message, er)