diff --git a/auth/csvauth/csvauth_test.go b/auth/csvauth/csvauth_test.go index 360032c..dc5254f 100644 --- a/auth/csvauth/csvauth_test.go +++ b/auth/csvauth/csvauth_test.go @@ -23,6 +23,8 @@ func TestCredentialCreationAndVerification(t *testing.T) { {"service2", "acme", []string{"plain"}, nil, "token2", false, true}, {"service3", "user3", []string{"pbkdf2", "1000", "16", "SHA-256"}, nil, "token3", false, false}, {"service4", "user4", []string{"bcrypt"}, []string{"audit", "triage"}, "token4", false, false}, + // {"token", "api~vkdAIZ2O", []string{"aes-128-gcm"}, nil, "api1", true, true}, + // {"token", "api~b5ZF2sRQ", []string{"aes-128-gcm"}, nil, "api2", true, true}, {"login", "user1", []string{"pbkdf2", "1000", "16", "SHA-256"}, nil, "pass1", true, false}, {"login", "user2", []string{"bcrypt"}, nil, "pass2", true, false}, {"login", "user3", []string{"aes-128-gcm"}, nil, "pass3", true, true}, diff --git a/cmd/calendar/main.go b/cmd/calendar/main.go index 948c1a8..fbd320e 100644 --- a/cmd/calendar/main.go +++ b/cmd/calendar/main.go @@ -82,6 +82,43 @@ var FIELDS = Fields{ R_LAST: 10, } +func GetFieldIndex(header []string, name string) int { + name = strings.ToLower(name) + for i, h := range header { + h = strings.ToLower(h) + if strings.EqualFold(strings.TrimSpace(h), name) { + return i + } + } + return -1 +} + +func GetFieldIndexWithPrefix(header []string, pre string) int { + pre = strings.ToLower(pre) + for i, h := range header { + h = strings.TrimSpace(strings.ToLower(h)) + if HasPrefixFold(h, pre) { + return i + } + } + return -1 +} + +func GetFieldLastIndexWithPrefix(header []string, pre string) int { + pre = strings.ToLower(pre) + for i := len(header) - 1; i >= 0; i-- { + h := strings.TrimSpace(strings.ToLower(header[i])) + if HasPrefixFold(h, pre) { + return i + } + } + return -1 +} + +func HasPrefixFold(s, prefix string) bool { + return len(s) >= len(prefix) && strings.EqualFold(s[:len(prefix)], prefix) +} + // ---------- 2. CSV → []Rule ---------- func LoadRules(csvr *csv.Reader) ([]Rule, error) { // first line is the header