From d3bb8e35794ef273313868bdaec09cfaa64f47e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Cluseau?= Date: Tue, 19 Jun 2018 17:48:28 +1100 Subject: [PATCH] feat: tokens in secret data --- secrets.go | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/secrets.go b/secrets.go index 723842d..1e897e1 100644 --- a/secrets.go +++ b/secrets.go @@ -1,6 +1,8 @@ package main import ( + "crypto/rand" + "encoding/base32" "encoding/json" "errors" "io/ioutil" @@ -22,7 +24,8 @@ type SecretData struct { } type ClusterSecrets struct { - CAs map[string]*CA + CAs map[string]*CA + Tokens map[string]string } type CA struct { @@ -79,13 +82,35 @@ func (sd *SecretData) cluster(name string) (cs *ClusterSecrets) { } cs = &ClusterSecrets{ - CAs: make(map[string]*CA), + CAs: make(map[string]*CA), + Tokens: make(map[string]string), } sd.clusters[name] = cs sd.changed = true return } +func (sd *SecretData) Token(cluster, name string) (token string, err error) { + cs := sd.cluster(cluster) + + token = cs.Tokens[name] + if token != "" { + return + } + + b := make([]byte, 16) + _, err = rand.Read(b) + if err != nil { + return + } + + token = base32.StdEncoding.WithPadding(base32.NoPadding).EncodeToString(b) + + cs.Tokens[name] = token + sd.changed = true + return +} + func (sd *SecretData) CA(cluster, name string) (ca *CA, err error) { cs := sd.cluster(cluster)