github.com/khulnasoft/codebase@v0.0.0-20231214144635-a707781cbb24/doghouse/server/token.go (about) 1 package server 2 3 import ( 4 "context" 5 "crypto/rand" 6 "fmt" 7 "io" 8 9 "github.com/khulnasoft/codebase/doghouse/server/storage" 10 ) 11 12 func GenerateRepositoryToken() string { 13 return securerandom(8) 14 } 15 16 func securerandom(n int) string { 17 b := make([]byte, n) 18 io.ReadFull(rand.Reader, b) 19 return fmt.Sprintf("%x", b) 20 } 21 22 func GetOrGenerateRepoToken(ctx context.Context, s storage.GitHubRepositoryTokenStore, 23 owner, repo string, repoID int64) (string, error) { 24 found, token, err := s.Get(ctx, owner, repo) 25 if err != nil { 26 return "", err 27 } 28 if found { 29 return token.Token, nil 30 } 31 // If repo token not found, create a repo token. 32 return RegenerateRepoToken(ctx, s, owner, repo, repoID) 33 } 34 35 func RegenerateRepoToken(ctx context.Context, s storage.GitHubRepositoryTokenStore, 36 owner, repo string, repoID int64) (string, error) { 37 newToken := &storage.GitHubRepositoryToken{ 38 RepositoryID: repoID, 39 RepositoryName: repo, 40 RepositoryOwner: owner, 41 Token: GenerateRepositoryToken(), 42 } 43 if err := s.Put(ctx, newToken); err != nil { 44 return "", err 45 } 46 return newToken.Token, nil 47 }