@@ -13,10 +13,13 @@ import (
1313 "golang.org/x/crypto/nacl/secretbox"
1414 "golang.org/x/crypto/openpgp"
1515
16+ "github.com/emersion/hydroxide/config"
1617 "github.com/emersion/hydroxide/protonmail"
1718)
1819
19- const authFile = "auth.json"
20+ func authFilePath () (string , error ) {
21+ return config .Path ("auth.json" )
22+ }
2023
2124type CachedAuth struct {
2225 protonmail.Auth
@@ -26,7 +29,11 @@ type CachedAuth struct {
2629}
2730
2831func readCachedAuths () (map [string ]string , error ) {
29- f , err := os .Open (authFile )
32+ p , err := authFilePath ()
33+ if err != nil {
34+ return nil , err
35+ }
36+ f , err := os .Open (p )
3037 if os .IsNotExist (err ) {
3138 return nil , nil
3239 } else if err != nil {
@@ -40,7 +47,11 @@ func readCachedAuths() (map[string]string, error) {
4047}
4148
4249func saveAuths (auths map [string ]string ) error {
43- f , err := os .Create (authFile )
50+ p , err := authFilePath ()
51+ if err != nil {
52+ return err
53+ }
54+ f , err := os .Create (p )
4455 if err != nil {
4556 return err
4657 }
@@ -123,6 +134,19 @@ func authenticate(c *protonmail.Client, cachedAuth *CachedAuth, username string)
123134 return c .Unlock (auth , cachedAuth .MailboxPassword )
124135}
125136
137+ func ListUsernames () ([]string , error ) {
138+ auths , err := readCachedAuths ()
139+ if err != nil {
140+ return nil , err
141+ }
142+
143+ l := make ([]string , 0 , len (auths ))
144+ for username , _ := range auths {
145+ l = append (l , username )
146+ }
147+ return l , nil
148+ }
149+
126150func GeneratePassword () (secretKey * [32 ]byte , password string , err error ) {
127151 var key [32 ]byte
128152 if _ , err = io .ReadFull (rand .Reader , key [:]); err != nil {
0 commit comments