Files
cloudpods/pkg/util/redfish/bmconsole/bmconsole.go
2022-12-27 01:21:26 +08:00

77 lines
2.1 KiB
Go

// Copyright 2019 Yunion
//
// 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 bmconsole
import (
"bytes"
"context"
"fmt"
"net/http"
"strings"
"yunion.io/x/pkg/errors"
"yunion.io/x/pkg/util/httputils"
)
type SBMCConsole struct {
client *http.Client
username string
password string
host string
isDebug bool
}
func NewBMCConsole(host, username, password string, isDebug bool) *SBMCConsole {
client := httputils.GetDefaultClient()
return &SBMCConsole{
client: client,
host: host,
username: username,
password: password,
isDebug: isDebug,
}
}
func setCookieHeader(hdr http.Header, cookies map[string]string) {
cookieParts := make([]string, 0)
for k, v := range cookies {
cookieParts = append(cookieParts, k+"="+v)
}
if len(cookieParts) > 0 {
hdr.Set("Cookie", strings.Join(cookieParts, "; "))
}
}
func (r *SBMCConsole) RawRequest(ctx context.Context, method httputils.THttpMethod, path string, header http.Header, body []byte) (http.Header, []byte, error) {
urlStr := httputils.JoinPath(fmt.Sprintf("https://%s", r.host), path)
if header == nil {
header = http.Header{}
}
header.Set("Connection", "Close")
header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:69.0) Gecko/20100101 Firefox/69.0")
resp, err := httputils.Request(r.client, ctx, method, urlStr, header, bytes.NewReader(body), r.isDebug)
var bodyStr string
if body != nil {
bodyStr = string(body)
}
hdr, rspBody, err := httputils.ParseResponse(bodyStr, resp, err, r.isDebug)
if err != nil {
return nil, nil, errors.Wrap(err, "httputils.Request")
}
return hdr, rspBody, nil
}