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  }