// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package env provides environment information for the golangorg server
// running on golang.org.
package env

import (
	"log"
	"os"
	"strconv"
)

var (
	enforceHosts       = boolEnv("GOLANGORG_ENFORCE_HOSTS")
	requireDLSecretKey = boolEnv("GOLANGORG_REQUIRE_DL_SECRET_KEY")
)

// RequireDLSecretKey reports whether the download server secret key
// is expected to already exist, and the download server should panic
// on missing key instead of creating a new one.
func RequireDLSecretKey() bool {
	return requireDLSecretKey
}

// EnforceHosts reports whether host filtering should be enforced.
func EnforceHosts() bool {
	return enforceHosts
}

func boolEnv(key string) bool {
	v := os.Getenv(key)
	if v == "" {
		// TODO(dmitshur): In the future, consider detecting if running in App Engine,
		// and if so, making the environment variables mandatory rather than optional.
		return false
	}
	b, err := strconv.ParseBool(v)
	if err != nil {
		log.Fatalf("environment variable %s (%q) must be a boolean", key, v)
	}
	return b
}
