Compare commits

...

2 Commits

Author SHA1 Message Date
62704fac46 Removed unnecessary function 2025-01-20 02:01:36 +03:00
6a1c07d3f5 Fixed the way it operates with dublicated DNS records 2025-01-20 01:59:41 +03:00
3 changed files with 34 additions and 39 deletions

View File

@ -34,16 +34,6 @@ type dnsexitDTO struct {
Delete *dns.Record `json:"delete,omitempty"` Delete *dns.Record `json:"delete,omitempty"`
} }
func convertInterfaceSliceToStruct(slice []interface{}) *[]dns.Record {
var domains []dns.Record
for _, domain := range slice {
fmt.Println(domain)
}
return &domains
}
func (c *client) AddRecord(rec *dns.Record) (error, *dns.Response) { func (c *client) AddRecord(rec *dns.Record) (error, *dns.Response) {
c.Locker.Lock() c.Locker.Lock()
defer c.Locker.Unlock() defer c.Locker.Unlock()
@ -142,7 +132,7 @@ func (c *client) UpdateRecord(rec *dns.Record) (error, *dns.Response) {
} }
func (c *client) GetRecords() (error, *[]dns.Record) { func (c *client) GetRecords() (error, *[]dns.Record) {
var subdomains = CreateSet() var subdomains = NewRecordSet()
var wg sync.WaitGroup var wg sync.WaitGroup
result_chan := make(chan []*dns.Record) result_chan := make(chan []*dns.Record)
@ -179,11 +169,10 @@ func (c *client) GetRecords() (error, *[]dns.Record) {
select { select {
case records, ok := <-result_chan: case records, ok := <-result_chan:
if !ok { if !ok {
records_new := convertInterfaceSliceToStruct(subdomains.List()) return nil, subdomains.List()
return nil, records_new
} }
for record := range records { for _, record := range records {
subdomains.Add(record) subdomains.Add(record)
} }
case _, _ = <-err_chan: case _, _ = <-err_chan:

17
go.mod
View File

@ -3,11 +3,14 @@ module git.uoc.run.place/OxFF/dnsexit-manager
go 1.23.4 go 1.23.4
require ( require (
git.uoc.run.place/OxFF/dns-manager v0.0.0-20250114185820-a31877a751b9 // indirect git.uoc.run.place/OxFF/dns-manager v0.0.2
github.com/miekg/dns v1.1.62 // indirect github.com/miekg/dns v1.1.62
golang.org/x/mod v0.18.0 // indirect )
golang.org/x/net v0.27.0 // indirect
golang.org/x/sync v0.7.0 // indirect require (
golang.org/x/sys v0.22.0 // indirect golang.org/x/mod v0.22.0 // indirect
golang.org/x/tools v0.22.0 // indirect golang.org/x/net v0.34.0 // indirect
golang.org/x/sync v0.10.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/tools v0.29.0 // indirect
) )

39
set.go
View File

@ -1,32 +1,35 @@
package dnsexit_manager package dnsexit_manager
type Set struct { import dns "git.uoc.run.place/OxFF/dns-manager"
elements map[interface{}]struct{}
type RecordSet struct {
records map[dns.Record]struct{}
} }
func CreateSet() *Set { func NewRecordSet() *RecordSet {
return &Set{ return &RecordSet{
elements: make(map[interface{}]struct{}), records: make(map[dns.Record]struct{}),
} }
} }
func (set *Set) Add(value interface{}) { func (s *RecordSet) Add(record *dns.Record) {
_, found := set.elements[value] s.records[*record] = struct{}{}
if !found {
set.elements[value] = struct{}{}
}
} }
func (set *Set) Delete(value interface{}) { func (s *RecordSet) Remove(record dns.Record) {
delete(set.elements, value) delete(s.records, record)
} }
func (set *Set) List() []interface{} { func (s *RecordSet) Contains(record *dns.Record) bool {
keys := make([]interface{}, 0, len(set.elements)) _, exists := s.records[*record]
for _, key := range set.elements { return exists
keys = append(keys, key) }
func (s *RecordSet) List() *[]dns.Record {
records := make([]dns.Record, 0, len(s.records))
for record := range s.records {
records = append(records, record)
} }
return keys return &records
} }