github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/client/admin_client.go (about)

     1  package client
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/cozy/cozy-stack/client/request"
     7  	"github.com/cozy/cozy-stack/pkg/config/config"
     8  	"github.com/cozy/cozy-stack/pkg/consts"
     9  	"github.com/cozy/cozy-stack/pkg/tlsclient"
    10  )
    11  
    12  type AdminClient struct {
    13  	Client
    14  }
    15  
    16  func (ac *AdminClient) NewInstanceClient(domain string, scopes ...string) (*Client, error) {
    17  	token, err := ac.GetToken(&TokenOptions{
    18  		Domain:   domain,
    19  		Subject:  "CLI",
    20  		Audience: consts.CLIAudience,
    21  		Scope:    scopes,
    22  	})
    23  	if err != nil {
    24  		return nil, err
    25  	}
    26  
    27  	httpClient, clientURL, err := tlsclient.NewHTTPClient(tlsclient.HTTPEndpoint{
    28  		Host:      config.GetConfig().Host,
    29  		Port:      config.GetConfig().Port,
    30  		Timeout:   15 * time.Minute,
    31  		EnvPrefix: "COZY_HOST",
    32  	})
    33  	if err != nil {
    34  		return nil, err
    35  	}
    36  
    37  	c := &Client{
    38  		Scheme:     clientURL.Scheme,
    39  		Addr:       clientURL.Host,
    40  		Domain:     domain,
    41  		Client:     httpClient,
    42  		Authorizer: &request.BearerAuthorizer{Token: token},
    43  	}
    44  
    45  	return c, nil
    46  }