您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

config.go 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. "github.com/DanielOaks/oragono/irc"
  12. "gopkg.in/yaml.v2"
  13. )
  14. // TLSListenConfig defines configuration options for listening on TLS
  15. type TLSListenConfig struct {
  16. Cert string
  17. Key string
  18. }
  19. // Certificate returns the TLS certificate assicated with this TLSListenConfig
  20. func (conf *TLSListenConfig) Config() (*tls.Config, error) {
  21. cert, err := tls.LoadX509KeyPair(conf.Cert, conf.Key)
  22. if err != nil {
  23. return nil, errors.New("tls cert+key: invalid pair")
  24. }
  25. return &tls.Config{
  26. Certificates: []tls.Certificate{cert},
  27. }, err
  28. }
  29. type Config struct {
  30. Host string
  31. Listen string
  32. TLSListenersConf map[string]*TLSListenConfig `yaml:"tls-listeners"`
  33. Log string
  34. }
  35. func (conf *Config) TLSListeners() map[string]*tls.Config {
  36. tlsListeners := make(map[string]*tls.Config)
  37. for s, tlsListenersConf := range conf.TLSListenersConf {
  38. config, err := tlsListenersConf.Config()
  39. if err != nil {
  40. log.Fatal(err)
  41. }
  42. name, err := irc.CasefoldName(s)
  43. if err == nil {
  44. tlsListeners[name] = config
  45. } else {
  46. log.Println("Could not casefold TLS listener:", err.Error())
  47. }
  48. }
  49. return tlsListeners
  50. }
  51. func LoadConfig(filename string) (config *Config, err error) {
  52. data, err := ioutil.ReadFile(filename)
  53. if err != nil {
  54. return nil, err
  55. }
  56. err = yaml.Unmarshal(data, &config)
  57. if err != nil {
  58. return nil, err
  59. }
  60. if config.Listen == "" {
  61. return nil, errors.New("Listening address missing")
  62. }
  63. return config, nil
  64. }