You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

config.go 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Copyright (c) 2012-2014 Jeremy Latt
  2. // Copyright (c) 2014-2015 Edmund Huber
  3. // Copyright (c) 2016 Daniel Oaks <daniel@danieloaks.net>
  4. // released under the MIT license
  5. package web
  6. import (
  7. "crypto/tls"
  8. "errors"
  9. "io/ioutil"
  10. "log"
  11. "gopkg.in/yaml.v2"
  12. )
  13. // TLSListenConfig defines configuration options for listening on TLS
  14. type TLSListenConfig struct {
  15. Cert string
  16. Key string
  17. }
  18. // Certificate returns the TLS certificate assicated with this TLSListenConfig
  19. func (conf *TLSListenConfig) Config() (*tls.Config, error) {
  20. cert, err := tls.LoadX509KeyPair(conf.Cert, conf.Key)
  21. if err != nil {
  22. return nil, errors.New("tls cert+key: invalid pair")
  23. }
  24. return &tls.Config{
  25. Certificates: []tls.Certificate{cert},
  26. }, err
  27. }
  28. type Config struct {
  29. Host string
  30. Listen string
  31. TLSListenersConf map[string]*TLSListenConfig `yaml:"tls-listeners"`
  32. Log string
  33. }
  34. func (conf *Config) TLSListeners() map[string]*tls.Config {
  35. tlsListeners := make(map[string]*tls.Config)
  36. for s, tlsListenersConf := range conf.TLSListenersConf {
  37. config, err := tlsListenersConf.Config()
  38. if err != nil {
  39. log.Fatal(err)
  40. }
  41. tlsListeners[name] = config
  42. }
  43. return tlsListeners
  44. }
  45. func LoadConfig(filename string) (config *Config, err error) {
  46. data, err := ioutil.ReadFile(filename)
  47. if err != nil {
  48. return nil, err
  49. }
  50. err = yaml.Unmarshal(data, &config)
  51. if err != nil {
  52. return nil, err
  53. }
  54. if config.Listen == "" {
  55. return nil, errors.New("Listening address missing")
  56. }
  57. return config, nil
  58. }