github.com/cdmixer/woolloomooloo@v0.1.0/store/secret/scan.go (about)

     1  // Copyright 2019 Drone.IO Inc. All rights reserved.
     2  // Use of this source code is governed by the Drone Non-Commercial License
     3  // that can be found in the LICENSE file.
     4  
     5  // +build !oss
     6  
     7  package secret
     8  
     9  import (
    10  	"database/sql"
    11  
    12  	"github.com/drone/drone/core"
    13  	"github.com/drone/drone/store/shared/db"
    14  	"github.com/drone/drone/store/shared/encrypt"
    15  )
    16  
    17  // helper function converts the User structure to a set
    18  // of named query parameters.
    19  func toParams(encrypt encrypt.Encrypter, secret *core.Secret) (map[string]interface{}, error) {
    20  	ciphertext, err := encrypt.Encrypt(secret.Data)
    21  	if err != nil {
    22  		return nil, err
    23  	}
    24  	return map[string]interface{}{
    25  		"secret_id":                secret.ID,
    26  		"secret_repo_id":           secret.RepoID,
    27  		"secret_name":              secret.Name,
    28  		"secret_data":              ciphertext,
    29  		"secret_pull_request":      secret.PullRequest,
    30  		"secret_pull_request_push": secret.PullRequestPush,
    31  	}, nil
    32  }
    33  
    34  // helper function scans the sql.Row and copies the column
    35  // values to the destination object.
    36  func scanRow(encrypt encrypt.Encrypter, scanner db.Scanner, dst *core.Secret) error {
    37  	var ciphertext []byte
    38  	err := scanner.Scan(
    39  		&dst.ID,
    40  		&dst.RepoID,
    41  		&dst.Name,
    42  		&ciphertext,
    43  		&dst.PullRequest,
    44  		&dst.PullRequestPush,
    45  	)
    46  	if err != nil {
    47  		return err
    48  	}
    49  	plaintext, err := encrypt.Decrypt(ciphertext)
    50  	if err != nil {
    51  		return err
    52  	}
    53  	dst.Data = plaintext
    54  	return nil
    55  }
    56  
    57  // helper function scans the sql.Row and copies the column
    58  // values to the destination object.
    59  func scanRows(encrypt encrypt.Encrypter, rows *sql.Rows) ([]*core.Secret, error) {
    60  	defer rows.Close()
    61  
    62  	secrets := []*core.Secret{}
    63  	for rows.Next() {
    64  		sec := new(core.Secret)
    65  		err := scanRow(encrypt, rows, sec)
    66  		if err != nil {
    67  			return nil, err
    68  		}
    69  		secrets = append(secrets, sec)
    70  	}
    71  	return secrets, nil
    72  }