package main import ( "crypto/rand" "encoding/base32" restful "github.com/emicklei/go-restful" ) var clusterTokens = newClusterSecretKV[string]("tokens") func getOrCreateClusterToken(cluster, name string) (token string, err error) { key := cluster + "/" + name token, found, err := clusterTokens.Get(key) if err != nil || found { return } b := make([]byte, 16) _, err = rand.Read(b) if err != nil { return } token = base32.StdEncoding.WithPadding(base32.NoPadding).EncodeToString(b) err = clusterTokens.Put(key, token) return } func wsClusterTokens(req *restful.Request, resp *restful.Response) { clusterName := req.PathParameter("cluster-name") clusterTokens.WsList(resp, clusterName+"/") } func wsClusterToken(req *restful.Request, resp *restful.Response) { clusterName := req.PathParameter("cluster-name") name := req.PathParameter("token-name") clusterTokens.WsGet(resp, clusterName+"/"+name) }