init.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package config
  2. import (
  3. "notabug.org/apiote/next-eeze/crypto"
  4. "notabug.org/apiote/next-eeze/fido"
  5. "notabug.org/apiote/next-eeze/fs"
  6. "encoding/hex"
  7. "fmt"
  8. "os"
  9. "golang.org/x/crypto/ssh/terminal"
  10. )
  11. // todo memguard masterPassword
  12. func Init(masterPassword string) {
  13. // todo memguard
  14. credentials := fs.Credentials{}
  15. fmt.Print("Server address: ")
  16. fmt.Scanf("%s", &credentials.Server)
  17. fmt.Print("Username: ")
  18. fmt.Scanf("%s", &credentials.Username)
  19. fmt.Print("Password: ")
  20. // todo memguard
  21. p_b, _ := terminal.ReadPassword(int(os.Stdin.Fd()))
  22. credentials.Password = string(p_b)
  23. fmt.Print("\n")
  24. fs.SaveCredentials(credentials, masterPassword)
  25. }
  26. func Reëncrypt(masterPassword string, useFido bool) (string, error) {
  27. newMasterPassword := ""
  28. err := fs.RemoveFidoCredential()
  29. if err != nil {
  30. fmt.Println(err)
  31. return "", err
  32. }
  33. if useFido {
  34. cdh := crypto.MakeSalt()
  35. salt := crypto.MakeSalt()
  36. credID := fido.Setup("next-eeze", "", cdh) // todo pin
  37. secret := fido.GetHmacSecret("next-eeze", "", cdh, salt, credID)
  38. newMasterPassword = hex.EncodeToString(secret)
  39. fs.SaveFidoCredential(fs.FidoCredential{
  40. Salt: salt,
  41. Cdh: cdh,
  42. CredID: credID,
  43. })
  44. } else {
  45. fmt.Print("New master password: ")
  46. // todo memguard
  47. p_b, _ := terminal.ReadPassword(int(os.Stdin.Fd()))
  48. newMasterPassword = string(p_b)
  49. fmt.Print("\n")
  50. }
  51. // todo memguard
  52. credentials, err := fs.ReadCredentials(masterPassword)
  53. if err != nil {
  54. return "", err
  55. }
  56. err = fs.SaveCredentials(credentials, newMasterPassword)
  57. if err != nil {
  58. return "", err
  59. }
  60. // todo memguard
  61. passwords, err := fs.Read(masterPassword)
  62. if err != nil {
  63. return "", err
  64. }
  65. err = fs.SaveBare(passwords, newMasterPassword)
  66. if err != nil {
  67. return "", err
  68. }
  69. return newMasterPassword, nil
  70. }