2023-01-25 21:14:27 +00:00
package envloader
import (
"errors"
"fmt"
2023-01-26 17:52:03 +00:00
"io/fs"
"log"
2023-01-25 21:14:27 +00:00
"os"
2023-01-26 17:52:03 +00:00
"github.com/joho/godotenv"
2023-01-25 21:14:27 +00:00
)
type Environment struct {
2023-01-26 17:52:03 +00:00
RootDir string
StaticDir string
ApiKey string
Port string
2023-01-27 13:10:14 +00:00
BaseRoute string
2023-01-25 21:14:27 +00:00
}
2023-01-26 17:52:03 +00:00
func Load ( ) ( env * Environment ) {
err := godotenv . Load ( ".static-hoster.env" )
if err != nil {
log . Println ( "Error loading .env file" )
} else {
godotenv . Overload ( )
}
defaultApiKey := "test123"
env = new ( Environment )
env . RootDir = envReader ( "STATIC_HOSTER_HOME" , fmt . Sprintf ( "%s/static-hoster/" , os . Getenv ( "HOME" ) ) )
env . StaticDir = envReader ( "STATIC_HOSTER_HOST_DIR" , fmt . Sprintf ( "%s/hosted/" , env . RootDir ) )
env . Port = fmt . Sprintf ( ":%s" , envReader ( "STATIC_HOSTER_PORT" , "8080" ) )
env . ApiKey = envReader ( "STATIC_HOSTER_API_KEY" , defaultApiKey )
2023-01-27 13:10:14 +00:00
env . BaseRoute = envReader ( "STATIC_HOSTER_BASE_ROUTE" , "/home" )
2023-01-26 17:52:03 +00:00
if env . ApiKey == defaultApiKey {
fmt . Printf ( "[STATIC-HOSTER-Warning]\t Environment Variable \"STATIC_HOSTER_API_KEY\" not set. Use default key \"%s\". DONT USE THIS FOR PRODUCTION!\n" , defaultApiKey )
2023-01-25 21:14:27 +00:00
}
2023-01-26 17:52:03 +00:00
mkdirIfNotExist ( env . RootDir , os . ModePerm )
mkdirIfNotExist ( env . StaticDir , os . ModePerm )
return
2023-01-25 21:14:27 +00:00
}
func envReader ( envVar string , defaultVal string ) string {
if os . Getenv ( envVar ) == "" {
return defaultVal
} else {
return os . Getenv ( envVar )
}
}
2023-01-26 17:52:03 +00:00
func mkdirIfNotExist ( dir string , perm fs . FileMode ) {
if _ , err := os . Stat ( dir ) ; errors . Is ( err , os . ErrNotExist ) {
fmt . Printf ( "[STATIC_HOSTER-Info]\tFolder %s does not exit, trying to create it\n" , dir )
err := os . Mkdir ( dir , perm )
if err != nil {
log . Println ( err )
}
}
}