Update mautrix-go and move crypto store to XDG_DATA_HOME
This commit is contained in:
		@@ -65,6 +65,7 @@ type Config struct {
 | 
				
			|||||||
	NotifySound bool `yaml:"notify_sound"`
 | 
						NotifySound bool `yaml:"notify_sound"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Dir          string `yaml:"-"`
 | 
						Dir          string `yaml:"-"`
 | 
				
			||||||
 | 
						DataDir      string `yaml:"data_dir"`
 | 
				
			||||||
	CacheDir     string `yaml:"cache_dir"`
 | 
						CacheDir     string `yaml:"cache_dir"`
 | 
				
			||||||
	HistoryPath  string `yaml:"history_path"`
 | 
						HistoryPath  string `yaml:"history_path"`
 | 
				
			||||||
	RoomListPath string `yaml:"room_list_path"`
 | 
						RoomListPath string `yaml:"room_list_path"`
 | 
				
			||||||
@@ -81,9 +82,10 @@ type Config struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewConfig creates a config that loads data from the given directory.
 | 
					// NewConfig creates a config that loads data from the given directory.
 | 
				
			||||||
func NewConfig(configDir, cacheDir, downloadDir string) *Config {
 | 
					func NewConfig(configDir, dataDir, cacheDir, downloadDir string) *Config {
 | 
				
			||||||
	return &Config{
 | 
						return &Config{
 | 
				
			||||||
		Dir:          configDir,
 | 
							Dir:          configDir,
 | 
				
			||||||
 | 
							DataDir:      dataDir,
 | 
				
			||||||
		CacheDir:     cacheDir,
 | 
							CacheDir:     cacheDir,
 | 
				
			||||||
		DownloadDir:  downloadDir,
 | 
							DownloadDir:  downloadDir,
 | 
				
			||||||
		HistoryPath:  filepath.Join(cacheDir, "history.db"),
 | 
							HistoryPath:  filepath.Join(cacheDir, "history.db"),
 | 
				
			||||||
@@ -108,8 +110,14 @@ func (config *Config) Clear() {
 | 
				
			|||||||
	config.nosave = true
 | 
						config.nosave = true
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ClearData clears non-temporary session data.
 | 
				
			||||||
 | 
					func (config *Config) ClearData() {
 | 
				
			||||||
 | 
						_ = os.RemoveAll(config.DataDir)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (config *Config) CreateCacheDirs() {
 | 
					func (config *Config) CreateCacheDirs() {
 | 
				
			||||||
	_ = os.MkdirAll(config.CacheDir, 0700)
 | 
						_ = os.MkdirAll(config.CacheDir, 0700)
 | 
				
			||||||
 | 
						_ = os.MkdirAll(config.DataDir, 0700)
 | 
				
			||||||
	_ = os.MkdirAll(config.StateDir, 0700)
 | 
						_ = os.MkdirAll(config.StateDir, 0700)
 | 
				
			||||||
	_ = os.MkdirAll(config.MediaDir, 0700)
 | 
						_ = os.MkdirAll(config.MediaDir, 0700)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -122,6 +130,7 @@ func (config *Config) DeleteSession() {
 | 
				
			|||||||
	config.Rooms = rooms.NewRoomCache(config.RoomListPath, config.StateDir, config.RoomCacheSize, config.RoomCacheAge, config.GetUserID)
 | 
						config.Rooms = rooms.NewRoomCache(config.RoomListPath, config.StateDir, config.RoomCacheSize, config.RoomCacheAge, config.GetUserID)
 | 
				
			||||||
	config.PushRules = nil
 | 
						config.PushRules = nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						config.ClearData()
 | 
				
			||||||
	config.Clear()
 | 
						config.Clear()
 | 
				
			||||||
	config.nosave = false
 | 
						config.nosave = false
 | 
				
			||||||
	config.CreateCacheDirs()
 | 
						config.CreateCacheDirs()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@@ -21,7 +21,7 @@ require (
 | 
				
			|||||||
	golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
 | 
						golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
 | 
				
			||||||
	gopkg.in/toast.v1 v1.0.0-20180812000517-0a84660828b2
 | 
						gopkg.in/toast.v1 v1.0.0-20180812000517-0a84660828b2
 | 
				
			||||||
	gopkg.in/yaml.v2 v2.2.8
 | 
						gopkg.in/yaml.v2 v2.2.8
 | 
				
			||||||
	maunium.net/go/mautrix v0.2.0-beta.4.0.20200427215704-fe82e2b914c8
 | 
						maunium.net/go/mautrix v0.2.0-beta.4.0.20200428185931-73915bafb538
 | 
				
			||||||
	maunium.net/go/mauview v0.1.0
 | 
						maunium.net/go/mauview v0.1.0
 | 
				
			||||||
	maunium.net/go/tcell v0.1.0
 | 
						maunium.net/go/tcell v0.1.0
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.sum
									
									
									
									
									
								
							@@ -86,6 +86,8 @@ maunium.net/go/mautrix v0.2.0-beta.4.0.20200426213554-b07cb6dc1f6b h1:s3+wlMmmtp
 | 
				
			|||||||
maunium.net/go/mautrix v0.2.0-beta.4.0.20200426213554-b07cb6dc1f6b/go.mod h1:SkGZzch8CvU2qKtNpYxtzZ0sQxfVEJ3IsVVLSUBUx9Y=
 | 
					maunium.net/go/mautrix v0.2.0-beta.4.0.20200426213554-b07cb6dc1f6b/go.mod h1:SkGZzch8CvU2qKtNpYxtzZ0sQxfVEJ3IsVVLSUBUx9Y=
 | 
				
			||||||
maunium.net/go/mautrix v0.2.0-beta.4.0.20200427215704-fe82e2b914c8 h1:xflYDdpEonVTaw1Diq4z3ZK72Y8/TutiQgKOrHgfOCA=
 | 
					maunium.net/go/mautrix v0.2.0-beta.4.0.20200427215704-fe82e2b914c8 h1:xflYDdpEonVTaw1Diq4z3ZK72Y8/TutiQgKOrHgfOCA=
 | 
				
			||||||
maunium.net/go/mautrix v0.2.0-beta.4.0.20200427215704-fe82e2b914c8/go.mod h1:SkGZzch8CvU2qKtNpYxtzZ0sQxfVEJ3IsVVLSUBUx9Y=
 | 
					maunium.net/go/mautrix v0.2.0-beta.4.0.20200427215704-fe82e2b914c8/go.mod h1:SkGZzch8CvU2qKtNpYxtzZ0sQxfVEJ3IsVVLSUBUx9Y=
 | 
				
			||||||
 | 
					maunium.net/go/mautrix v0.2.0-beta.4.0.20200428185931-73915bafb538 h1:E/6URkgRmxhNid8mA+PV25Bi8F/4Yg5nmsxIi/MWDrU=
 | 
				
			||||||
 | 
					maunium.net/go/mautrix v0.2.0-beta.4.0.20200428185931-73915bafb538/go.mod h1:SkGZzch8CvU2qKtNpYxtzZ0sQxfVEJ3IsVVLSUBUx9Y=
 | 
				
			||||||
maunium.net/go/mauview v0.1.0 h1:x2WdkKI2zdriJuPAB0CKlwmnHGE7W9xfM5z6RgG+IIg=
 | 
					maunium.net/go/mauview v0.1.0 h1:x2WdkKI2zdriJuPAB0CKlwmnHGE7W9xfM5z6RgG+IIg=
 | 
				
			||||||
maunium.net/go/mauview v0.1.0/go.mod h1:og9WbzmWe9SNYNyOFlCv8qa9zMcOvG2nzRJ5vYyud9U=
 | 
					maunium.net/go/mauview v0.1.0/go.mod h1:og9WbzmWe9SNYNyOFlCv8qa9zMcOvG2nzRJ5vYyud9U=
 | 
				
			||||||
maunium.net/go/tcell v0.1.0 h1:XzsEoGCvOw5nac+tlkSLzQcliLYTN4PrtA7ar2ptjSM=
 | 
					maunium.net/go/tcell v0.1.0 h1:XzsEoGCvOw5nac+tlkSLzQcliLYTN4PrtA7ar2ptjSM=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,12 +38,12 @@ type Gomuks struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// NewGomuks creates a new Gomuks instance with everything initialized,
 | 
					// NewGomuks creates a new Gomuks instance with everything initialized,
 | 
				
			||||||
// but does not start it.
 | 
					// but does not start it.
 | 
				
			||||||
func NewGomuks(uiProvider ifc.UIProvider, configDir, cacheDir, downloadDir string) *Gomuks {
 | 
					func NewGomuks(uiProvider ifc.UIProvider, configDir, dataDir, cacheDir, downloadDir string) *Gomuks {
 | 
				
			||||||
	gmx := &Gomuks{
 | 
						gmx := &Gomuks{
 | 
				
			||||||
		stop: make(chan bool, 1),
 | 
							stop: make(chan bool, 1),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gmx.config = config.NewConfig(configDir, cacheDir, downloadDir)
 | 
						gmx.config = config.NewConfig(configDir, dataDir, cacheDir, downloadDir)
 | 
				
			||||||
	gmx.ui = uiProvider(gmx)
 | 
						gmx.ui = uiProvider(gmx)
 | 
				
			||||||
	gmx.matrix = matrix.NewContainer(gmx)
 | 
						gmx.matrix = matrix.NewContainer(gmx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										86
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										86
									
								
								main.go
									
									
									
									
									
								
							@@ -48,24 +48,32 @@ func main() {
 | 
				
			|||||||
	debug.Initialize()
 | 
						debug.Initialize()
 | 
				
			||||||
	defer debug.Recover()
 | 
						defer debug.Recover()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	configDir, err := UserConfigDir()
 | 
						var configDir, dataDir, cacheDir, downloadDir string
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						configDir, err = UserConfigDir()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		fmt.Fprintln(os.Stderr, "Failed to get config directory:", err)
 | 
							_, _ = fmt.Fprintln(os.Stderr, "Failed to get config directory:", err)
 | 
				
			||||||
		os.Exit(3)
 | 
							os.Exit(3)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	cacheDir, err := UserCacheDir()
 | 
						dataDir, err = UserDataDir()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		fmt.Fprintln(os.Stderr, "Failed to get cache directory:", err)
 | 
							_, _ = fmt.Fprintln(os.Stderr, "Failed to get data directory:", err)
 | 
				
			||||||
		os.Exit(3)
 | 
							os.Exit(3)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	downloadDir, err := UserDownloadDir()
 | 
						cacheDir, err = UserCacheDir()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		fmt.Fprintln(os.Stderr, "Failed to get download directory:", err)
 | 
							_, _ = fmt.Fprintln(os.Stderr, "Failed to get cache directory:", err)
 | 
				
			||||||
 | 
							os.Exit(3)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						downloadDir, err = UserDownloadDir()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							_, _ = fmt.Fprintln(os.Stderr, "Failed to get download directory:", err)
 | 
				
			||||||
		os.Exit(3)
 | 
							os.Exit(3)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gmx := NewGomuks(MainUIProvider, configDir, cacheDir, downloadDir)
 | 
						gmx := NewGomuks(MainUIProvider, configDir, dataDir, cacheDir, downloadDir)
 | 
				
			||||||
	gmx.Start()
 | 
						gmx.Start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// We use os.Exit() everywhere, so exiting by returning from Start() shouldn't happen.
 | 
						// We use os.Exit() everywhere, so exiting by returning from Start() shouldn't happen.
 | 
				
			||||||
@@ -74,8 +82,19 @@ func main() {
 | 
				
			|||||||
	os.Exit(2)
 | 
						os.Exit(2)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getRootDir(subdir string) string {
 | 
				
			||||||
 | 
						rootDir := os.Getenv("GOMUKS_ROOT")
 | 
				
			||||||
 | 
						if rootDir == "" {
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return filepath.Join(rootDir, subdir)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func UserCacheDir() (dir string, err error) {
 | 
					func UserCacheDir() (dir string, err error) {
 | 
				
			||||||
	dir = os.Getenv("GOMUKS_CACHE_HOME")
 | 
						dir = os.Getenv("GOMUKS_CACHE_HOME")
 | 
				
			||||||
 | 
						if dir == "" {
 | 
				
			||||||
 | 
							dir = getRootDir("cache")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if dir == "" {
 | 
						if dir == "" {
 | 
				
			||||||
		dir, err = os.UserCacheDir()
 | 
							dir, err = os.UserCacheDir()
 | 
				
			||||||
		dir = filepath.Join(dir, "gomuks")
 | 
							dir = filepath.Join(dir, "gomuks")
 | 
				
			||||||
@@ -83,34 +102,43 @@ func UserCacheDir() (dir string, err error) {
 | 
				
			|||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func UserDownloadDir() (dir string, err error) {
 | 
					func UserDataDir() (dir string, err error) {
 | 
				
			||||||
	dir = os.Getenv("HOME")
 | 
						dir = os.Getenv("GOMUKS_DATA_HOME")
 | 
				
			||||||
	return filepath.Join(dir, "Downloads"), nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func UserConfigDir() (dir string, err error) {
 | 
					 | 
				
			||||||
	dir = os.Getenv("GOMUKS_CONFIG_HOME")
 | 
					 | 
				
			||||||
	if dir != "" {
 | 
						if dir != "" {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if runtime.GOOS == "windows" {
 | 
						if runtime.GOOS == "windows" || runtime.GOOS == "darwin" {
 | 
				
			||||||
		dir = os.Getenv("AppData")
 | 
							return UserConfigDir()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						dir = os.Getenv("XDG_DATA_HOME")
 | 
				
			||||||
 | 
						if dir == "" {
 | 
				
			||||||
 | 
							dir = getRootDir("data")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if dir == "" {
 | 
				
			||||||
 | 
							dir = os.Getenv("HOME")
 | 
				
			||||||
		if dir == "" {
 | 
							if dir == "" {
 | 
				
			||||||
			err = errors.New("%AppData% is not defined")
 | 
								return "", errors.New("neither $XDG_CACHE_HOME nor $HOME are defined")
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		dir = os.Getenv("XDG_CONFIG_HOME")
 | 
					 | 
				
			||||||
		if dir == "" {
 | 
					 | 
				
			||||||
			dir = os.Getenv("HOME")
 | 
					 | 
				
			||||||
			if dir == "" {
 | 
					 | 
				
			||||||
				err = errors.New("neither $XDG_CONFIG_HOME nor $HOME are defined")
 | 
					 | 
				
			||||||
			} else if runtime.GOOS == "darwin" {
 | 
					 | 
				
			||||||
				dir = filepath.Join(dir, "Library", "Application Support")
 | 
					 | 
				
			||||||
			} else {
 | 
					 | 
				
			||||||
				dir = filepath.Join(dir, ".config")
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							dir = filepath.Join(dir, ".local", "share")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	dir = filepath.Join(dir, "gomuks")
 | 
						dir = filepath.Join(dir, "gomuks")
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func UserDownloadDir() (dir string, err error) {
 | 
				
			||||||
 | 
						dir, err = os.UserHomeDir()
 | 
				
			||||||
 | 
						dir = filepath.Join(dir, "Downloads")
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func UserConfigDir() (dir string, err error) {
 | 
				
			||||||
 | 
						dir = os.Getenv("GOMUKS_CONFIG_HOME")
 | 
				
			||||||
 | 
						if dir == "" {
 | 
				
			||||||
 | 
							dir = getRootDir("cache")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if dir == "" {
 | 
				
			||||||
 | 
							dir, err = os.UserConfigDir()
 | 
				
			||||||
 | 
							dir = filepath.Join(dir, "gomuks")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -135,7 +135,7 @@ func (c *Container) InitClient() error {
 | 
				
			|||||||
	c.client.Logger = mxLogger{}
 | 
						c.client.Logger = mxLogger{}
 | 
				
			||||||
	c.client.DeviceID = c.config.DeviceID
 | 
						c.client.DeviceID = c.config.DeviceID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cryptoStore, err := crypto.NewGobStore(filepath.Join(c.config.CacheDir, "crypto.gob"))
 | 
						cryptoStore, err := crypto.NewGobStore(filepath.Join(c.config.DataDir, "crypto.gob"))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -281,8 +281,8 @@ func (c *Container) Login(user, password string) error {
 | 
				
			|||||||
// Logout revokes the access token, stops the syncer and calls the OnLogout() method of the UI.
 | 
					// Logout revokes the access token, stops the syncer and calls the OnLogout() method of the UI.
 | 
				
			||||||
func (c *Container) Logout() {
 | 
					func (c *Container) Logout() {
 | 
				
			||||||
	c.client.Logout()
 | 
						c.client.Logout()
 | 
				
			||||||
	c.config.DeleteSession()
 | 
					 | 
				
			||||||
	c.Stop()
 | 
						c.Stop()
 | 
				
			||||||
 | 
						c.config.DeleteSession()
 | 
				
			||||||
	c.client = nil
 | 
						c.client = nil
 | 
				
			||||||
	c.crypto = nil
 | 
						c.crypto = nil
 | 
				
			||||||
	c.ui.OnLogout()
 | 
						c.ui.OnLogout()
 | 
				
			||||||
@@ -300,6 +300,11 @@ func (c *Container) Stop() {
 | 
				
			|||||||
			debug.Print("Error closing history manager:", err)
 | 
								debug.Print("Error closing history manager:", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		c.history = nil
 | 
							c.history = nil
 | 
				
			||||||
 | 
							debug.Print("Flushing crypto store")
 | 
				
			||||||
 | 
							err = c.crypto.Store.Flush()
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								debug.Print("Error flushing crypto store:", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -558,7 +563,6 @@ func (c *Container) HandleEncrypted(source EventSource, mxEvent *event.Event) {
 | 
				
			|||||||
		debug.Print("Failed to decrypt event:", err)
 | 
							debug.Print("Failed to decrypt event:", err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	debug.Print("!!!!!", evt)
 | 
					 | 
				
			||||||
	c.HandleMessage(source, evt)
 | 
						c.HandleMessage(source, evt)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user