0.1.4-prod

added skip shtrih-searsh - [] in connect.json
fixed license reader
added clearing date-folder after read and before write
This commit is contained in:
2025-08-30 06:08:45 +03:00
parent 6c3950953e
commit a02209c698
5 changed files with 322 additions and 76 deletions

95
pkg/shtrih/license.go Normal file
View File

@@ -0,0 +1,95 @@
// Файл: pkg/shtrih/license.go
package shtrih
import (
"fmt"
"sort"
"strings"
)
// licenseInfo хранит информацию о квартале и годе для конкретного суффикса лицензии.
type licenseInfo struct {
quarter string
year int
}
// licenseMap сопоставляет суффиксы HEX-лицензий с датой окончания подписки.
// Ключи должны быть в верхнем регистре.
var licenseMap = map[string]licenseInfo{
// 2027
"FFFFFFFF": {"4", 2027},
"FFFFFF7F": {"3", 2027},
"FFFFFF3F": {"2", 2027},
"FFFFFF1F": {"1", 2027},
// 2026
"FFFFFF0F": {"4", 2026},
"FFFFFF07": {"3", 2026},
"FFFFFF03": {"2", 2026},
"FFFFFF01": {"1", 2026},
// 2025
"FFFFFF00": {"4", 2025},
"FFFF7F00": {"3", 2025},
"FFFF3F00": {"2", 2025},
"FFFF1F00": {"1", 2025},
// 2024
"FFFF0F00": {"4", 2024},
"FFFF0700": {"3", 2024},
"FFFF0300": {"2", 2024},
"FFFF0100": {"1", 2024},
// 2023
"FFFF": {"4", 2023},
"FF7F": {"3", 2023},
"FF3F": {"2", 2023},
"FF1F": {"1", 2023},
// 2022
"FF0F": {"4", 2022},
"FF07": {"3", 2022},
"FF03": {"2", 2022},
"FF01": {"1", 2022},
// 2021
"FF00": {"4", 2021},
"7F00": {"3", 2021},
"3F00": {"2", 2021},
"1F00": {"1", 2021},
// 2020
"0F00": {"4", 2020},
"0700": {"3", 2020},
"0300": {"2", 2020},
"0100": {"1", 2020},
}
// sortedLicenseKeys хранит ключи из licenseMap, отсортированные по убыванию длины.
// Это необходимо, чтобы длинные суффиксы ("FFFFFFFF") проверялись раньше коротких ("FFFF").
var sortedLicenseKeys []string
func init() {
keys := make([]string, 0, len(licenseMap))
for k := range licenseMap {
keys = append(keys, k)
}
sort.Slice(keys, func(i, j int) bool {
return len(keys[i]) > len(keys[j])
})
sortedLicenseKeys = keys
}
// decodeLicense расшифровывает HEX-строку лицензии в человекочитаемый формат.
// Она ищет наиболее длинное известное вхождение кода лицензии внутри всей строки.
// Если лицензия не распознана, возвращает пустую строку.
func decodeLicense(hex string) string {
if hex == "" {
return ""
}
upperHex := strings.ToUpper(hex)
// Итерируемся по ключам, отсортированным от самого длинного к самому короткому.
for _, licenseCode := range sortedLicenseKeys {
// Проверяем, содержится ли код лицензии ГДЕ-ЛИБО в большой HEX-строке.
if strings.Contains(upperHex, licenseCode) {
info := licenseMap[licenseCode]
return fmt.Sprintf("Подписка до %s квартала %d года", info.quarter, info.year)
}
}
return ""
}