fix(custom): parse port option line for OpenVPN

This commit is contained in:
Quentin McGaw
2024-04-30 08:02:28 +00:00
parent 8267d0e3bd
commit faa8340eea
2 changed files with 37 additions and 0 deletions

View File

@@ -64,6 +64,13 @@ func extractDataFromLine(line string) (
return ip, 0, "", fmt.Errorf("extracting from remote line: %w", err)
}
return ip, port, protocol, nil
case strings.HasPrefix(line, "port "):
port, err = extractPort(line)
if err != nil {
return ip, 0, "", fmt.Errorf("extracting from port line: %w", err)
}
return ip, port, "", nil
}
return ip, 0, "", nil
@@ -133,3 +140,25 @@ func extractRemote(line string) (ip netip.Addr, port uint16,
return ip, port, protocol, nil
}
var (
errPostLineFieldsCount = errors.New("post line has not 2 fields as expected")
)
func extractPort(line string) (port uint16, err error) {
fields := strings.Fields(line)
const expectedFieldsCount = 2
if len(fields) != expectedFieldsCount {
return 0, fmt.Errorf("%w: %s", errPostLineFieldsCount, line)
}
portInt, err := strconv.Atoi(fields[1])
if err != nil {
return 0, fmt.Errorf("%w: %s", errPortNotValid, line)
} else if portInt < 1 || portInt > 65535 {
return 0, fmt.Errorf("%w: %d must be between 1 and 65535", errPortNotValid, portInt)
}
port = uint16(portInt)
return port, nil
}

View File

@@ -118,6 +118,14 @@ func Test_extractDataFromLine(t *testing.T) {
port: 1194,
protocol: constants.UDP,
},
"extract_port_fail": {
line: "port a",
isErr: errPortNotValid,
},
"extract_port_success": {
line: "port 1194",
port: 1194,
},
}
for name, testCase := range testCases {