github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/powchain/provider.go (about)

     1  package powchain
     2  
     3  import (
     4  	"encoding/base64"
     5  	"strings"
     6  
     7  	"github.com/prysmaticlabs/prysm/shared/httputils"
     8  	"github.com/prysmaticlabs/prysm/shared/httputils/authorizationmethod"
     9  )
    10  
    11  // HttpEndpoint extracts an httputils.Endpoint from the provider parameter.
    12  func HttpEndpoint(eth1Provider string) httputils.Endpoint {
    13  	endpoint := httputils.Endpoint{
    14  		Url: "",
    15  		Auth: httputils.AuthorizationData{
    16  			Method: authorizationmethod.None,
    17  			Value:  "",
    18  		}}
    19  
    20  	authValues := strings.Split(eth1Provider, ",")
    21  	endpoint.Url = strings.TrimSpace(authValues[0])
    22  	if len(authValues) > 2 {
    23  		log.Errorf(
    24  			"ETH1 endpoint string can contain one comma for specifying the authorization header to access the provider."+
    25  				" String contains too many commas: %d. Skipping authorization.", len(authValues)-1)
    26  	} else if len(authValues) == 2 {
    27  		switch httputils.Method(strings.TrimSpace(authValues[1])) {
    28  		case authorizationmethod.Basic:
    29  			basicAuthValues := strings.Split(strings.TrimSpace(authValues[1]), " ")
    30  			if len(basicAuthValues) != 2 {
    31  				log.Errorf("Basic Authentication has incorrect format. Skipping authorization.")
    32  			} else {
    33  				endpoint.Auth.Method = authorizationmethod.Basic
    34  				endpoint.Auth.Value = base64.StdEncoding.EncodeToString([]byte(basicAuthValues[1]))
    35  			}
    36  		case authorizationmethod.Bearer:
    37  			bearerAuthValues := strings.Split(strings.TrimSpace(authValues[1]), " ")
    38  			if len(bearerAuthValues) != 2 {
    39  				log.Errorf("Bearer Authentication has incorrect format. Skipping authorization.")
    40  			} else {
    41  				endpoint.Auth.Method = authorizationmethod.Bearer
    42  				endpoint.Auth.Value = bearerAuthValues[1]
    43  			}
    44  		case authorizationmethod.None:
    45  			log.Errorf("Authorization has incorrect format or authorization type is not supported.")
    46  		}
    47  	}
    48  	return endpoint
    49  }