maddy

Fork https://github.com/foxcpp/maddy

git clone git://git.lin.moe/go/maddy.git

 1/*
 2Maddy Mail Server - Composable all-in-one email server.
 3Copyright © 2019-2020 Max Mazurov <fox.cpp@disroot.org>, Maddy Mail Server contributors
 4
 5This program is free software: you can redistribute it and/or modify
 6it under the terms of the GNU General Public License as published by
 7the Free Software Foundation, either version 3 of the License, or
 8(at your option) any later version.
 9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program.  If not, see <https://www.gnu.org/licenses/>.
17*/
18
19package table
20
21import (
22	"context"
23
24	"github.com/foxcpp/maddy/framework/config"
25	"github.com/foxcpp/maddy/framework/module"
26)
27
28type Static struct {
29	modName  string
30	instName string
31
32	m map[string][]string
33}
34
35func NewStatic(modName, instName string, _, _ []string) (module.Module, error) {
36	return &Static{
37		modName:  modName,
38		instName: instName,
39		m:        map[string][]string{},
40	}, nil
41}
42
43func (s *Static) Init(cfg *config.Map) error {
44	cfg.Callback("entry", func(_ *config.Map, node config.Node) error {
45		if len(node.Args) < 2 {
46			return config.NodeErr(node, "expected at least one value")
47		}
48		s.m[node.Args[0]] = node.Args[1:]
49		return nil
50	})
51	_, err := cfg.Process()
52	return err
53}
54
55func (s *Static) Name() string {
56	return s.modName
57}
58
59func (s *Static) InstanceName() string {
60	return s.modName
61}
62
63func (s *Static) Lookup(ctx context.Context, key string) (string, bool, error) {
64	val := s.m[key]
65	if len(val) == 0 {
66		return "", false, nil
67	}
68	return val[0], true, nil
69}
70
71func (s *Static) LookupMulti(ctx context.Context, key string) ([]string, error) {
72	return s.m[key], nil
73}
74
75func init() {
76	module.Register("table.static", NewStatic)
77}