44 lines
934 B
Go
44 lines
934 B
Go
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)
|
|
}
|