internal/client/sfdc/instances.go (114 lines of code) (raw):
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package sfdc
import (
"encoding/json"
"fmt"
"internal/apiclient"
"net/url"
"path"
"strings"
)
type instance struct {
Name string `json:"name,omitempty"`
DisplayName string `json:"displayName,omitempty"`
Description string `json:"description,omitempty"`
SfdcOrgId string `json:"sfdcOrgId,omitempty"`
AuthConfigId []string `json:"authConfigId,omitempty"`
UpateTime string `json:"upateTime,omitempty"`
CreateTime string `json:"createTime,omitempty"`
DeleteTime string `json:"deleteTime,omitempty"`
ServiceAuthority string `json:"serviceAuthority,omitempty"`
}
type instances struct {
SfdcInstances []instance `json:"sfdcInstances,omitempty"`
NextPageToken string `json:"nextPageToken,omitempty"`
}
type instanceExternal struct {
DisplayName string `json:"displayName,omitempty"`
Description string `json:"description,omitempty"`
SfdcOrgId string `json:"sfdcOrgId,omitempty"`
AuthConfigId []string `json:"authConfigId,omitempty"`
ServiceAuthority string `json:"serviceAuthority,omitempty"`
}
// CreateInstanceFromContent
func CreateInstanceFromContent(content []byte) (respBody []byte, err error) {
i := instance{}
if err = json.Unmarshal(content, &i); err != nil {
return nil, err
}
u, _ := url.Parse(apiclient.GetBaseIntegrationURL())
u.Path = path.Join(u.Path, "sfdcInstances")
respBody, err = apiclient.HttpClient(u.String(), string(content))
return respBody, err
}
// CreateInstance
func CreateInstance(name string, description string, sfdcOrgId string, serviceAuthority string, authConfig []string) (respBody []byte, err error) {
u, _ := url.Parse(apiclient.GetBaseIntegrationURL())
if len(authConfig) < 1 {
return nil, fmt.Errorf("at least one authConfig must be sent")
}
instanceStr := []string{}
instanceStr = append(instanceStr, "\"displayName\":\""+name+"\"")
instanceStr = append(instanceStr, "\"description\":\""+description+"\"")
instanceStr = append(instanceStr, "\"sfdcOrgId\":\""+sfdcOrgId+"\"")
instanceStr = append(instanceStr, "\"serviceAuthority\":\""+serviceAuthority+"\"")
authConfigsStr := "\"attributes\":[" + strings.Join(authConfig, ",") + "]"
instanceStr = append(instanceStr, "\"authConfigId\":\""+authConfigsStr+"\"")
payload := "{" + strings.Join(instanceStr, ",") + "}"
u.Path = path.Join(u.Path, "sfdcInstances")
respBody, err = apiclient.HttpClient(u.String(), payload)
return respBody, err
}
// GetInstance
func GetInstance(name string, minimal bool) (respBody []byte, err error) {
u, _ := url.Parse(apiclient.GetBaseIntegrationURL())
u.Path = path.Join(u.Path, "sfdcInstances", name)
if minimal {
apiclient.ClientPrintHttpResponse.Set(false)
}
respBody, err = apiclient.HttpClient(u.String())
if minimal {
iversion := instance{}
err := json.Unmarshal(respBody, &iversion)
if err != nil {
return nil, err
}
eversion := convertInternalInstanceToExternal(iversion)
respBody, err = json.Marshal(eversion)
if err != nil {
return nil, err
}
apiclient.ClientPrintHttpResponse.Set(apiclient.GetCmdPrintHttpResponseSetting())
apiclient.PrettyPrint(respBody)
}
return respBody, err
}
// ListInstances
func ListInstances() (respBody []byte, err error) {
u, _ := url.Parse(apiclient.GetBaseIntegrationURL())
u.Path = path.Join(u.Path, "sfdcInstances")
respBody, err = apiclient.HttpClient(u.String())
return respBody, err
}
// FindInstance
func FindInstance(name string) (version string, respBody []byte, err error) {
ilist := instances{}
respBody, err = ListInstances()
if err != nil {
return "", nil, err
}
if err = json.Unmarshal(respBody, &ilist); err != nil {
return "", nil, err
}
for _, i := range ilist.SfdcInstances {
if i.DisplayName == name {
version = i.Name[strings.LastIndex(i.Name, "/")+1:]
respBody, err := json.Marshal(&i)
return version, respBody, err
}
}
return "", nil, fmt.Errorf("instance not found")
}
// convertInternalInstanceToExternal
func convertInternalInstanceToExternal(internalVersion instance) (externalVersion instanceExternal) {
externalVersion = instanceExternal{}
externalVersion.DisplayName = internalVersion.Name
externalVersion.Description = internalVersion.Description
externalVersion.ServiceAuthority = internalVersion.ServiceAuthority
externalVersion.SfdcOrgId = internalVersion.SfdcOrgId
externalVersion.AuthConfigId = internalVersion.AuthConfigId
return externalVersion
}