blob: 6d0a7c103adc940dccbf3d1e8406e0c4a793961d [file] [log] [blame]
gioe72b54f2024-04-22 10:44:41 +04001package main
2
3import (
4 "fmt"
5)
6
7type RecordStore interface {
8 Add(entry, txt string) error
9 Delete(entry, txt string) error
10}
11
12type fsRecordStore struct {
13 zone string
14 publicIP []string
15 fs FS
16 db string
17}
18
19func (s *fsRecordStore) read() (*RecordsFile, error) {
20 r, err := s.fs.Reader(s.db)
21 if err != nil {
22 return nil, err
23 }
24 defer r.Close()
25 return NewRecordsFile(r)
26}
27func (s *fsRecordStore) write(z *RecordsFile) error {
28 w, err := s.fs.Writer(s.db)
29 if err != nil {
30 return err
31 }
32 defer w.Close()
33 return z.Write(w)
34}
35
36func (s *fsRecordStore) Add(entry, txt string) error {
37 z, err := s.read()
38 if err != nil {
39 return err
40 }
41 fqdn := fmt.Sprintf("%s.%s.", entry, s.zone)
42 z.CreateOrReplaceTxtRecord(fqdn, txt)
43 // for _, ip := range s.publicIP {
44 // z.CreateARecord(fqdn, ip)
45 // }
46 return s.write(z)
47}
48
49func (s *fsRecordStore) Delete(entry, txt string) error {
50 z, err := s.read()
51 if err != nil {
52 return err
53 }
54 fqdn := fmt.Sprintf("%s.%s.", entry, s.zone)
55 z.DeleteTxtRecord(fqdn, txt)
56 // z.DeleteRecordsFor(fqdn)
57 return s.write(z)
58}