All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			See #483
		
			
				
	
	
		
			117 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package config
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
	"io/fs"
 | 
						|
	"io/ioutil"
 | 
						|
	"os"
 | 
						|
	"path"
 | 
						|
	"path/filepath"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"coopcloud.tech/abra/pkg/i18n"
 | 
						|
	"coopcloud.tech/abra/pkg/log"
 | 
						|
)
 | 
						|
 | 
						|
const MAX_SANITISED_APP_NAME_LENGTH = 45
 | 
						|
const MAX_DOCKER_SECRET_LENGTH = 64
 | 
						|
 | 
						|
var BackupbotLabel = "coop-cloud.backupbot.enabled"
 | 
						|
 | 
						|
// GetServers retrieves all servers.
 | 
						|
func GetServers() ([]string, error) {
 | 
						|
	var servers []string
 | 
						|
 | 
						|
	servers, err := GetAllFoldersInDirectory(SERVERS_DIR)
 | 
						|
	if err != nil {
 | 
						|
		return servers, err
 | 
						|
	}
 | 
						|
 | 
						|
	var filtered []string
 | 
						|
	for _, s := range servers {
 | 
						|
		if !strings.HasPrefix(s, ".") {
 | 
						|
			filtered = append(filtered, s)
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	log.Debug(i18n.G("retrieved %v servers: %s", len(filtered), filtered))
 | 
						|
 | 
						|
	return filtered, nil
 | 
						|
}
 | 
						|
 | 
						|
// ReadServerNames retrieves all server names.
 | 
						|
func ReadServerNames() ([]string, error) {
 | 
						|
	serverNames, err := GetAllFoldersInDirectory(SERVERS_DIR)
 | 
						|
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	log.Debug(i18n.G("read %s from %s", strings.Join(serverNames, ","), SERVERS_DIR))
 | 
						|
 | 
						|
	return serverNames, nil
 | 
						|
}
 | 
						|
 | 
						|
// GetAllFilesInDirectory returns filenames of all files in directory
 | 
						|
func GetAllFilesInDirectory(directory string) ([]fs.FileInfo, error) {
 | 
						|
	var realFiles []fs.FileInfo
 | 
						|
 | 
						|
	files, err := ioutil.ReadDir(directory)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	for _, file := range files {
 | 
						|
		// Follow any symlinks
 | 
						|
		filePath := path.Join(directory, file.Name())
 | 
						|
 | 
						|
		if filepath.Ext(strings.TrimSpace(filePath)) != ".env" {
 | 
						|
			continue
 | 
						|
		}
 | 
						|
 | 
						|
		realPath, err := filepath.EvalSymlinks(filePath)
 | 
						|
		if err != nil {
 | 
						|
			log.Warn(i18n.G("broken symlink in your abra config folders: %s", filePath))
 | 
						|
		} else {
 | 
						|
			realFile, err := os.Stat(realPath)
 | 
						|
			if err != nil {
 | 
						|
				return nil, err
 | 
						|
			}
 | 
						|
			if !realFile.IsDir() {
 | 
						|
				realFiles = append(realFiles, file)
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return realFiles, nil
 | 
						|
}
 | 
						|
 | 
						|
// GetAllFoldersInDirectory returns both folder and symlink paths
 | 
						|
func GetAllFoldersInDirectory(directory string) ([]string, error) {
 | 
						|
	var folders []string
 | 
						|
 | 
						|
	files, err := ioutil.ReadDir(directory)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	if len(files) == 0 {
 | 
						|
		return nil, errors.New(i18n.G("directory is empty: %s", directory))
 | 
						|
	}
 | 
						|
 | 
						|
	for _, file := range files {
 | 
						|
		// Check if file is directory or symlink
 | 
						|
		if file.IsDir() || file.Mode()&fs.ModeSymlink != 0 {
 | 
						|
			filePath := path.Join(directory, file.Name())
 | 
						|
			realDir, err := filepath.EvalSymlinks(filePath)
 | 
						|
			if err != nil {
 | 
						|
				log.Warn(i18n.G("broken symlink in your abra config folders: %s", filePath))
 | 
						|
			} else if stat, err := os.Stat(realDir); err == nil && stat.IsDir() {
 | 
						|
				// path is a directory
 | 
						|
				folders = append(folders, file.Name())
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return folders, nil
 | 
						|
}
 |