mirror of
				https://github.com/maxgoedjen/secretive.git
				synced 2025-10-31 15:30:57 +00:00 
			
		
		
		
	Add ability disable the SSH comment via settings
This commit is contained in:
		
							parent
							
								
									70cfdf8327
								
							
						
					
					
						commit
						46022962b8
					
				| @ -53,6 +53,8 @@ | |||||||
| 		50BB046B2418AAAE00D6E079 /* EmptyStoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50BB046A2418AAAE00D6E079 /* EmptyStoreView.swift */; }; | 		50BB046B2418AAAE00D6E079 /* EmptyStoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50BB046A2418AAAE00D6E079 /* EmptyStoreView.swift */; }; | ||||||
| 		50C385A52407A76D00AF2719 /* SecretDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50C385A42407A76D00AF2719 /* SecretDetailView.swift */; }; | 		50C385A52407A76D00AF2719 /* SecretDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50C385A42407A76D00AF2719 /* SecretDetailView.swift */; }; | ||||||
| 		50E9CF422B51D596004AB36D /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 500B93C22B478D8400E157DE /* Localizable.xcstrings */; }; | 		50E9CF422B51D596004AB36D /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 500B93C22B478D8400E157DE /* Localizable.xcstrings */; }; | ||||||
|  | 		DA140C502B8DF70500948F81 /* SettingsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA140C4F2B8DF70500948F81 /* SettingsHelper.swift */; }; | ||||||
|  | 		DA22A3402B712A57004D45DD /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA22A33F2B712A57004D45DD /* SettingsView.swift */; }; | ||||||
| /* End PBXBuildFile section */ | /* End PBXBuildFile section */ | ||||||
| 
 | 
 | ||||||
| /* Begin PBXContainerItemProxy section */ | /* Begin PBXContainerItemProxy section */ | ||||||
| @ -152,6 +154,9 @@ | |||||||
| 		50B8550C24138C4F009958AC /* DeleteSecretView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeleteSecretView.swift; sourceTree = "<group>"; }; | 		50B8550C24138C4F009958AC /* DeleteSecretView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeleteSecretView.swift; sourceTree = "<group>"; }; | ||||||
| 		50BB046A2418AAAE00D6E079 /* EmptyStoreView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStoreView.swift; sourceTree = "<group>"; }; | 		50BB046A2418AAAE00D6E079 /* EmptyStoreView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStoreView.swift; sourceTree = "<group>"; }; | ||||||
| 		50C385A42407A76D00AF2719 /* SecretDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretDetailView.swift; sourceTree = "<group>"; }; | 		50C385A42407A76D00AF2719 /* SecretDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretDetailView.swift; sourceTree = "<group>"; }; | ||||||
|  | 		DA140C4F2B8DF70500948F81 /* SettingsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsHelper.swift; sourceTree = "<group>"; }; | ||||||
|  | 		DA22A33C2B6EB835004D45DD /* SecretiveRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SecretiveRelease.entitlements; sourceTree = "<group>"; }; | ||||||
|  | 		DA22A33F2B712A57004D45DD /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; }; | ||||||
| /* End PBXFileReference section */ | /* End PBXFileReference section */ | ||||||
| 
 | 
 | ||||||
