22
33namespace STS \Keep \Commands \Concerns ;
44
5+ use STS \Keep \Data \VaultConfig ;
6+ use STS \Keep \Facades \Keep ;
57use function Laravel \Prompts \text ;
68use function Laravel \Prompts \select ;
79use function Laravel \Prompts \info ;
@@ -12,7 +14,7 @@ trait ConfiguresVaults
1214 protected function configureNewVault (): ?array
1315 {
1416 // Get available vault classes and build options
15- $ availableVaults = $ this -> manager -> getAvailableVaults ();
17+ $ availableVaults = Keep:: getAvailableVaults ();
1618 $ driverOptions = [];
1719 $ vaultClassMap = [];
1820
@@ -38,34 +40,31 @@ protected function configureNewVault(): ?array
3840 default: $ defaultSlug ,
3941 hint: 'Short identifier used in secret templates like {vault:DB_PASSWORD} '
4042 );
41-
42- // Validate slug uniqueness
43- $ existingVaults = $ this ->manager ->getConfiguredVaults ();
44- if (isset ($ existingVaults [$ slug ])) {
43+
44+ $ existingVaults = Keep::getConfiguredVaults ();
45+ if ($ existingVaults ->has ($ slug )) {
4546 error ("A vault with slug ' {$ slug }' already exists! " );
4647 return null ;
4748 }
48-
49- // Get friendly name
49+
5050 $ friendlyName = text (
5151 label: 'Friendly name for this vault ' ,
5252 default: $ selectedVaultClass ::NAME ,
5353 hint: 'A descriptive name to identify this vault configuration '
5454 );
55-
56- // Configure the specific vault using dynamic prompts
57- $ vaultConfig = $ this ->configureVaultSettings ($ selectedVaultClass , $ friendlyName );
55+
56+ $ vaultConfig = $ this ->configureVaultSettings ($ selectedVaultClass , $ friendlyName , $ slug );
5857
5958 if (!$ vaultConfig ) {
6059 error ('Failed to configure vault ' );
6160 return null ;
6261 }
6362
64- // Save the vault configuration
65- $ this -> saveVaultConfig ( $ slug , $ vaultConfig );
63+ // Save the vault configuration using robust VaultConfiguration object
64+ VaultConfig:: fromArray ( $ vaultConfig )-> save ( );
6665
6766 // Set as default vault if none exists
68- if (empty ($ this -> manager -> getSetting ('default_vault ' ))) {
67+ if (empty (Keep:: getSetting ('default_vault ' ))) {
6968 info ("Setting ' {$ slug }' as your default vault since you don't have one yet. " );
7069 $ this ->setDefaultVault ($ slug );
7170 }
@@ -77,7 +76,7 @@ protected function configureNewVault(): ?array
7776
7877 private function generateUniqueSlug (string $ driver ): string
7978 {
80- $ existingVaults = $ this -> manager -> getConfiguredVaults ();
79+ $ existingVaults = Keep:: getConfiguredVaults ();
8180
8281 // If the driver doesn't exist, use it as-is
8382 if (!isset ($ existingVaults [$ driver ])) {
@@ -93,13 +92,14 @@ private function generateUniqueSlug(string $driver): string
9392 return "{$ driver }{$ counter }" ;
9493 }
9594
96- private function configureVaultSettings (string $ vaultClass , string $ friendlyName ): ?array
95+ private function configureVaultSettings (string $ vaultClass , string $ friendlyName, string $ slug ): ?array
9796 {
9897 info ("Configuring {$ friendlyName }... " );
9998
10099 // Get dynamic prompts from the vault class
101100 $ prompts = $ vaultClass ::configure ();
102101 $ config = [
102+ 'slug ' => $ slug ,
103103 'driver ' => $ vaultClass ::DRIVER ,
104104 'name ' => $ friendlyName
105105 ];
@@ -117,17 +117,23 @@ private function configureVaultSettings(string $vaultClass, string $friendlyName
117117 return $ config ;
118118 }
119119
120- private function saveVaultConfig (string $ name , array $ config ): void
121- {
122- $ vaultPath = getcwd () . "/.keep/vaults/ {$ name }.json " ;
123- file_put_contents ($ vaultPath , json_encode ($ config , JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES ));
124- }
125-
126120 private function setDefaultVault (string $ vaultName ): void
127121 {
128- $ settingsPath = getcwd () . '/.keep/settings.json ' ;
129- $ settings = json_decode (file_get_contents ($ settingsPath ), true );
130- $ settings ['default_vault ' ] = $ vaultName ;
131- file_put_contents ($ settingsPath , json_encode ($ settings , JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES ));
122+ // Load existing settings or create minimal settings if none exist
123+ $ settings = \STS \Keep \Data \Settings::load ();
124+
125+ if ($ settings ) {
126+ $ updatedSettings = $ settings ->withDefaultVault ($ vaultName );
127+ } else {
128+ // Create minimal settings if file doesn't exist
129+ $ updatedSettings = new \STS \Keep \Data \Settings (
130+ appName: 'keep-app ' ,
131+ namespace: 'keep-app ' ,
132+ stages: ['local ' , 'staging ' , 'production ' ],
133+ defaultVault: $ vaultName
134+ );
135+ }
136+
137+ $ updatedSettings ->save ();
132138 }
133139}
0 commit comments