38 lines
		
	
	
		
			774 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			774 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package autocert
 | |
| 
 | |
| import (
 | |
| 	"os"
 | |
| 	"path/filepath"
 | |
| 	"runtime"
 | |
| )
 | |
| 
 | |
| func homeDir() string {
 | |
| 	if runtime.GOOS == "windows" {
 | |
| 		return os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH")
 | |
| 	}
 | |
| 	if h := os.Getenv("HOME"); h != "" {
 | |
| 		return h
 | |
| 	}
 | |
| 	return "/"
 | |
| }
 | |
| 
 | |
| func cacheDir() string {
 | |
| 	const base = "golang-autocert"
 | |
| 	switch runtime.GOOS {
 | |
| 	case "darwin":
 | |
| 		return filepath.Join(homeDir(), "Library", "Caches", base)
 | |
| 	case "windows":
 | |
| 		for _, ev := range []string{"APPDATA", "CSIDL_APPDATA", "TEMP", "TMP"} {
 | |
| 			if v := os.Getenv(ev); v != "" {
 | |
| 				return filepath.Join(v, base)
 | |
| 			}
 | |
| 		}
 | |
| 		// Worst case:
 | |
| 		return filepath.Join(homeDir(), base)
 | |
| 	}
 | |
| 	if xdg := os.Getenv("XDG_CACHE_HOME"); xdg != "" {
 | |
| 		return filepath.Join(xdg, base)
 | |
| 	}
 | |
| 	return filepath.Join(homeDir(), ".cache", base)
 | |
| }
 |