mirror of https://github.com/portainer/portainer
92 lines
2.7 KiB
Go
92 lines
2.7 KiB
Go
package openamt
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
portainer "github.com/portainer/portainer/api"
|
|
)
|
|
|
|
type (
|
|
WirelessProfile struct {
|
|
ProfileName string `json:"profileName"`
|
|
AuthenticationMethod int `json:"authenticationMethod"`
|
|
EncryptionMethod int `json:"encryptionMethod"`
|
|
SSID string `json:"ssid"`
|
|
PSKPassphrase string `json:"pskPassphrase"`
|
|
}
|
|
)
|
|
|
|
func (service *Service) createOrUpdateWirelessConfig(configuration portainer.OpenAMTConfiguration, wirelessConfigName string) (*WirelessProfile, error) {
|
|
wirelessConfig, err := service.getWirelessConfig(configuration, wirelessConfigName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
method := http.MethodPost
|
|
if wirelessConfig != nil {
|
|
method = http.MethodPatch
|
|
}
|
|
|
|
wirelessConfig, err = service.saveWirelessConfig(method, configuration, wirelessConfigName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return wirelessConfig, nil
|
|
}
|
|
|
|
func (service *Service) getWirelessConfig(configuration portainer.OpenAMTConfiguration, configName string) (*WirelessProfile, error) {
|
|
url := fmt.Sprintf("https://%s/rps/api/v1/admin/wirelessconfigs/%s", configuration.MPSURL, configName)
|
|
|
|
responseBody, err := service.executeGetRequest(url, configuration.Credentials.MPSToken)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if responseBody == nil {
|
|
return nil, nil
|
|
}
|
|
|
|
var result WirelessProfile
|
|
err = json.Unmarshal(responseBody, &result)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &result, nil
|
|
}
|
|
|
|
func (service *Service) saveWirelessConfig(method string, configuration portainer.OpenAMTConfiguration, configName string) (*WirelessProfile, error) {
|
|
parsedAuthenticationMethod, err := strconv.Atoi(configuration.WirelessConfiguration.AuthenticationMethod)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error parsing wireless authentication method: %s", err.Error())
|
|
}
|
|
parsedEncryptionMethod, err := strconv.Atoi(configuration.WirelessConfiguration.EncryptionMethod)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error parsing wireless encryption method: %s", err.Error())
|
|
}
|
|
|
|
url := fmt.Sprintf("https://%s/rps/api/v1/admin/wirelessconfigs", configuration.MPSURL)
|
|
|
|
config := WirelessProfile{
|
|
ProfileName: configName,
|
|
AuthenticationMethod: parsedAuthenticationMethod,
|
|
EncryptionMethod: parsedEncryptionMethod,
|
|
SSID: configuration.WirelessConfiguration.SSID,
|
|
PSKPassphrase: configuration.WirelessConfiguration.PskPass,
|
|
}
|
|
payload, _ := json.Marshal(config)
|
|
|
|
responseBody, err := service.executeSaveRequest(method, url, configuration.Credentials.MPSToken, payload)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var result WirelessProfile
|
|
err = json.Unmarshal(responseBody, &result)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &result, nil
|
|
}
|