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 }