Files
herolib/lib/develop/luadns/parse.v
Mahmoud Emad 4c01c88b85 WIP: Building hero
- The work is still in progress

Co-authored-by: supermario <mariobassem12@gmail.com>
2025-01-02 19:01:37 +02:00

57 lines
1.5 KiB
V

module luadns
import os
import freeflowuniverse.herolib.core.pathlib
fn parse_dns_configs(directory_path string) ![]DNSConfig {
mut configs := []DNSConfig{}
mut luadns_dir := pathlib.get_dir(path: directory_path)!
mut list := luadns_dir.list()!
for mut file in list.paths {
if file.extension() == 'lua' {
config := parse_luadns_file(file.path)!
configs << config
}
}
return configs
}
fn parse_luadns_file(file_path string) !DNSConfig {
mut config := DNSConfig{}
mut file := pathlib.get_file(path: file_path)!
content := file.read()!
for line in content.split('\n') {
trimmed_line := line.trim_space()
if trimmed_line.len == 0 || trimmed_line.starts_with('//') {
continue
}
if trimmed_line.starts_with('a(') {
parts := trimmed_line.all_after('a(').all_before(')').split(',')
name := parts[0].trim('" ')
ip := parts[1].trim('" ')
config.a_records << ARecord{name, ip}
} else if trimmed_line.starts_with('cname(') {
parts := trimmed_line.all_after('cname(').all_before(')').split(',')
name := parts[0].trim('" ')
alias := parts[1].trim('" ')
config.cname_records << CNAMERecord{name, alias}
} else if trimmed_line.starts_with('caa(') {
parts := trimmed_line.all_after('caa(').all_before(')').split(',')
name := parts[0].trim('" ')
value := parts[1].trim('" ')
tag := parts[2].trim('" ')
config.caa_records << CAARecord{name, value, tag}
}
}
config.domain = os.base(file_path).all_before('.lua')
return config
}