f4781ee483
- Added possibility to override config with env vars - Reorganized config structures
107 lines
2.3 KiB
Go
107 lines
2.3 KiB
Go
// Copyright 2015 Claudemiro Alves Feitosa Neto. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package ipe
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"math/rand"
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
|
|
log "github.com/golang/glog"
|
|
"github.com/gorilla/handlers"
|
|
"github.com/gorilla/mux"
|
|
"gopkg.in/yaml.v2"
|
|
|
|
"ipe/api"
|
|
"ipe/app"
|
|
"ipe/config"
|
|
"ipe/storage"
|
|
"ipe/websockets"
|
|
)
|
|
|
|
// Start Parse the configuration file and starts the ipe server
|
|
// It Panic if could not start the HTTP or HTTPS server
|
|
func Start(filename string) {
|
|
var conf config.File
|
|
|
|
rand.Seed(time.Now().Unix())
|
|
|
|
data, err := ioutil.ReadFile(filename)
|
|
if err != nil {
|
|
log.Error(err)
|
|
return
|
|
}
|
|
|
|
// Expand env vars
|
|
data = []byte(os.ExpandEnv(string(data)))
|
|
|
|
// Decoding config
|
|
if err := yaml.UnmarshalStrict(data, &conf); err != nil {
|
|
log.Error(err)
|
|
return
|
|
}
|
|
|
|
// Using a in memory database
|
|
inMemoryStorage := storage.NewInMemory()
|
|
|
|
// Adding applications
|
|
for _, a := range conf.Apps {
|
|
application := app.NewApplication(
|
|
a.Name,
|
|
a.AppID,
|
|
a.Key,
|
|
a.Secret,
|
|
a.OnlySSL,
|
|
a.Enabled,
|
|
a.UserEvents,
|
|
a.WebHooks.Enabled,
|
|
a.WebHooks.URL,
|
|
)
|
|
|
|
if err := inMemoryStorage.AddApp(application); err != nil {
|
|
log.Error(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
router := mux.NewRouter()
|
|
router.Use(handlers.RecoveryHandler())
|
|
|
|
router.Path("/app/{key}").Methods("GET").Handler(
|
|
websockets.NewWebsocket(inMemoryStorage),
|
|
)
|
|
|
|
appsRouter := router.PathPrefix("/apps/{app_id}").Subrouter()
|
|
appsRouter.Use(
|
|
api.CheckAppDisabled(inMemoryStorage),
|
|
api.Authentication(inMemoryStorage),
|
|
)
|
|
|
|
appsRouter.Path("/events").Methods("POST").Handler(
|
|
api.NewPostEvents(inMemoryStorage),
|
|
)
|
|
appsRouter.Path("/channels").Methods("GET").Handler(
|
|
api.NewGetChannels(inMemoryStorage),
|
|
)
|
|
appsRouter.Path("/channels/{channel_name}").Methods("GET").Handler(
|
|
api.NewGetChannel(inMemoryStorage),
|
|
)
|
|
appsRouter.Path("/channels/{channel_name}/users").Methods("GET").Handler(
|
|
api.NewGetChannelUsers(inMemoryStorage),
|
|
)
|
|
|
|
if conf.SSL.Enabled {
|
|
go func() {
|
|
log.Infof("Starting HTTPS service on %s ...", conf.SSL.Host)
|
|
log.Fatal(http.ListenAndServeTLS(conf.SSL.Host, conf.SSL.CertFile, conf.SSL.KeyFile, router))
|
|
}()
|
|
}
|
|
|
|
log.Infof("Starting HTTP service on %s ...", conf.Host)
|
|
log.Fatal(http.ListenAndServe(conf.Host, router))
|
|
}
|