github.com/gophercloud/gophercloud@v1.11.0/openstack/baremetalintrospection/httpbasic/requests.go (about)

     1  package httpbasic
     2  
     3  import (
     4  	"encoding/base64"
     5  	"fmt"
     6  
     7  	"github.com/gophercloud/gophercloud"
     8  )
     9  
    10  // EndpointOpts specifies a "http_basic" Ironic Inspector Endpoint.
    11  type EndpointOpts struct {
    12  	IronicInspectorEndpoint     string
    13  	IronicInspectorUser         string
    14  	IronicInspectorUserPassword string
    15  }
    16  
    17  func initClientOpts(client *gophercloud.ProviderClient, eo EndpointOpts) (*gophercloud.ServiceClient, error) {
    18  	sc := new(gophercloud.ServiceClient)
    19  	if eo.IronicInspectorEndpoint == "" {
    20  		return nil, fmt.Errorf("IronicInspectorEndpoint is required")
    21  	}
    22  	if eo.IronicInspectorUser == "" || eo.IronicInspectorUserPassword == "" {
    23  		return nil, fmt.Errorf("User and Password are required")
    24  	}
    25  
    26  	token := []byte(eo.IronicInspectorUser + ":" + eo.IronicInspectorUserPassword)
    27  	encodedToken := base64.StdEncoding.EncodeToString(token)
    28  	sc.MoreHeaders = map[string]string{"Authorization": "Basic " + encodedToken}
    29  	sc.Endpoint = gophercloud.NormalizeURL(eo.IronicInspectorEndpoint)
    30  	sc.ProviderClient = client
    31  	return sc, nil
    32  }
    33  
    34  // NewBareMetalIntrospectionHTTPBasic creates a ServiceClient that may be used to access a
    35  // "http_basic" bare metal introspection service.
    36  func NewBareMetalIntrospectionHTTPBasic(eo EndpointOpts) (*gophercloud.ServiceClient, error) {
    37  	sc, err := initClientOpts(&gophercloud.ProviderClient{}, eo)
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  
    42  	sc.Type = "baremetal-introspection"
    43  
    44  	return sc, nil
    45  }