mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-31 04:57:45 +09:00 
			
		
		
		
	This is step one in detaching the Database layer from Headscale (h). The ultimate goal is to have all function that does database operations in its own package, and keep the business logic and writing separate. Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
		
			
				
	
	
		
			44 lines
		
	
	
		
			766 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			766 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package util
 | |
| 
 | |
| import (
 | |
| 	"io/fs"
 | |
| 	"os"
 | |
| 	"path/filepath"
 | |
| 	"strconv"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/spf13/viper"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	Base8     = 8
 | |
| 	Base10    = 10
 | |
| 	BitSize16 = 16
 | |
| 	BitSize32 = 32
 | |
| 	BitSize64 = 64
 | |
| )
 | |
| 
 | |
| func AbsolutePathFromConfigPath(path string) string {
 | |
| 	// If a relative path is provided, prefix it with the directory where
 | |
| 	// the config file was found.
 | |
| 	if (path != "") && !strings.HasPrefix(path, string(os.PathSeparator)) {
 | |
| 		dir, _ := filepath.Split(viper.ConfigFileUsed())
 | |
| 		if dir != "" {
 | |
| 			path = filepath.Join(dir, path)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return path
 | |
| }
 | |
| 
 | |
| func GetFileMode(key string) fs.FileMode {
 | |
| 	modeStr := viper.GetString(key)
 | |
| 
 | |
| 	mode, err := strconv.ParseUint(modeStr, Base8, BitSize64)
 | |
| 	if err != nil {
 | |
| 		return PermissionFallback
 | |
| 	}
 | |
| 
 | |
| 	return fs.FileMode(mode)
 | |
| }
 |