112 lines
5.4 KiB
Go
112 lines
5.4 KiB
Go
package main
|
||
|
||
import (
|
||
"strings"
|
||
"github.com/vishalkuo/bimap"
|
||
"golang.org/x/net/idna"
|
||
)
|
||
|
||
var DOMAINS *bimap.BiMap[string, string] = bimap.NewBiMapFromMap(map[string]string {
|
||
"www.docs.kernel.org": "ввв.доктора.ядро.орг",
|
||
"www.wiki.kernel.org": "ввв.грешник.ядро.орг",
|
||
"am.mirrors.kernel.org": "являются.зеркалами.ядро.орг",
|
||
"ams.source.kernel.org": "источник.амс.ядро.орг",
|
||
"android.kernel.org": "андроид.ядро.орг",
|
||
"ap.edge.kernel.org": "край.ап.ядро.орг",
|
||
"archive.kernel.org": "архив.ядро.орг",
|
||
"b4.docs.kernel.org": "доктора.б4.ядро.орг",
|
||
"btrfs.docs.kernel.org": "доктора.битрифс.ядро.орг",
|
||
"bugzilla.kernel.org": "бугзила.ядро.орг",
|
||
"cdn.kernel.org": "раздатчик.ядро.орг",
|
||
"cregit.origin.kernel.org": "происхождение.крегит.ядро.орг",
|
||
"cxl.docs.kernel.org": "доктора.схл.ядро.орг",
|
||
"dfw.source.kernel.org": "источник.дфв.ядро.орг",
|
||
"docs.kernel.org": "доктора.ядро.орг",
|
||
"erofs.docs.kernel.org": "доктора.эротическаяфс.ядро.орг",
|
||
"erol.kernel.org": "эротика.ядро.орг",
|
||
"eu.edge.kernel.org": "край.евросоюза.ядро.орг",
|
||
"git.kernel.org": "мерзавец.ядро.орг",
|
||
"ieee1394.docs.kernel.org": "доктора.иеее1394.ядро.орг",
|
||
"kernel.org": "ядро.орг",
|
||
"linux-mmp.docs.kernel.org": "доктора.линукс-карта.ядро.орг",
|
||
"linux.kernel.org": "линукс.ядро.орг",
|
||
"lkml.kernel.org": "саял.ядро.орг",
|
||
"lore.kernel.org": "уздечка.ядро.орг",
|
||
"mail.kernel.org": "почта.ядро.орг",
|
||
"media.social.kernel.org": "социальные.сми.ядро.орг",
|
||
"mirrors.edge.kernel.org": "край.зеркал.ядро.орг",
|
||
"mirrors.kernel.org": "зеркала.ядро.орг",
|
||
"na.edge.kernel.org": "край.на.ядро.орг",
|
||
"nntp.lore.kernel.org": "уздечка.сппн.ядро.орг",
|
||
"ny.mirrors.kernel.org": "нью-йоркские.зеркала.ядро.орг",
|
||
"nyc.source.kernel.org": "источник.нук.ядро.орг",
|
||
"pad.kernel.org": "клавиатура.ядро.орг",
|
||
"parisc.docs.kernel.org": "доктора.париж.ядро.орг",
|
||
"patchwork.kernel.org": "путаница.ядро.орг",
|
||
"people.kernel.org": "люди.ядро.орг",
|
||
"planet.kernel.org": "планета.ядро.орг",
|
||
"pop.lore.kernel.org": "уздечка.популярности.ядро.орг",
|
||
"remail.kernel.org": "перепочта.ядро.орг",
|
||
"sin.source.kernel.org": "источник.греха.ядро.орг",
|
||
"smtp.kernel.org": "пппп.ядро.орг",
|
||
"smtp.lore.kernel.org": "уздечка.пппп.ядро.орг",
|
||
"smtp.subspace.kernel.org": "подместо.пппп.ядро.орг",
|
||
"smtp1.kernel.org": "пппп1.ядро.орг",
|
||
"smtp2.kernel.org": "пппп2.ядро.орг",
|
||
"smtp3.kernel.org": "пппп3.ядро.орг",
|
||
"social.kernel.org": "социальный.ядро.орг",
|
||
"sparse.docs.kernel.org": "редкие.доктора.ядро.орг",
|
||
"subspace.kernel.org": "подместо.ядро.орг",
|
||
"sv.mirrors.kernel.org": "зеркала.резюме.ядро.орг",
|
||
"sy.mirrors.kernel.org": "сай.отражает.ядро.орг",
|
||
"vger.kernel.org": "мпук.ядро.орг",
|
||
"wiki.kernel.org": "грешник.ядро.орг",
|
||
"wireless.docs.kernel.org": "беспроводные.доктора.ядро.орг",
|
||
"wireless.kernel.org": "радио.ядро.орг",
|
||
"www.kernel.org": "ввв.ядро.орг",
|
||
"yul.archive.kernel.org": "архив.юл.ядро.орг",
|
||
});
|
||
|
||
var WILDCARD_DOMAINS = [][]string{
|
||
{".docs.kernel.org", ".доктора.ядро.орг"},
|
||
{".wiki.kernel.org", ".грешник.ядро.орг"},
|
||
};
|
||
|
||
|
||
func Kernel2Yadro(str string) (string, bool) {
|
||
if yadro, found := DOMAINS.Get(str); found {
|
||
return yadro, true
|
||
}
|
||
|
||
for _, kernel_yadro := range WILDCARD_DOMAINS {
|
||
if stem, found := strings.CutSuffix(str, kernel_yadro[0]); found {
|
||
return stem + kernel_yadro[1], true
|
||
}
|
||
}
|
||
|
||
return "", false
|
||
}
|
||
|
||
func Yadro2Kernel(str string, punycode bool) (string, bool) {
|
||
var err error
|
||
|
||
if punycode {
|
||
str, err = idna.ToUnicode(str)
|
||
|
||
if err != nil {
|
||
return "", false
|
||
}
|
||
}
|
||
|
||
if kernel, found := DOMAINS.GetInverse(str); found {
|
||
return kernel, true
|
||
}
|
||
|
||
for _, kernel_yadro := range WILDCARD_DOMAINS {
|
||
if stem, found := strings.CutSuffix(str, kernel_yadro[1]); found {
|
||
return stem + kernel_yadro[0], true
|
||
}
|
||
}
|
||
|
||
return "", false
|
||
}
|