Re-arrange platform-dependent code.
This commit is contained in:
		
							parent
							
								
									09859ca0a9
								
							
						
					
					
						commit
						2c4c708b3a
					
				|  | @ -11,12 +11,8 @@ import ( | |||
| 	"golang.org/x/image/font/sfnt" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	regular *sfnt.Font | ||||
| 	confDir string | ||||
| ) | ||||
| 
 | ||||
| func init() { | ||||
| 	var err error | ||||
| 	regular, err = sfnt.Parse(goregular.TTF) | ||||
| 	if err != nil { | ||||
| 		log(Fatal, "Cannot parse default font: ", err) | ||||
|  | @ -11,11 +11,6 @@ import ( | |||
| 	"golang.org/x/image/font/sfnt" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	regular *sfnt.Font | ||||
| 	confDir string | ||||
| ) | ||||
| 
 | ||||
| func setFont() error { | ||||
| 	f, err := os.Open("/System/Library/Fonts/AppleSDGothicNeo.ttc") | ||||
| 	if err != nil { | ||||
|  |  | |||
|  | @ -17,6 +17,8 @@ import ( | |||
| 	"gioui.org/ui/measure" | ||||
| 	"gioui.org/ui/text" | ||||
| 
 | ||||
| 	"golang.org/x/image/font/sfnt" | ||||
| 
 | ||||
| 	"github.com/fsnotify/fsnotify" | ||||
| 	"gopkg.in/yaml.v2" | ||||
| 
 | ||||
|  | @ -74,6 +76,8 @@ func main() { | |||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	confDir string | ||||
| 	regular *sfnt.Font | ||||
| 	Config  conf | ||||
| 	l       []passgo.Pass | ||||
| 	mux     sync.Mutex | ||||
|  |  | |||
							
								
								
									
										25
									
								
								impl_android.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								impl_android.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| //+build android
 | ||||
| 
 | ||||
| package passgo | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| ) | ||||
| 
 | ||||
| //Clip copies a string to the clipboard
 | ||||
| func Clip(x string) { | ||||
| 	fmt.Println("Clipboard not implemented for this platform") | ||||
| } | ||||
| 
 | ||||
| func (s *Store) nativeDecrypt(name string) (string, error) { | ||||
| 	return "", fmt.Errorf("NOT IMPLEMENTED") | ||||
| } | ||||
| 
 | ||||
| func (s *Store) nativeEncrypt(pw string) ([]byte, error) { | ||||
| 	return nil, fmt.Errorf("NOT IMPLEMENTED") | ||||
| } | ||||
| 
 | ||||
| func nativeIdentities() ([]string, error) { | ||||
| 	return nil, fmt.Errorf("NOT IMPLEMENTED") | ||||
| } | ||||
| 
 | ||||
|  | @ -5,6 +5,7 @@ package passgo | |||
| import ( | ||||
| 	"bufio" | ||||
| 	"bytes" | ||||
| 	"encoding/hex" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"os/exec" | ||||
|  | @ -14,10 +15,13 @@ import ( | |||
| 	"strconv" | ||||
| 	"sync" | ||||
| 
 | ||||
| 	"golang.org/x/crypto/openpgp" | ||||
| 
 | ||||
| 	"github.com/jcmdev0/gpgagent" | ||||
| 	"github.com/fsnotify/fsnotify" | ||||
| ) | ||||
| 
 | ||||
| func (s *Store) gpgDecrypt(name string) (string, error) { | ||||
| func (s *Store) nativeDecrypt(name string) (string, error) { | ||||
| 	fmt.Println("calling gpg -d") | ||||
| 	file := path.Join(s.Dir, strings.Join([]string{name, ".gpg"}, "")) | ||||
| 	if _, err := os.Stat(file); os.IsNotExist(err) { | ||||
|  | @ -30,7 +34,7 @@ func (s *Store) gpgDecrypt(name string) (string, error) { | |||
| 	return string(output[:len(output)-1]), nil | ||||
| } | ||||
| 
 | ||||
| func (s *Store) gpgEncrypt(pw string) ([]byte, error) { | ||||
| func (s *Store) nativeEncrypt(pw string) ([]byte, error) { | ||||
| 	if s.Id == "" { | ||||
| 		return nil, fmt.Errorf("No ID") | ||||
| 	} | ||||
|  | @ -51,7 +55,7 @@ var ( | |||
| 	cachedIdentities []string | ||||
| ) | ||||
| 
 | ||||
| func gpgIdentities() ([]string, error) { | ||||
| func nativeIdentities() ([]string, error) { | ||||
| 	idMux.Lock() | ||||
| 	defer idMux.Unlock() | ||||
| 	if cachedIdentities != nil { | ||||
|  | @ -146,6 +150,34 @@ func setAgentInfo() { | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| func GPGPrompt(keys []openpgp.Key, symmetric bool) ([]byte, error) { | ||||
|        conn, err := gpgagent.NewGpgAgentConn() | ||||
|        if err != nil { | ||||
| 	       return nil, err | ||||
|        } | ||||
|        defer conn.Close() | ||||
| 
 | ||||
|        for _, key := range keys { | ||||
| 	       cacheId := strings.ToUpper(hex.EncodeToString(key.PublicKey.Fingerprint[:])) | ||||
| 	       request := gpgagent.PassphraseRequest{CacheKey: cacheId} | ||||
| 	       for i := 0; i < 3; i++ { | ||||
| 		       var passphrase string | ||||
| 		       passphrase, err = conn.GetPassphrase(&request) | ||||
| 		       if err != nil { | ||||
| 			       continue | ||||
| 		       } | ||||
| 		       err = key.PrivateKey.Decrypt([]byte(passphrase)) | ||||
| 		       if err != nil { | ||||
| 			       conn.RemoveFromCache(cacheId) | ||||
| 			       continue | ||||
| 		       } | ||||
| 		       return []byte(passphrase), nil | ||||
| 	       } | ||||
| 	       return nil, err | ||||
|        } | ||||
|        return nil, fmt.Errorf("Unable to find key") | ||||
| } | ||||
| 
 | ||||
| func init() { | ||||
| 	setAgentInfo() | ||||
| 	go func() { | ||||
|  |  | |||
|  | @ -1,12 +0,0 @@ | |||
| //+build !darwin
 | ||||
| 
 | ||||
| package passgo | ||||
| 
 | ||||
| import ( | ||||
| 	"log" | ||||
| ) | ||||
| 
 | ||||
| //Clip copies a string to the clipboard
 | ||||
| func Clip(x string) { | ||||
| 	log(Info, "Clipboard not implemented for this platform") | ||||
| } | ||||
							
								
								
									
										52
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								main.go
									
									
									
									
									
								
							|  | @ -2,7 +2,6 @@ package passgo | |||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"encoding/hex" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
|  | @ -14,8 +13,6 @@ import ( | |||
| 	"strings" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/jcmdev0/gpgagent" | ||||
| 
 | ||||
| 	"golang.org/x/crypto/openpgp" | ||||
| 	"golang.org/x/crypto/openpgp/armor" | ||||
| 	"golang.org/x/crypto/openpgp/packet" | ||||
|  | @ -26,12 +23,12 @@ var ( | |||
| 	ask      openpgp.PromptFunction | ||||
| 	Keyring  openpgp.KeyRing | ||||
| 	krTime   time.Time | ||||
| 	useGPG    bool | ||||
| 	useNative    bool | ||||
| 	homeDir  string | ||||
| ) | ||||
| 
 | ||||
| func init() { | ||||
| 	useGPG = true // default unless we can get the Go openpgp code to work
 | ||||
| 	useNative = true // default unless we can get the Go openpgp code to work
 | ||||
| 	basename = regexp.MustCompile(".gpg$") | ||||
| } | ||||
| 
 | ||||
|  | @ -85,7 +82,7 @@ func getKeyring() error { | |||
| 		//return fmt.Errorf("Can't open gnupg keyring.")
 | ||||
| 		return nil | ||||
| 	} | ||||
| 	useGPG = false | ||||
| 	useNative = false | ||||
| 	Keyring = kr | ||||
| 	krTime = time.Now() | ||||
| 	return nil | ||||
|  | @ -219,38 +216,9 @@ func AskPass(prompts ...func() []byte) openpgp.PromptFunction { | |||
| 	return ret | ||||
| } | ||||
| 
 | ||||
| //https://github.com/jcmdev0/gpgagent/blob/master/example/example.go
 | ||||
| func GPGPrompt(keys []openpgp.Key, symmetric bool) ([]byte, error) { | ||||
| 	conn, err := gpgagent.NewGpgAgentConn() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer conn.Close() | ||||
| 
 | ||||
| 	for _, key := range keys { | ||||
| 		cacheId := strings.ToUpper(hex.EncodeToString(key.PublicKey.Fingerprint[:])) | ||||
| 		request := gpgagent.PassphraseRequest{CacheKey: cacheId} | ||||
| 		for i := 0; i < 3; i++ { | ||||
| 			var passphrase string | ||||
| 			passphrase, err = conn.GetPassphrase(&request) | ||||
| 			if err != nil { | ||||
| 				continue | ||||
| 			} | ||||
| 			err = key.PrivateKey.Decrypt([]byte(passphrase)) | ||||
| 			if err != nil { | ||||
| 				conn.RemoveFromCache(cacheId) | ||||
| 				continue | ||||
| 			} | ||||
| 			return []byte(passphrase), nil | ||||
| 		} | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return nil, fmt.Errorf("Unable to find key") | ||||
| } | ||||
| 
 | ||||
| func (s *Store) Decrypt(name string, prompts ...func() []byte) (string, error) { | ||||
| 	if useGPG { | ||||
| 		return s.gpgDecrypt(name) | ||||
| 	if useNative { | ||||
| 		return s.nativeDecrypt(name) | ||||
| 	} | ||||
| 	if ask == nil { | ||||
| 		ask = AskPass(prompts...) | ||||
|  | @ -295,8 +263,8 @@ func (s *Store) Decrypt(name string, prompts ...func() []byte) (string, error) { | |||
| 
 | ||||
| func Identities() ([]string, error) { | ||||
| 	getKeyring() | ||||
| 	if useGPG { | ||||
| 		return gpgIdentities() | ||||
| 	if useNative { | ||||
| 		return nativeIdentities() | ||||
| 	} | ||||
| 	ret := make([]string, 0) | ||||
| 	for _, k := range Keyring.DecryptionKeys() { | ||||
|  | @ -310,9 +278,9 @@ func Identities() ([]string, error) { | |||
| func (s *Store) Insert(name, value string) error { | ||||
| 	var enc []byte | ||||
| 	var err error | ||||
| 	//if !useGo { // golang openpgp code not implemented yet
 | ||||
| 		fmt.Println("Calling gpgEncrypt") | ||||
| 		enc, err = s.gpgEncrypt(value) | ||||
| 	//if useNative { // golang openpgp code not implemented yet
 | ||||
| 		fmt.Println("Calling nativeEncrypt") | ||||
| 		enc, err = s.nativeEncrypt(value) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user