github.com/drone/runner-go@v1.12.0/secret/static.go (about)

     1  // Copyright 2019 Drone.IO Inc. All rights reserved.
     2  // Use of this source code is governed by the Polyform License
     3  // that can be found in the LICENSE file.
     4  
     5  package secret
     6  
     7  import (
     8  	"context"
     9  	"strings"
    10  
    11  	"github.com/drone/runner-go/logger"
    12  
    13  	"github.com/drone/drone-go/drone"
    14  )
    15  
    16  // Static returns a new static secret provider. The static
    17  // secret provider finds and returns a named secret from the
    18  // static list.
    19  func Static(secrets []*drone.Secret) Provider {
    20  	return &static{secrets}
    21  }
    22  
    23  // StaticVars returns a new static secret provider. The static
    24  // secret provider finds and returns a named secret from the
    25  // static key value pairs.
    26  func StaticVars(vars map[string]string) Provider {
    27  	var secrets []*drone.Secret
    28  	for k, v := range vars {
    29  		secrets = append(secrets, &drone.Secret{
    30  			Name: k,
    31  			Data: v,
    32  		})
    33  	}
    34  	return Static(secrets)
    35  }
    36  
    37  type static struct {
    38  	secrets []*drone.Secret
    39  }
    40  
    41  func (p *static) Find(ctx context.Context, in *Request) (*drone.Secret, error) {
    42  	logger := logger.FromContext(ctx).
    43  		WithField("name", in.Name).
    44  		WithField("kind", "secret")
    45  
    46  	for _, secret := range p.secrets {
    47  		if !strings.EqualFold(secret.Name, in.Name) {
    48  			continue
    49  		}
    50  		// The secret can be restricted to non-pull request
    51  		// events. If the secret is restricted, return
    52  		// empty results.
    53  		if secret.PullRequest == false &&
    54  			in.Build.Event == drone.EventPullRequest {
    55  			logger.Trace("secret: database: restricted from pull requests")
    56  			continue
    57  		}
    58  
    59  		logger.Trace("secret: database: found matching secret")
    60  		return secret, nil
    61  	}
    62  
    63  	logger.Trace("secret: database: no matching secret")
    64  	return nil, nil
    65  }