github.com/mistwind/reviewdog@v0.0.0-20230322024206-9cfa11856d58/doghouse/server/storage/token.go (about) 1 package storage 2 3 import ( 4 "context" 5 "fmt" 6 7 "cloud.google.com/go/datastore" 8 ) 9 10 // GitHubRepositoryToken represents token data for authenticating reviewdog CLI 11 // to the target repository. 12 type GitHubRepositoryToken struct { 13 Token string 14 // https://github/<RepositoryOwner>/<RepositoryName>. 15 RepositoryOwner string 16 RepositoryName string 17 RepositoryID int64 18 } 19 20 // GitHubRepositoryTokenStore represents GitHubRepositoryToken storage interface. 21 type GitHubRepositoryTokenStore interface { 22 // Put upserts GitHubRepositoryToken entity. 23 Put(ctx context.Context, token *GitHubRepositoryToken) error 24 // Get get GitHubRepositoryToken entity by owner and repo name. 25 // - If the entity is found, return token with ok is true. 26 // - If the entity is not found, ok is false. 27 // - If error occurs, it returns err. 28 Get(ctx context.Context, owner, repo string) (ok bool, token *GitHubRepositoryToken, err error) 29 } 30 31 // GitHubRepoTokenDatastore is store of GitHubRepositoryToken by Datastore of 32 // Google Appengine. 33 type GitHubRepoTokenDatastore struct{} 34 35 func (g *GitHubRepoTokenDatastore) newKey(owner, repo string) *datastore.Key { 36 kind := "GitHubRepositoryToken" 37 return datastore.NameKey(kind, fmt.Sprintf("%s/%s", owner, repo), nil) 38 } 39 40 // Put upserts GitHubRepositoryToken. 41 func (g *GitHubRepoTokenDatastore) Put(ctx context.Context, token *GitHubRepositoryToken) error { 42 key := g.newKey(token.RepositoryOwner, token.RepositoryName) 43 d, err := datastoreClient(ctx) 44 if err != nil { 45 return err 46 } 47 _, err = d.Put(ctx, key, token) 48 return err 49 } 50 51 func (g *GitHubRepoTokenDatastore) Get(ctx context.Context, owner, repo string) (ok bool, token *GitHubRepositoryToken, err error) { 52 key := g.newKey(owner, repo) 53 token = new(GitHubRepositoryToken) 54 d, err := datastoreClient(ctx) 55 if err != nil { 56 return false, nil, err 57 } 58 if err := d.Get(ctx, key, token); err != nil { 59 if err == datastore.ErrNoSuchEntity { 60 return false, nil, nil 61 } 62 return false, nil, err 63 } 64 return true, token, nil 65 }