(opts *SetOptions, pk *PubKey, host string, client *api.Client, baseRepo ghrepo.Interface, secretKey string, secret []byte, repositoryIDs []int64, app shared.App, entity shared.SecretEntity)
| 328 | } |
| 329 | |
| 330 | func setSecret(opts *SetOptions, pk *PubKey, host string, client *api.Client, baseRepo ghrepo.Interface, secretKey string, secret []byte, repositoryIDs []int64, app shared.App, entity shared.SecretEntity) (res setResult) { |
| 331 | orgName := opts.OrgName |
| 332 | envName := opts.EnvName |
| 333 | res.key = secretKey |
| 334 | |
| 335 | decodedPubKey, err := base64.StdEncoding.DecodeString(pk.Key) |
| 336 | if err != nil { |
| 337 | res.err = fmt.Errorf("failed to decode public key: %w", err) |
| 338 | return |
| 339 | } |
| 340 | var peersPubKey [32]byte |
| 341 | copy(peersPubKey[:], decodedPubKey[0:32]) |
| 342 | |
| 343 | var rand io.Reader |
| 344 | if opts.RandomOverride != nil { |
| 345 | rand = opts.RandomOverride() |
| 346 | } |
| 347 | eBody, err := box.SealAnonymous(nil, secret[:], &peersPubKey, rand) |
| 348 | if err != nil { |
| 349 | res.err = fmt.Errorf("failed to encrypt body: %w", err) |
| 350 | return |
| 351 | } |
| 352 | |
| 353 | encoded := base64.StdEncoding.EncodeToString(eBody) |
| 354 | if opts.DoNotStore { |
| 355 | res.encrypted = encoded |
| 356 | return |
| 357 | } |
| 358 | |
| 359 | switch entity { |
| 360 | case shared.Organization: |
| 361 | err = putOrgSecret(client, host, pk, orgName, opts.Visibility, secretKey, encoded, repositoryIDs, app) |
| 362 | case shared.Environment: |
| 363 | err = putEnvSecret(client, pk, baseRepo, envName, secretKey, encoded) |
| 364 | case shared.User: |
| 365 | err = putUserSecret(client, host, pk, secretKey, encoded, repositoryIDs) |
| 366 | default: |
| 367 | err = putRepoSecret(client, pk, baseRepo, secretKey, encoded, app) |
| 368 | } |
| 369 | if err != nil { |
| 370 | res.err = fmt.Errorf("failed to set secret %q: %w", secretKey, err) |
| 371 | return |
| 372 | } |
| 373 | return |
| 374 | } |
| 375 | |
| 376 | func getSecretsFromOptions(opts *SetOptions) (map[string][]byte, error) { |
| 377 | secrets := make(map[string][]byte) |
no test coverage detected