Added overwrite protection.
This commit is contained in:
		
							
								
								
									
										23
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								main.go
									
									
									
									
									
								
							@@ -102,8 +102,16 @@ func FileMode(secure bool) os.FileMode {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SavePEM(filename string, data []byte, secure bool) error {
 | 
					func SavePEM(filename string, data []byte, secure bool, overwrite bool) error {
 | 
				
			||||||
	return os.WriteFile(filename, data, FileMode(secure))
 | 
						if !overwrite {
 | 
				
			||||||
 | 
							if _, err := os.Stat(filename); err == nil {
 | 
				
			||||||
 | 
								return fmt.Errorf("file %s already exists (overwrite not allowed)", filename)
 | 
				
			||||||
 | 
							} else if !os.IsNotExist(err) {
 | 
				
			||||||
 | 
								return fmt.Errorf("could not check file %s: %v", filename, err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						mode := FileMode(secure)
 | 
				
			||||||
 | 
						return os.WriteFile(filename, data, mode)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Validate checks required fields and sets defaults for CAConfig
 | 
					// Validate checks required fields and sets defaults for CAConfig
 | 
				
			||||||
@@ -129,6 +137,7 @@ func (c *CAConfig) Validate() error {
 | 
				
			|||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
	initCA := flag.Bool("initca", false, "Generate a new CA certificate and key")
 | 
						initCA := flag.Bool("initca", false, "Generate a new CA certificate and key")
 | 
				
			||||||
	configPath := flag.String("config", "ca_config.hcl", "Path to CA configuration file")
 | 
						configPath := flag.String("config", "ca_config.hcl", "Path to CA configuration file")
 | 
				
			||||||
 | 
						overwrite := flag.Bool("overwrite", false, "Allow overwriting existing files")
 | 
				
			||||||
	flag.Parse()
 | 
						flag.Parse()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if *initCA {
 | 
						if *initCA {
 | 
				
			||||||
@@ -142,8 +151,14 @@ func main() {
 | 
				
			|||||||
			fmt.Println("Error generating CA:", err)
 | 
								fmt.Println("Error generating CA:", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		SavePEM("ca_cert.pem", certPEM, false)
 | 
							if err := SavePEM("ca_cert.pem", certPEM, false, *overwrite); err != nil {
 | 
				
			||||||
		SavePEM("ca_key.pem", keyPEM, true)
 | 
								fmt.Println("Error saving CA certificate:", err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if err := SavePEM("ca_key.pem", keyPEM, true, *overwrite); err != nil {
 | 
				
			||||||
 | 
								fmt.Println("Error saving CA key:", err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		fmt.Println("CA certificate and key generated.")
 | 
							fmt.Println("CA certificate and key generated.")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user