| 427 | } |
| 428 | |
| 429 | func rpcSetDevModeState(enabled bool) error { |
| 430 | if enabled { |
| 431 | if _, err := os.Stat(devModeFile); os.IsNotExist(err) { |
| 432 | if err := os.MkdirAll(filepath.Dir(devModeFile), 0755); err != nil { |
| 433 | return fmt.Errorf("failed to create directory for devmode file: %w", err) |
| 434 | } |
| 435 | if err := os.WriteFile(devModeFile, []byte{}, 0644); err != nil { |
| 436 | return fmt.Errorf("failed to create devmode file: %w", err) |
| 437 | } |
| 438 | } else { |
| 439 | logger.Debug().Msg("dev mode already enabled") |
| 440 | return nil |
| 441 | } |
| 442 | } else { |
| 443 | if _, err := os.Stat(devModeFile); err == nil { |
| 444 | if err := os.Remove(devModeFile); err != nil { |
| 445 | return fmt.Errorf("failed to remove devmode file: %w", err) |
| 446 | } |
| 447 | } else if os.IsNotExist(err) { |
| 448 | logger.Debug().Msg("dev mode already disabled") |
| 449 | return nil |
| 450 | } else { |
| 451 | return fmt.Errorf("error checking dev mode file: %w", err) |
| 452 | } |
| 453 | } |
| 454 | |
| 455 | cmd := exec.Command("dropbear.sh") |
| 456 | output, err := cmd.CombinedOutput() |
| 457 | if err != nil { |
| 458 | logger.Warn().Err(err).Bytes("output", output).Msg("Failed to start/stop SSH") |
| 459 | return fmt.Errorf("failed to start/stop SSH, you may need to reboot for changes to take effect") |
| 460 | } |
| 461 | |
| 462 | return nil |
| 463 | } |
| 464 | |
| 465 | func rpcGetSSHKeyState() (string, error) { |
| 466 | keyData, err := os.ReadFile(sshKeyFile) |