| /* Begin PBXFrameworksBuildPhase section */ | /* Begin PBXFrameworksBuildPhase section */ | ||||||
| @ -192,6 +197,7 @@ | |||||||
| 			isa = PBXGroup; | 			isa = PBXGroup; | ||||||
| 			children = ( | 			children = ( | ||||||
| 				50033AC227813F1700253856 /* BundleIDs.swift */, | 				50033AC227813F1700253856 /* BundleIDs.swift */, | ||||||
|  | 				DA140C4F2B8DF70500948F81 /* SettingsHelper.swift */, | ||||||
| 			); | 			); | ||||||
| 			path = Helpers; | 			path = Helpers; | ||||||
| 			sourceTree = "<group>"; | 			sourceTree = "<group>"; | ||||||
| @ -282,6 +288,7 @@ | |||||||
| 				50153E1F250AFCB200525160 /* UpdateView.swift */, | 				50153E1F250AFCB200525160 /* UpdateView.swift */, | ||||||
| 				5066A6C12516F303004B5A36 /* SetupView.swift */, | 				5066A6C12516F303004B5A36 /* SetupView.swift */, | ||||||
| 				5066A6C72516FE6E004B5A36 /* CopyableView.swift */, | 				5066A6C72516FE6E004B5A36 /* CopyableView.swift */, | ||||||
|  | 				DA22A33F2B712A57004D45DD /* SettingsView.swift */, | ||||||
| 			); | 			); | ||||||
| 			path = Views; | 			path = Views; | ||||||
| 			sourceTree = "<group>"; | 			sourceTree = "<group>"; | ||||||
| @ -497,6 +504,7 @@ | |||||||
| 				5079BA0F250F29BF00EA86F4 /* StoreListView.swift in Sources */, | 				5079BA0F250F29BF00EA86F4 /* StoreListView.swift in Sources */, | ||||||
| 				50617DD223FCEFA90099B055 /* PreviewStore.swift in Sources */, | 				50617DD223FCEFA90099B055 /* PreviewStore.swift in Sources */, | ||||||
| 				5066A6F7251829B1004B5A36 /* ShellConfigurationController.swift in Sources */, | 				5066A6F7251829B1004B5A36 /* ShellConfigurationController.swift in Sources */, | ||||||
|  | 				DA22A3402B712A57004D45DD /* SettingsView.swift in Sources */, | ||||||
| 				50033AC327813F1700253856 /* BundleIDs.swift in Sources */, | 				50033AC327813F1700253856 /* BundleIDs.swift in Sources */, | ||||||
| 				508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */, | 				508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */, | ||||||
| 				50C385A52407A76D00AF2719 /* SecretDetailView.swift in Sources */, | 				50C385A52407A76D00AF2719 /* SecretDetailView.swift in Sources */, | ||||||
| @ -508,6 +516,7 @@ | |||||||
| 				50BB046B2418AAAE00D6E079 /* EmptyStoreView.swift in Sources */, | 				50BB046B2418AAAE00D6E079 /* EmptyStoreView.swift in Sources */, | ||||||
| 				50617D8323FCE48E0099B055 /* App.swift in Sources */, | 				50617D8323FCE48E0099B055 /* App.swift in Sources */, | ||||||
| 				506772C92425BB8500034DED /* NoStoresView.swift in Sources */, | 				506772C92425BB8500034DED /* NoStoresView.swift in Sources */, | ||||||
|  | 				DA140C502B8DF70500948F81 /* SettingsHelper.swift in Sources */, | ||||||
| 				50153E22250DECA300525160 /* SecretListItemView.swift in Sources */, | 				50153E22250DECA300525160 /* SecretListItemView.swift in Sources */, | ||||||
| 				508A58B5241ED48F0069DC07 /* PreviewAgentStatusChecker.swift in Sources */, | 				508A58B5241ED48F0069DC07 /* PreviewAgentStatusChecker.swift in Sources */, | ||||||
| 				508A58AA241E06B40069DC07 /* PreviewUpdater.swift in Sources */, | 				508A58AA241E06B40069DC07 /* PreviewUpdater.swift in Sources */, | ||||||
|  | |||||||
| @ -62,6 +62,9 @@ struct Secretive: App { | |||||||
|             } |             } | ||||||
|             SidebarCommands() |             SidebarCommands() | ||||||
|         } |         } | ||||||
|  |         Settings { | ||||||
|  |             SettingsView() | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -2510,6 +2510,9 @@ | |||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |     }, | ||||||
|  |     "General" : { | ||||||
|  | 
 | ||||||
|     }, |     }, | ||||||
|     "no_secure_storage_description" : { |     "no_secure_storage_description" : { | ||||||
|       "localizations" : { |       "localizations" : { | ||||||
| @ -2702,6 +2705,9 @@ | |||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |     }, | ||||||
|  |     "None" : { | ||||||
|  | 
 | ||||||
|     }, |     }, | ||||||
|     "persist_authentication_accept_button" : { |     "persist_authentication_accept_button" : { | ||||||
|       "comment" : "When the user authorizes an action using a secret that requires unlock, they're shown a notification offering to leave the secret unlocked for a set period of time. This is the title for the notification.", |       "comment" : "When the user authorizes an action using a secret that requires unlock, they're shown a notification offering to leave the secret unlocked for a set period of time. This is the title for the notification.", | ||||||
| @ -3415,6 +3421,9 @@ | |||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |     }, | ||||||
|  |     "Settings" : { | ||||||
|  | 
 | ||||||
|     }, |     }, | ||||||
|     "setup_agent_activity_monitor_description" : { |     "setup_agent_activity_monitor_description" : { | ||||||
|       "localizations" : { |       "localizations" : { | ||||||
| @ -4464,6 +4473,12 @@ | |||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |     }, | ||||||
|  |     "SSH Public Key Comment" : { | ||||||
|  | 
 | ||||||
|  |     }, | ||||||
|  |     "SSH public keys can be extended with an arbitrary comment string without changing the meaning of the key." : { | ||||||
|  | 
 | ||||||
|     }, |     }, | ||||||
|     "unnamed_secret" : { |     "unnamed_secret" : { | ||||||
|       "extractionState" : "manual", |       "extractionState" : "manual", | ||||||
|  | |||||||
| @ -4,6 +4,7 @@ import SecretKit | |||||||
| struct SecretDetailView<SecretType: Secret>: View { | struct SecretDetailView<SecretType: Secret>: View { | ||||||
|      |      | ||||||
|     @State var secret: SecretType |     @State var secret: SecretType | ||||||
|  |     @AppStorage("com.maxgoedjen.Secretive.commentStyle") var style: CommentStyle = .keyAndHost | ||||||
| 
 | 
 | ||||||
|     private let keyWriter = OpenSSHKeyWriter() |     private let keyWriter = OpenSSHKeyWriter() | ||||||
|     private let publicKeyFileStoreController = PublicKeyFileStoreController(homeDirectory: NSHomeDirectory().replacingOccurrences(of: Bundle.main.hostBundleID, with: Bundle.main.agentBundleID)) |     private let publicKeyFileStoreController = PublicKeyFileStoreController(homeDirectory: NSHomeDirectory().replacingOccurrences(of: Bundle.main.hostBundleID, with: Bundle.main.agentBundleID)) | ||||||
| @ -42,9 +43,13 @@ struct SecretDetailView<SecretType: Secret>: View { | |||||||
|     } |     } | ||||||
|      |      | ||||||
|     var keyString: String { |     var keyString: String { | ||||||
|  |         switch style { | ||||||
|  |         case CommentStyle.none: | ||||||
|  |             keyWriter.openSSHString(secret: secret, comment: "") | ||||||
|  |         default: | ||||||
|             keyWriter.openSSHString(secret: secret, comment: "\(dashedKeyName)@\(dashedHostName)") |             keyWriter.openSSHString(secret: secret, comment: "\(dashedKeyName)@\(dashedHostName)") | ||||||
|         } |         } | ||||||
| 
 |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #if DEBUG | #if DEBUG | ||||||
|  | |||||||
							
								
								
									
										57
									
								
								Sources/Secretive/Views/SettingsView.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								Sources/Secretive/Views/SettingsView.swift
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | |||||||
|  | // | ||||||
|  | //  SettingsView.swift | ||||||
|  | //  Secretive | ||||||
|  | // | ||||||
|  | //  Created by Paul Heidekrüger on 05.02.24. | ||||||
|  | //  Copyright © 2024 Max Goedjen. All rights reserved. | ||||||
|  | // | ||||||
|  | 
 | ||||||
|  | import SwiftUI | ||||||
|  | 
 | ||||||
|  | enum CommentStyle: String, CaseIterable, Identifiable { | ||||||
|  |     case keyAndHost, none | ||||||
|  |     var id: Self { self } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | struct GeneralSettingsView: View { | ||||||
|  |     @AppStorage("com.maxgoedjen.Secretive.commentStyle") var selectedCommentStyle: CommentStyle = .keyAndHost | ||||||
|  | 
 | ||||||
|  |     var body: some View { | ||||||
|  |         VStack(alignment: .leading) { | ||||||
|  |             Section(footer: Text("SSH public keys can be extended with an arbitrary comment string without changing the meaning of the key.") | ||||||
|  |                 .font(.caption) | ||||||
|  |                 .fontWeight(.light)) { | ||||||
|  |                     Picker("SSH Public Key Comment", selection: $selectedCommentStyle) { | ||||||
|  |                         Text("Default").tag(CommentStyle.keyAndHost) | ||||||
|  |                         Text("None").tag(CommentStyle.none) | ||||||
|  |                     } | ||||||
|  |                     .pickerStyle(DefaultPickerStyle()) | ||||||
|  |                 } | ||||||
|  |         } | ||||||
|  |         .padding(20) | ||||||
|  |         .frame(width: 350, height: 100) | ||||||
|  |         .navigationTitle("Settings") | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct SettingsView: View { | ||||||
|  |     private enum Tabs: Hashable { | ||||||
|  |         case general | ||||||
|  |     } | ||||||
|  |     var body: some View { | ||||||
|  |         TabView { | ||||||
|  |             GeneralSettingsView() | ||||||
|  |                 .tabItem { | ||||||
|  |                     Label("General", systemImage: "gear") | ||||||
|  |                 } | ||||||
|  |                 .tag(Tabs.general) | ||||||
|  |         } | ||||||
|  |         .padding(20) | ||||||
|  |         .frame(width: 500, height: 200) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #Preview { | ||||||
|  |     SettingsView() | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user