refactor: allow setting more options when changing permissions on a file
Rather than hardcoding paths, just allow them to be options.
This commit is contained in:
@@ -13,11 +13,10 @@ func CreateAppDataDirectory(pluginName, appName string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := SetPermissions(directory, 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
return SetPermissions(SetPermissionInput{
|
||||
Filename: directory,
|
||||
Mode: os.FileMode(0755),
|
||||
})
|
||||
}
|
||||
|
||||
// CreateDataDirectory creates a data directory for the given plugin/app combination with the correct permissions
|
||||
@@ -27,11 +26,10 @@ func CreateDataDirectory(pluginName string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := SetPermissions(directory, 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
return SetPermissions(SetPermissionInput{
|
||||
Filename: directory,
|
||||
Mode: os.FileMode(0755),
|
||||
})
|
||||
}
|
||||
|
||||
// GetAppDataDirectory returns the path to the data directory for the given plugin/app combination
|
||||
|
||||
@@ -151,24 +151,33 @@ func ReadFirstLine(filename string) (text string) {
|
||||
return
|
||||
}
|
||||
|
||||
// SetPermissionsInput is the input struct for SetPermissions
|
||||
type SetPermissionInput struct {
|
||||
Filename string
|
||||
Mode os.FileMode
|
||||
GroupName string
|
||||
Username string
|
||||
}
|
||||
|
||||
// SetPermissions sets the proper owner and filemode for a given file
|
||||
func SetPermissions(path string, fileMode os.FileMode) error {
|
||||
if err := os.Chmod(path, fileMode); err != nil {
|
||||
func SetPermissions(input SetPermissionInput) error {
|
||||
if err := os.Chmod(input.Filename, input.Mode); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
systemGroup := GetenvWithDefault("DOKKU_SYSTEM_GROUP", "dokku")
|
||||
systemUser := GetenvWithDefault("DOKKU_SYSTEM_USER", "dokku")
|
||||
if strings.HasPrefix(path, "/etc/sudoers.d/") {
|
||||
systemGroup = "root"
|
||||
systemUser = "root"
|
||||
if input.GroupName == "" {
|
||||
input.GroupName = GetenvWithDefault("DOKKU_SYSTEM_GROUP", "dokku")
|
||||
}
|
||||
|
||||
group, err := user.LookupGroup(systemGroup)
|
||||
if input.Username == "" {
|
||||
input.Username = GetenvWithDefault("DOKKU_SYSTEM_USER", "dokku")
|
||||
}
|
||||
|
||||
group, err := user.LookupGroup(input.GroupName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
user, err := user.Lookup(systemUser)
|
||||
user, err := user.Lookup(input.Username)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -182,7 +191,7 @@ func SetPermissions(path string, fileMode os.FileMode) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return os.Chown(path, uid, gid)
|
||||
return os.Chown(input.Filename, uid, gid)
|
||||
}
|
||||
|
||||
// TouchFile creates an empty file at the specified path
|
||||
@@ -198,10 +207,10 @@ func TouchFile(filename string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := SetPermissions(filename, mode); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
return SetPermissions(SetPermissionInput{
|
||||
Filename: filename,
|
||||
Mode: mode,
|
||||
})
|
||||
}
|
||||
|
||||
type WriteSliceToFileInput struct {
|
||||
@@ -230,9 +239,8 @@ func WriteSliceToFile(input WriteSliceToFileInput) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := SetPermissions(input.Filename, input.Mode); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
return SetPermissions(SetPermissionInput{
|
||||
Filename: input.Filename,
|
||||
Mode: input.Mode,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -202,7 +202,10 @@ func PropertyListWrite(pluginName string, appName string, property string, value
|
||||
}
|
||||
|
||||
file.Chmod(0600)
|
||||
SetPermissions(propertyPath, 0600)
|
||||
SetPermissions(SetPermissionInput{
|
||||
Filename: propertyPath,
|
||||
Mode: os.FileMode(0600),
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -329,7 +332,10 @@ func PropertyListRemove(pluginName string, appName string, property string, valu
|
||||
}
|
||||
|
||||
file.Chmod(0600)
|
||||
SetPermissions(propertyPath, 0600)
|
||||
SetPermissions(SetPermissionInput{
|
||||
Filename: propertyPath,
|
||||
Mode: os.FileMode(0600),
|
||||
})
|
||||
|
||||
if !found {
|
||||
return errors.New("Property not found, nothing was removed")
|
||||
@@ -365,7 +371,10 @@ func PropertyListRemoveByPrefix(pluginName string, appName string, property stri
|
||||
}
|
||||
|
||||
file.Chmod(0600)
|
||||
SetPermissions(propertyPath, 0600)
|
||||
SetPermissions(SetPermissionInput{
|
||||
Filename: propertyPath,
|
||||
Mode: os.FileMode(0600),
|
||||
})
|
||||
|
||||
if !found {
|
||||
return errors.New("Property not found, nothing was removed")
|
||||
@@ -441,7 +450,10 @@ func PropertyWrite(pluginName string, appName string, property string, value str
|
||||
|
||||
fmt.Fprint(file, value)
|
||||
file.Chmod(0600)
|
||||
SetPermissions(propertyPath, 0600)
|
||||
SetPermissions(SetPermissionInput{
|
||||
Filename: propertyPath,
|
||||
Mode: os.FileMode(0600),
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -451,10 +463,19 @@ func PropertySetup(pluginName string) error {
|
||||
if err := os.MkdirAll(pluginConfigRoot, 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := SetPermissions(filepath.Join(MustGetEnv("DOKKU_LIB_ROOT"), "config"), 0755); err != nil {
|
||||
|
||||
input := SetPermissionInput{
|
||||
Filename: filepath.Join(MustGetEnv("DOKKU_LIB_ROOT"), "config"),
|
||||
Mode: os.FileMode(0755),
|
||||
}
|
||||
|
||||
if err := SetPermissions(input); err != nil {
|
||||
return err
|
||||
}
|
||||
return SetPermissions(pluginConfigRoot, 0755)
|
||||
return SetPermissions(SetPermissionInput{
|
||||
Filename: pluginConfigRoot,
|
||||
Mode: os.FileMode(0755),
|
||||
})
|
||||
}
|
||||
|
||||
func getPropertyPath(pluginName string, appName string, property string) string {
|
||||
@@ -478,5 +499,8 @@ func makePluginAppPropertyPath(pluginName string, appName string) error {
|
||||
if err := os.MkdirAll(pluginAppConfigRoot, 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
return SetPermissions(pluginAppConfigRoot, 0755)
|
||||
return SetPermissions(SetPermissionInput{
|
||||
Filename: pluginAppConfigRoot,
|
||||
Mode: os.FileMode(0755),
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user