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 }