1
0
Fork 0
mirror of https://github.com/postmannen/ctrl.git synced 2025-01-20 22:52:13 +00:00

updated comments

This commit is contained in:
postmannen 2022-06-22 14:32:58 +02:00
parent 433541fcc1
commit b3bb2e44a1
10 changed files with 21 additions and 65 deletions

View file

@ -641,7 +641,7 @@ An example could be that you send a `REQCliCommand` message to some node, and yo
This is a method that can be used to get the data of the message printed to console where Steward is running. This is a method that can be used to get the data of the message printed to console where Steward is running.
Default is to print to **stdout**, but printing to **stderr** can be done by setting the value of **methodArgs** to `"methodArgs": ["stderr"]`. Default is to print to **stdout**, but printing to **stderr** can be done by setting the value of **methodArgs** to `"methodArgs": ["stderr"]`.
If used as a **replyMethod** set the **replyMethodArgs** `"replyMethodArgs": ["stderr"],`. If used as a **replyMethod** set the **replyMethodArgs** `"replyMethodArgs": ["stderr"],`.
@ -1415,6 +1415,12 @@ StartSubREQCliCommandCont bool
ToNode Node `json:"toNode" yaml:"toNode"` ToNode Node `json:"toNode" yaml:"toNode"`
// ToNodes to specify several hosts to send message to in the // ToNodes to specify several hosts to send message to in the
// form of an slice/array. // form of an slice/array.
// The ToNodes field is only a concept that exists when messages
// are injected f.ex. on a socket, and there they are directly
//converted into separate node messages for each node, and from
// there the ToNodes field is not used any more within the system.
// With other words, a message that exists within Steward is always
// for just for a single node.
ToNodes []Node `json:"toNodes,omitempty" yaml:"toNodes,omitempty"` ToNodes []Node `json:"toNodes,omitempty" yaml:"toNodes,omitempty"`
// The actual data in the message. This is typically where we // The actual data in the message. This is typically where we
// specify the cli commands to execute on a node, and this is // specify the cli commands to execute on a node, and this is

View file

@ -73,10 +73,6 @@ On the CentralAuth we need a service to verify that updating the currently store
Public Keys should only be pushed to nodes that will receive message from source node of the public key. Public Keys should only be pushed to nodes that will receive message from source node of the public key.
#### Service for key rotation
TODO
### Auth handling and storage ### Auth handling and storage
#### Request for operators to add authorizations for nodes #### Request for operators to add authorizations for nodes
@ -118,5 +114,3 @@ Public Keys vs nodes should be implemented as a map, map `node -> publicKey`, an
Flag to turn on/off signature verification for all request types. Flag to turn on/off signature verification for all request types.
### Verification of MethodArgs Signature against ACL ### Verification of MethodArgs Signature against ACL
TODO

View file

@ -190,35 +190,6 @@ func (e *errorKernel) logConsoleOnlyIfDebug(err error, c *Configuration) {
} }
} }
// // TODO: Needs more work.
// //
// // errWithAction
// //
// // Will prepare an errorEvent to send to the errorKernel that
// // contains a channel of type errorAction.
// // The errorActionCh are returned from the function and are used
// // to create a channel between where this function is called and
// // the go routine started in the errorKernel. From where the
// // function was called we can read the channel for a response
// // given from the errorKernel, and then decide what to do based
// // on the errorAction value.
// func (e *errorKernel) errWithAction(proc process, msg Message, err error) chan errorAction {
// // Create the channel where to receive what action to do.
// errActionCh := make(chan errorAction)
//
// ev := errorEvent{
// err: err,
// errorType: errTypeWithAction,
// process: proc,
// message: msg,
// errorActionCh: errActionCh,
// }
//
// e.errorCh <- ev
//
// return errActionCh
// }
// errorAction is used to tell the process who sent the error // errorAction is used to tell the process who sent the error
// what it shall do. The process who sends the error will // what it shall do. The process who sends the error will
// have to block and wait for the response on the errorActionCh. // have to block and wait for the response on the errorActionCh.

