mirror of
https://github.com/portainer/portainer.git
synced 2025-07-20 13:59:40 +02:00
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
|
||
|
}
|