@@ -2,7 +2,6 @@ package commands
22
33import (
44 "bufio"
5- "crypto/rand"
65 "encoding/base64"
76 "errors"
87 "flag"
@@ -423,26 +422,6 @@ func (c *DeployCommand) executeInternal(positionalArgs []string, dsHost string,
423422 return executionMonitor .Monitor ()
424423}
425424
426- func getUpsName (mtaId , namespace string ) string {
427- if strings .TrimSpace (namespace ) == "" {
428- return "__mta-secure-" + mtaId
429- }
430- return "__mta-secure-" + mtaId + "-" + namespace
431- }
432-
433- func getRandomisedUpsName (mtaId , namespace string ) (disposableUpsName string , err error ) {
434- randomisedPart , err := getRandomEncryptionKey ()
435- if err != nil {
436- return "" , err
437- }
438- resultSuffix := randomisedPart [:7 ]
439-
440- if strings .TrimSpace (namespace ) == "" {
441- return "__mta-secure-" + mtaId + "-" + resultSuffix , nil
442- }
443- return "__mta-secure-" + mtaId + "-" + namespace + "-" + resultSuffix , nil
444- }
445-
446425func setUpSpecificsForDeploymentUsingSecrets (flags * flag.FlagSet , c * DeployCommand , mtaId , namespace , schemaVersion string , disposableUserProvidedServiceName * string , yamlBytes * []byte ) ExecutionStatus {
447426 // Collect special ENVs: __MTA___<name>, __MTA_JSON___<name>, __MTA_CERT___<name>
448427 parameters , err := secure_parameters .CollectFromEnv ("__MTA" )
@@ -457,13 +436,13 @@ func setUpSpecificsForDeploymentUsingSecrets(flags *flag.FlagSet, c *DeployComma
457436 }
458437
459438 if GetBoolOpt (disposableUserProvidedServiceOpt , flags ) {
460- disposableUserProvidedServiceNameResult , err := getRandomisedUpsName (mtaId , namespace )
439+ disposableUserProvidedServiceNameResult , err := secure_parameters . GetRandomisedUpsName (mtaId , namespace )
461440 if err != nil {
462441 ui .Failed ("Failed to create disposable user-provided service name: %v" , err )
463442 return Failure
464443 }
465444
466- isDisposableUpsCreated , _ , err := c . createDisposableUps (disposableUserProvidedServiceNameResult )
445+ isDisposableUpsCreated , _ , err := secure_parameters . CreateDisposableUps (disposableUserProvidedServiceNameResult , c . cliConnection , c . CfClient )
467446 if err != nil {
468447 ui .Failed ("Could not ensure disposable user-provided service %s: %v" , disposableUserProvidedServiceName , err )
469448 return Failure
@@ -474,9 +453,9 @@ func setUpSpecificsForDeploymentUsingSecrets(flags *flag.FlagSet, c *DeployComma
474453 ui .Say ("Created disposable user-provided service %s for secure parameters. Will be automatically deleted at the end of the operation!" , terminal .EntityNameColor (disposableUserProvidedServiceNameResult ))
475454 }
476455 } else {
477- userProvidedServiceName := getUpsName (mtaId , namespace )
456+ userProvidedServiceName := secure_parameters . GetUpsName (mtaId , namespace )
478457
479- isUpsCreated , _ , err := c . validateUpsExistsOrElseCreateIt (userProvidedServiceName )
458+ isUpsCreated , _ , err := secure_parameters . ValidateUpsExistsOrElseCreateIt (userProvidedServiceName , c . cliConnection , c . CfClient )
480459 if err != nil {
481460 ui .Failed ("Could not ensure user-provided service %s: %v" , userProvidedServiceName , err )
482461 return Failure
@@ -504,102 +483,6 @@ func setUpSpecificsForDeploymentUsingSecrets(flags *flag.FlagSet, c *DeployComma
504483 return Success
505484}
506485
507- func (c * DeployCommand ) validateUpsExistsOrElseCreateIt (userProvidedServiceName string ) (upsCreatedByTheCli bool , encryptionKeyResult string , err error ) {
508- doesUpsExist , err := c .doesUpsExist (userProvidedServiceName )
509- if err != nil {
510- return false , "" , fmt .Errorf ("Check if the UPS exists: %w" , err )
511- }
512-
513- if doesUpsExist {
514- return false , "" , nil
515- }
516-
517- encryptionKey , err := getRandomEncryptionKey ()
518- if err != nil {
519- return false , "" , fmt .Errorf ("Error while generating AES-256 encryption key: %w" , err )
520- }
521-
522- space , err := c .cliConnection .GetCurrentSpace ()
523- if err != nil {
524- return false , "" , fmt .Errorf ("Failed to get the current space: %w" , err )
525- }
526-
527- if space .Guid == "" {
528- return false , "" , fmt .Errorf ("Failed to get the current space Guid" )
529- }
530-
531- upsCredentials := map [string ]string {
532- "encryptionKey" : encryptionKey ,
533- }
534-
535- _ , err = c .CfClient .CreateUserProvidedServiceInstance (userProvidedServiceName , space .Guid , upsCredentials )
536- if err != nil {
537- return false , "" , fmt .Errorf ("Failed to create user-provided service %s: %w" , userProvidedServiceName , err )
538- }
539-
540- return true , encryptionKey , nil
541- }
542-
543- func (c * DeployCommand ) createDisposableUps (userProvidedServiceName string ) (upsCreatedByTheCli bool , encryptionKeyResult string , err error ) {
544- encryptionKey , err := getRandomEncryptionKey ()
545- if err != nil {
546- return false , "" , fmt .Errorf ("Error while generating AES-256 encryption key: %w" , err )
547- }
548-
549- space , err := c .cliConnection .GetCurrentSpace ()
550- if err != nil {
551- return false , "" , fmt .Errorf ("Failed to get the current space: %w" , err )
552- }
553-
554- if space .Guid == "" {
555- return false , "" , fmt .Errorf ("Failed to get the current space Guid" )
556- }
557-
558- upsCredentials := map [string ]string {
559- "encryptionKey" : encryptionKey ,
560- }
561-
562- _ , err = c .CfClient .CreateUserProvidedServiceInstance (userProvidedServiceName , space .Guid , upsCredentials )
563- if err != nil {
564- return false , "" , fmt .Errorf ("Failed to create user-provided service %s: %w" , userProvidedServiceName , err )
565- }
566-
567- return true , encryptionKey , nil
568- }
569-
570- func getRandomEncryptionKey () (string , error ) {
571- const alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"
572-
573- encryptionKeyBytes := make ([]byte , 32 )
574- if _ , err := rand .Read (encryptionKeyBytes ); err != nil {
575- return "" , err
576- }
577-
578- for i := range encryptionKeyBytes {
579- encryptionKeyBytes [i ] = alphabet [int (encryptionKeyBytes [i ]& 63 )]
580- }
581-
582- return string (encryptionKeyBytes ), nil
583- }
584-
585- func (c * DeployCommand ) doesUpsExist (userProvidedServiceName string ) (bool , error ) {
586- space , errSpace := c .cliConnection .GetCurrentSpace ()
587- if errSpace != nil {
588- return false , fmt .Errorf ("Cannot determine the current space" )
589- }
590- spaceGuid := space .Guid
591-
592- _ , errServiceInstance := c .CfClient .GetServiceInstanceByName (userProvidedServiceName , spaceGuid )
593- if errServiceInstance != nil {
594- if errServiceInstance .Error () == "service instance not found" {
595- return false , nil
596- }
597- return false , fmt .Errorf ("Error while checking if the UPS for secure encryption exists: %w" , errServiceInstance )
598- }
599-
600- return true , nil
601- }
602-
603486func parseMtaArchiveArgument (rawMtaArchive interface {}) (bool , string ) {
604487 switch castedMtaArchive := rawMtaArchive .(type ) {
605488 case * url.URL :
0 commit comments