123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package irc
-
- import (
- "code.google.com/p/gcfg"
- "errors"
- "log"
- )
-
- type PassConfig struct {
- Password string
- }
-
- func (conf *PassConfig) PasswordBytes() []byte {
- bytes, err := DecodePassword(conf.Password)
- if err != nil {
- log.Fatal("decode password error: ", err)
- }
- return bytes
- }
-
- type Config struct {
- Server struct {
- PassConfig
- Database string
- Listen []string
- Log string
- MOTD string
- Name string
- }
-
- Operator map[string]*PassConfig
-
- Theater map[string]*PassConfig
- }
-
- func (conf *Config) Operators() map[Name][]byte {
- operators := make(map[Name][]byte)
- for name, opConf := range conf.Operator {
- operators[NewName(name)] = opConf.PasswordBytes()
- }
- return operators
- }
-
- func (conf *Config) Theaters() map[Name][]byte {
- theaters := make(map[Name][]byte)
- for s, theaterConf := range conf.Theater {
- name := NewName(s)
- if !name.IsChannel() {
- log.Fatal("config uses a non-channel for a theater!")
- }
- theaters[name] = theaterConf.PasswordBytes()
- }
- return theaters
- }
-
- func LoadConfig(filename string) (config *Config, err error) {
- config = &Config{}
- err = gcfg.ReadFileInto(config, filename)
- if err != nil {
- return
- }
- if config.Server.Name == "" {
- err = errors.New("server.name missing")
- return
- }
- if config.Server.Database == "" {
- err = errors.New("server.database missing")
- return
- }
- if len(config.Server.Listen) == 0 {
- err = errors.New("server.listen missing")
- return
- }
- return
- }
|