client.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package agent
  2. import (
  3. "log"
  4. "net"
  5. "os"
  6. "os/exec"
  7. "os/user"
  8. "git.sr.ht/~sircmpwn/go-bare"
  9. )
  10. func GetMasterPassword(block bool) (string, error) {
  11. // todo memguard
  12. var masterPassword = ""
  13. var command byte
  14. if block {
  15. command = 2
  16. } else {
  17. command = 1
  18. }
  19. user, err := user.Current()
  20. if err != nil {
  21. log.Println("Error getting user ", err)
  22. return "", err
  23. }
  24. fileInfo, err := os.Stat("/tmp/eeze-agent-" + user.Username)
  25. if err == nil && fileInfo.Mode()&os.ModeSocket != 0 {
  26. conn, err := net.Dial("unix", "/tmp/eeze-agent-"+user.Username)
  27. if err != nil {
  28. log.Println("Warning, cannot connect to agent", err)
  29. return "", err
  30. }
  31. defer conn.Close()
  32. _, err = conn.Write([]byte{command})
  33. if err != nil {
  34. log.Println("Warning, cannot write to agent", err)
  35. return "", err
  36. }
  37. r := bare.NewReader(conn)
  38. masterPassword, err = r.ReadString()
  39. if err != nil {
  40. log.Println("Warning, cannot read from agent", err)
  41. return "", err
  42. }
  43. }
  44. return masterPassword, nil
  45. }
  46. // todo memguard
  47. func GiveMasterPassword(masterPassword string) error {
  48. user, err := user.Current()
  49. if err != nil {
  50. log.Println("Error getting user ", err)
  51. return err
  52. }
  53. fileInfo, err := os.Stat("/tmp/eeze-agent-" + user.Username)
  54. if err == nil && fileInfo.Mode()&os.ModeSocket != 0 {
  55. conn, err := net.Dial("unix", "/tmp/eeze-agent-"+user.Username)
  56. if err != nil {
  57. log.Println("Warning, cannot connect to agent", err)
  58. return err
  59. }
  60. defer conn.Close()
  61. w := bare.NewWriter(conn)
  62. err = w.WriteU8(0)
  63. if err != nil {
  64. log.Println("Warning, cannot write cmd to agent", err)
  65. return err
  66. }
  67. err = w.WriteString(masterPassword)
  68. if err != nil {
  69. log.Println("Warning, cannot write password to agent", err)
  70. return err
  71. }
  72. }
  73. return nil
  74. }
  75. func StartAgent() {
  76. exec.Command("eeze-agent").Run()
  77. }