1
0
Fork 0
mirror of https://github.com/shouptech/tempgopher.git synced 2026-02-03 08:39:43 +00:00

This adds CORS headers based on configuration.

This commit is contained in:
Emma 2018-10-03 19:51:36 -06:00
parent 71cf5fc46d
commit 8b3093d0f1
7 changed files with 24 additions and 3 deletions

View file

@ -27,6 +27,7 @@ scp temp-gopher <raspberrypi>:~/somepath
Create a `config.yml` file like this: Create a `config.yml` file like this:
``` ```
baseurl: http://<pihostname>:8080 # Base URL to find the app at. Usually your Pi's IP address or hostname, unless using a reverse proxy
sensors: sensors:
- id: 28-000008083108 # Id of the DS18b120 sensor - id: 28-000008083108 # Id of the DS18b120 sensor
alias: fermenter # An alias for the sensor alias: fermenter # An alias for the sensor

View file

@ -25,6 +25,7 @@ type Sensor struct {
// Config contains the applications configuration // Config contains the applications configuration
type Config struct { type Config struct {
Sensors []Sensor `yaml:"sensors"` Sensors []Sensor `yaml:"sensors"`
BaseURL string `yaml:"baseurl"`
} }
// LoadConfig will loads a file and parses it into a Config struct // LoadConfig will loads a file and parses it into a Config struct

View file

@ -21,7 +21,10 @@ func Test_LoadConfig(t *testing.T) {
Verbose: true, Verbose: true,
} }
testConfig := Config{Sensors: []Sensor{testSensor}} testConfig := Config{
Sensors: []Sensor{testSensor},
BaseURL: "https://foo.bar",
}
loadedConfig, err := LoadConfig("tests/test_config.yml") loadedConfig, err := LoadConfig("tests/test_config.yml")
assert.Equal(t, nil, err) assert.Equal(t, nil, err)

View file

@ -21,3 +21,4 @@ sensors:
coolinvert: false coolinvert: false
coolminutes: 10 coolminutes: 10
verbose: true verbose: true
baseurl: https://foo.bar

View file

@ -21,3 +21,4 @@ sensors:
coolinvert: false coolinvert: false
coolminutes: 10 coolminutes: 10
verbose: true verbose: true
baseurl: https://foo.bar

View file

@ -10,3 +10,4 @@ sensors:
coolinvert: false coolinvert: false
coolminutes: 10 coolminutes: 10
verbose: true verbose: true
baseurl: https://foo.bar

17
web.go
View file

@ -10,6 +10,7 @@ import (
"syscall" "syscall"
"time" "time"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
@ -18,7 +19,7 @@ func PingHandler(c *gin.Context) {
c.String(http.StatusOK, "pong") c.String(http.StatusOK, "pong")
} }
// ConfigHandler responds to get requests with the current configuration // ConfigHandler responds to get requests with the current configuration.
func ConfigHandler(config *Config) gin.HandlerFunc { func ConfigHandler(config *Config) gin.HandlerFunc {
fn := func(c *gin.Context) { fn := func(c *gin.Context) {
if c.Param("alias") != "/" && c.Param("alias") != "" { if c.Param("alias") != "/" && c.Param("alias") != "" {
@ -57,9 +58,21 @@ func StatusHandler(states *map[string]State) gin.HandlerFunc {
// SetupRouter initializes the gin router. // SetupRouter initializes the gin router.
func SetupRouter(config *Config, states *map[string]State) *gin.Engine { func SetupRouter(config *Config, states *map[string]State) *gin.Engine {
// If not specified, put gin in release mode
if _, ok := os.LookupEnv("GIN_MODE"); !ok {
gin.SetMode(gin.ReleaseMode)
}
r := gin.Default() r := gin.Default()
gin.SetMode(gin.ReleaseMode) // Midleware
r.Use(gin.Recovery())
if gin.Mode() != "release" {
r.Use(cors.Default())
} else {
corsconf := cors.DefaultConfig()
corsconf.AllowOrigins = []string{config.BaseURL}
r.Use(cors.New(corsconf))
}
// Ping // Ping
r.GET("/ping", PingHandler) r.GET("/ping", PingHandler)