diff --git a/dirs/dirs.go b/dirs/dirs.go new file mode 100644 index 0000000..ee28983 --- /dev/null +++ b/dirs/dirs.go @@ -0,0 +1,41 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package dirs + +import ( + "os/user" + "path" +) + +var userHome string + +func UserHome() string { + if userHome == "" { + user, _ := user.Current() + if user != nil { + userHome = user.HomeDir + } + } + return userHome +} + +func UserCache() string { + return path.Join(UserHome(), ".cache", "mconnect") +} + +func UserConfig() string { + return path.Join(UserHome(), ".config", "mconnect") +} + +func UserData() string { + return path.Join(UserHome(), ".local", "mconnect") +} diff --git a/dirs/dirs_test.go b/dirs/dirs_test.go new file mode 100644 index 0000000..ee93dd5 --- /dev/null +++ b/dirs/dirs_test.go @@ -0,0 +1,29 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package dirs_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/bboozzoo/mconnect/dirs" +) + +func TestUserDirs(t *testing.T) { + restore := dirs.MockUserHome("/home/foo") + defer restore() + + assert.Equal(t, dirs.UserCache(), "/home/foo/.cache/mconnect") + assert.Equal(t, dirs.UserConfig(), "/home/foo/.config/mconnect") + assert.Equal(t, dirs.UserData(), "/home/foo/.local/mconnect") +} diff --git a/dirs/export_test.go b/dirs/export_test.go new file mode 100644 index 0000000..e5f28f2 --- /dev/null +++ b/dirs/export_test.go @@ -0,0 +1,20 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package dirs + +func MockUserHome(home string) (restore func()) { + old := userHome + userHome = home + return func() { + userHome = old + } +}