View file

@ -14,6 +14,12 @@ type Message struct {
ToNode Node `json:"toNode" yaml:"toNode"` ToNode Node `json:"toNode" yaml:"toNode"`
// ToNodes to specify several hosts to send message to in the // ToNodes to specify several hosts to send message to in the
// form of an slice/array. // form of an slice/array.
// The ToNodes field is only a concept that exists when messages
// are injected f.ex. on a socket, and there they are directly
//converted into separate node messages for each node, and from
// there the ToNodes field is not used any more within the system.
// With other words, a message that exists within Steward is always
// for just for a single node.
ToNodes []Node `json:"toNodes,omitempty" yaml:"toNodes,omitempty"` ToNodes []Node `json:"toNodes,omitempty" yaml:"toNodes,omitempty"`
// The Unique ID of the message // The Unique ID of the message
ID int `json:"id" yaml:"id"` ID int `json:"id" yaml:"id"`

View file

@ -136,7 +136,6 @@ func (n *nodeAcl) loadFromFile() error {
// saveToFile will save the acl to file for persistent storage. // saveToFile will save the acl to file for persistent storage.
// An error is returned if it fails. // An error is returned if it fails.
// TODO: HERE: not saving deleted wildcard map entry for some reason!
func (n *nodeAcl) saveToFile() error { func (n *nodeAcl) saveToFile() error {
fh, err := os.OpenFile(n.filePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600) fh, err := os.OpenFile(n.filePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil { if err != nil {

View file

@ -338,7 +338,7 @@ func (s startup) pubREQKeysRequestUpdate(p process) {
ticker := time.NewTicker(time.Second * time.Duration(p.configuration.REQKeysRequestUpdateInterval)) ticker := time.NewTicker(time.Second * time.Duration(p.configuration.REQKeysRequestUpdateInterval))
for { for {
// TODO: We could send with the hash of the currently stored keys, // Send a message with the hash of the currently stored keys,
// so we would know on the subscriber at central if it should send // so we would know on the subscriber at central if it should send
// and update with new keys back. // and update with new keys back.
@ -394,8 +394,8 @@ func (s startup) pubREQAclRequestUpdate(p process) {
ticker := time.NewTicker(time.Second * time.Duration(p.configuration.REQAclRequestUpdateInterval)) ticker := time.NewTicker(time.Second * time.Duration(p.configuration.REQAclRequestUpdateInterval))
for { for {
// TODO: We could send with the hash of the currently stored hash, // Send a message with the hash of the currently stored acl's,
// so we would know on the subscriber at central if it should send // so we would know for the subscriber at central if it should send
// and update with new keys back. // and update with new keys back.
proc.nodeAuth.nodeAcl.mu.Lock() proc.nodeAuth.nodeAcl.mu.Lock()

View file

@ -454,7 +454,11 @@ func newReplyMessage(proc process, message Message, outData []byte) {
// ringbuffer to be published. // ringbuffer to be published.
// TODO: Check that we still got all the fields present that are needed here. // TODO: Check that we still got all the fields present that are needed here.
newMsg := Message{ newMsg := Message{
ToNode: message.FromNode, ToNode: message.FromNode,
// The ToNodes field is not needed since it only a concept that exists when messages
// are injected f.ex. on a socket, and there they are directly converted into separate
// node messages. With other words a message in the system are only for single nodes,
// so we don't have to worry about the ToNodes field when creating reply messages.
FromNode: message.ToNode, FromNode: message.ToNode,
Data: outData, Data: outData,
Method: message.ReplyMethod, Method: message.ReplyMethod,

View file

@ -53,16 +53,6 @@ func (m methodREQAclRequestUpdate) handler(proc process, message Message, node s
proc.centralAuth.accessLists.schemaGenerated.mu.Lock() proc.centralAuth.accessLists.schemaGenerated.mu.Lock()
defer proc.centralAuth.accessLists.schemaGenerated.mu.Unlock() defer proc.centralAuth.accessLists.schemaGenerated.mu.Unlock()
// DEBUGGING:
//{
// proc.centralAuth.accessLists.schemaMain.mu.Lock()
// fmt.Printf("\n --- DEBUGGING: subscriber methodREQAclRequestUpdate: schemaGenerated contains: %v\n\n", proc.centralAuth.accessLists.schemaGenerated)
// fmt.Printf("\n --- DEBUGGING: subscriber methodREQAclRequestUpdate: schemaMain contains: %v\n\n", proc.centralAuth.accessLists.schemaMain)
// proc.centralAuth.accessLists.schemaMain.mu.Unlock()
//
// // TODO: PROBLEM: The existing generated acl's are not loaded when starting, or not stored at all.
//}
log.Printf(" ---- subscriber methodREQAclRequestUpdate: got acl hash from NODE=%v, HASH data =%v\n", message.FromNode, message.Data) log.Printf(" ---- subscriber methodREQAclRequestUpdate: got acl hash from NODE=%v, HASH data =%v\n", message.FromNode, message.Data)
// Check if the received hash is the same as the one currently active, // Check if the received hash is the same as the one currently active,
@ -879,9 +869,6 @@ func (m methodREQAclExport) handler(proc process, message Message, node string)
// --- // ---
// TODO: IMPORTANT: We also need to add importing and exporting of the groups to the
// import and export methods.
type methodREQAclImport struct { type methodREQAclImport struct {
event Event event Event
} }

View file

@ -88,8 +88,6 @@ func (m methodREQKeysRequestUpdate) handler(proc process, message Message, node
// structure is the same as the other handlers. // structure is the same as the other handlers.
select { select {
case <-ctx.Done(): case <-ctx.Done():
// TODO: Should we receive a hash of he current keys from the node here
// to verify if we need to update or not ?
case outCh <- []byte{}: case outCh <- []byte{}:
} }
}() }()
@ -164,7 +162,6 @@ func (m methodREQKeysDeliverUpdate) handler(proc process, message Message, node
// structure is the same as the other handlers. // structure is the same as the other handlers.
select { select {
case <-ctx.Done(): case <-ctx.Done():
// TODO: Should we receive a hash of he current keys from the node here ?
case outCh <- []byte{}: case outCh <- []byte{}:
} }
}() }()
@ -223,8 +220,6 @@ func (m methodREQKeysDeliverUpdate) handler(proc process, message Message, node
// ---- // ----
// TODO: We should also add a request method methodREQPublicKeysRevoke
type methodREQKeysAllow struct { type methodREQKeysAllow struct {
event Event event Event
} }
@ -293,10 +288,6 @@ func (m methodREQKeysAllow) handler(proc process, message Message, node string)
// representing the current keys in the allowed map. // representing the current keys in the allowed map.
proc.centralAuth.updateHash(proc, message) proc.centralAuth.updateHash(proc, message)
// TODO: FAILS: The push keys updates when change fails with that the
// subscriber gets stuck. Need to look more into this later.
// Disabling for now since the node will update at the timed interval.
//
// If new keys were allowed into the main map, we should send out one // If new keys were allowed into the main map, we should send out one
// single update to all the registered nodes to inform of an update. // single update to all the registered nodes to inform of an update.
// NB: If a node is not reachable at the time the update is sent it is // NB: If a node is not reachable at the time the update is sent it is

View file

@ -448,8 +448,6 @@ func (s *server) routeMessagesToProcess(dbFileName string) {
// Signal back to the ringbuffer that message have been picked up. // Signal back to the ringbuffer that message have been picked up.
samDBVal.delivered() samDBVal.delivered()
// TODO HERE!: The message will be dropped here since the method for copy uid does not exist
sam := samDBVal.samDBValue.Data sam := samDBVal.samDBValue.Data
// Check if the format of the message is correct. // Check if the format of the message is correct.
if _, ok := methodsAvailable.CheckIfExists(sam.Message.Method); !ok { if _, ok := methodsAvailable.CheckIfExists(sam.Message.Method); !ok {