github.com/google/go-safeweb@v0.0.0-20231219055052-64d8cfc90fbb/safehttp/dev.go (about)

     1  // Copyright 2020 Google LLC
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //	https://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package safehttp
    16  
    17  import "sync"
    18  
    19  var (
    20  	devMu      sync.RWMutex
    21  	isLocalDev bool
    22  	// freezeLocalDev is set on Mux construction.
    23  	freezeLocalDev bool
    24  )
    25  
    26  // UseLocalDev instructs the framework to disable some security mechanisms that
    27  // would make local development hard or impossible. This cannot be undone without
    28  // restarting the program and should only be done before any other function or type
    29  // of the framework is used.
    30  // This function should ideally be called by the main package immediately after
    31  // flag parsing.
    32  // This configuration is not valid for production use.
    33  func UseLocalDev() {
    34  	devMu.Lock()
    35  	defer devMu.Unlock()
    36  	if freezeLocalDev {
    37  		panic("UseLocalDev can only be called before any other part of the framework")
    38  	}
    39  	isLocalDev = true
    40  }
    41  
    42  // IsLocalDev returns whether the framework is set up to use local development
    43  // rules. Please see the doc on UseLocalDev.
    44  func IsLocalDev() bool {
    45  	devMu.RLock()
    46  	defer devMu.RUnlock()
    47  	return isLocalDev
    48  }