netmaker/mq/dynsec_clients.go
2023-01-04 10:07:29 +05:30

98 lines
1.7 KiB
Go

package mq
// MqClient - type for taking in an MQ client's data
type MqClient struct {
ID string
Text string
Password string
Networks []string
}
// ModifyClient - modifies an existing client's network roles
func ModifyClient(client *MqClient) error {
roles := []MqDynSecRole{
{
Rolename: HostGenericRole,
Priority: -1,
},
}
for i := range client.Networks {
roles = append(roles, MqDynSecRole{
Rolename: client.Networks[i],
Priority: -1,
},
)
}
event := MqDynsecPayload{
Commands: []MqDynSecCmd{
{
Command: ModifyClientCmd,
Username: client.ID,
Textname: client.Text,
Roles: roles,
Groups: make([]MqDynSecGroup, 0),
},
},
}
return publishEventToDynSecTopic(event)
}
// DeleteMqClient - removes a client from the DynSec system
func DeleteMqClient(hostID string) error {
deleteHostRole(hostID)
event := MqDynsecPayload{
Commands: []MqDynSecCmd{
{
Command: DeleteClientCmd,
Username: hostID,
},
},
}
return publishEventToDynSecTopic(event)
}
// CreateMqClient - creates an MQ DynSec client
func CreateMqClient(client *MqClient) error {
err := createHostRole(client.ID)
if err != nil {
return err
}
roles := []MqDynSecRole{
{
Rolename: HostGenericRole,
Priority: -1,
},
{
Rolename: getHostRoleName(client.ID),
Priority: -1,
},
}
for i := range client.Networks {
roles = append(roles, MqDynSecRole{
Rolename: client.Networks[i],
Priority: -1,
},
)
}
event := MqDynsecPayload{
Commands: []MqDynSecCmd{
{
Command: CreateClientCmd,
Username: client.ID,
Password: client.Password,
Textname: client.Text,
Roles: roles,
Groups: make([]MqDynSecGroup, 0),
},
},
}
return publishEventToDynSecTopic(event)
}