7c902cab3a
Release / release (push) Successful in 50s
- **Shortcuts**: Add hostname normalization with domain stripping and hyphen folding. Include alias generation for cached hosts. - **Shell Hook**: Automate 24h cache refresh trigger with shell startup hook. Add install/uninstall commands for bash, zsh, and fish. - **Wizard**: Extend setup wizard to configure shortcuts (domains, hyphen stripping) and default SSH port. - **Cache**: Add `GetByShortcut` for resolving hosts via normalized shortcuts. Implement `NeedsRefresh` / `SetRefreshed` logic for refresh timestamps. - **Tests**: Comprehensive unit tests for shortcuts, hook installation, cache refresh, and alias generation. - **Docs**: Update README with shortcuts, shell hook, and default SSH port configuration.
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package shortcuts
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"git.zb-server.de/Sebi/ssh-netbox-wrapper/internal/config"
|
|
)
|
|
|
|
// Normalize strips configured domain suffixes and optionally hyphens from a hostname.
|
|
// The result is lowercased for case-insensitive comparison.
|
|
func Normalize(name string, cfg config.ShortcutsConfig) string {
|
|
s := strings.ToLower(name)
|
|
for _, domain := range cfg.Domains {
|
|
suffix := strings.ToLower(domain)
|
|
if !strings.HasPrefix(suffix, ".") {
|
|
suffix = "." + suffix
|
|
}
|
|
if strings.HasSuffix(s, suffix) {
|
|
s = s[:len(s)-len(suffix)]
|
|
break
|
|
}
|
|
}
|
|
if cfg.StripHyphens {
|
|
s = strings.ReplaceAll(s, "-", "")
|
|
}
|
|
return s
|
|
}
|
|
|
|
// MakeNormalizer returns a closure bound to cfg, suitable for Cache.GetByShortcut.
|
|
func MakeNormalizer(cfg config.ShortcutsConfig) func(string) string {
|
|
return func(name string) string {
|
|
return Normalize(name, cfg)
|
|
}
|
|
}
|
|
|
|
// AliasName returns a shell-safe alias name for the given host.
|
|
// It normalizes the name (strips configured domains and optionally hyphens) then
|
|
// replaces any remaining dots with underscores so the result is a valid identifier.
|
|
func AliasName(name string, cfg config.ShortcutsConfig) string {
|
|
s := Normalize(name, cfg)
|
|
return strings.ReplaceAll(s, ".", "_")
|
|
}
|