mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-11-03 03:58:01 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package api
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"errors"
 | 
						|
	"fmt"
 | 
						|
	"net/http"
 | 
						|
 | 
						|
	"github.com/mitchellh/mapstructure"
 | 
						|
)
 | 
						|
 | 
						|
func (c *Sys) CapabilitiesSelf(path string) ([]string, error) {
 | 
						|
	return c.CapabilitiesSelfWithContext(context.Background(), path)
 | 
						|
}
 | 
						|
 | 
						|
func (c *Sys) CapabilitiesSelfWithContext(ctx context.Context, path string) ([]string, error) {
 | 
						|
	ctx, cancelFunc := c.c.withConfiguredTimeout(ctx)
 | 
						|
	defer cancelFunc()
 | 
						|
 | 
						|
	return c.CapabilitiesWithContext(ctx, c.c.Token(), path)
 | 
						|
}
 | 
						|
 | 
						|
func (c *Sys) Capabilities(token, path string) ([]string, error) {
 | 
						|
	return c.CapabilitiesWithContext(context.Background(), token, path)
 | 
						|
}
 | 
						|
 | 
						|
func (c *Sys) CapabilitiesWithContext(ctx context.Context, token, path string) ([]string, error) {
 | 
						|
	ctx, cancelFunc := c.c.withConfiguredTimeout(ctx)
 | 
						|
	defer cancelFunc()
 | 
						|
 | 
						|
	body := map[string]string{
 | 
						|
		"token": token,
 | 
						|
		"path":  path,
 | 
						|
	}
 | 
						|
 | 
						|
	reqPath := "/v1/sys/capabilities"
 | 
						|
	if token == c.c.Token() {
 | 
						|
		reqPath = fmt.Sprintf("%s-self", reqPath)
 | 
						|
	}
 | 
						|
 | 
						|
	r := c.c.NewRequest(http.MethodPost, reqPath)
 | 
						|
	if err := r.SetJSONBody(body); err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	resp, err := c.c.rawRequestWithContext(ctx, r)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	defer resp.Body.Close()
 | 
						|
 | 
						|
	secret, err := ParseSecret(resp.Body)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	if secret == nil || secret.Data == nil {
 | 
						|
		return nil, errors.New("data from server response is empty")
 | 
						|
	}
 | 
						|
 | 
						|
	var res []string
 | 
						|
	err = mapstructure.Decode(secret.Data[path], &res)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	if len(res) == 0 {
 | 
						|
		_, ok := secret.Data["capabilities"]
 | 
						|
		if ok {
 | 
						|
			err = mapstructure.Decode(secret.Data["capabilities"], &res)
 | 
						|
			if err != nil {
 | 
						|
				return nil, err
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return res, nil
 | 
						|
}
 |