Fix SSO support for anyconnect
This commit is contained in:
+2
-2
@@ -153,8 +153,8 @@ require (
|
||||
github.com/sagernet/nftables v0.3.0-mod.4 // indirect
|
||||
github.com/sagernet/sing-cloudflared v0.1.3-0.20260706062323-d9787e794aa3 // indirect
|
||||
github.com/sagernet/sing-mux v0.3.5 // indirect
|
||||
github.com/sagernet/sing-openconnect v0.0.0-20260717081856-cf2c71a71aba // indirect
|
||||
github.com/sagernet/sing-openvpn v0.0.0-20260718013246-3cd8a7b83247 // indirect
|
||||
github.com/sagernet/sing-openconnect v0.0.0-20260718163953-a1c7815e4f04 // indirect
|
||||
github.com/sagernet/sing-openvpn v0.0.0-20260718163953-26ecbeb6352c // indirect
|
||||
github.com/sagernet/sing-shadowtls v0.2.1 // indirect
|
||||
github.com/sagernet/sing-snell v0.0.0-20260710094516-a4e97ee24beb // indirect
|
||||
github.com/sagernet/sing-usbip v0.0.0-20260616101517-efb91521eddb // indirect
|
||||
|
||||
+4
-4
@@ -304,10 +304,10 @@ github.com/sagernet/sing-cloudflared v0.1.3-0.20260706062323-d9787e794aa3 h1:3y6
|
||||
github.com/sagernet/sing-cloudflared v0.1.3-0.20260706062323-d9787e794aa3/go.mod h1:XEqEDYRCAYLaoPjZ1ifVWJg5iWAJHL2gOAXe/PM28Cg=
|
||||
github.com/sagernet/sing-mux v0.3.5 h1:RHnhVEc+SFqkrK4xMygYjDwwLhzp2Bj3lztSukONfhI=
|
||||
github.com/sagernet/sing-mux v0.3.5/go.mod h1:QvlKMyNBNrQoyX4x+gq028uPbLM2XeRpWtDsWBJbFSk=
|
||||
github.com/sagernet/sing-openconnect v0.0.0-20260717081856-cf2c71a71aba h1:S87Ej/jFssn0qhPF1ExF0YIV0USfGZF2If6kSjGLPt8=
|
||||
github.com/sagernet/sing-openconnect v0.0.0-20260717081856-cf2c71a71aba/go.mod h1:EIzh5HtImfQJxPKXFwS9lyMnmMy4aCQCx7ntQ4u41Gs=
|
||||
github.com/sagernet/sing-openvpn v0.0.0-20260718013246-3cd8a7b83247 h1:IfZqHohaWz13eqc6SAUHkmP9xhMpMBDIShl7OtgRd5Y=
|
||||
github.com/sagernet/sing-openvpn v0.0.0-20260718013246-3cd8a7b83247/go.mod h1:CmTGnS5ijVSqFQV1dTq4WvFLUoz7bk9xasBPsX8NcYo=
|
||||
github.com/sagernet/sing-openconnect v0.0.0-20260718163953-a1c7815e4f04 h1:HIb3Tu19qqH5fD5xnyyHb6zJaETIsnXamb/hWTtxil8=
|
||||
github.com/sagernet/sing-openconnect v0.0.0-20260718163953-a1c7815e4f04/go.mod h1:EIzh5HtImfQJxPKXFwS9lyMnmMy4aCQCx7ntQ4u41Gs=
|
||||
github.com/sagernet/sing-openvpn v0.0.0-20260718163953-26ecbeb6352c h1:EhwLZF3IUyDj4uZ7vkUZAI7GymXCeOCwiseuOTsFjp8=
|
||||
github.com/sagernet/sing-openvpn v0.0.0-20260718163953-26ecbeb6352c/go.mod h1:CmTGnS5ijVSqFQV1dTq4WvFLUoz7bk9xasBPsX8NcYo=
|
||||
github.com/sagernet/sing-quic v0.6.4-0.20260709034545-e23afe1172dc h1:zdc0fj4JdAdgAmQIoh7ZF+B/wPTEF2X75lYDqTmvlaw=
|
||||
github.com/sagernet/sing-quic v0.6.4-0.20260709034545-e23afe1172dc/go.mod h1:9k+dzGsWMttUGldBzq3dU792YHXzW6NgfbOGltnXq+0=
|
||||
github.com/sagernet/sing-shadowsocks v0.2.8 h1:PURj5PRoAkqeHh2ZW205RWzN9E9RtKCVCzByXruQWfE=
|
||||
|
||||
+14
-10
@@ -123,7 +123,7 @@ func TestOpenConnectDockerInterop(t *testing.T) {
|
||||
))
|
||||
endpoint := requireOpenConnectEndpoint(subtest, instance)
|
||||
status := waitForOpenConnectState(subtest, endpoint, adapter.OpenConnectStateConnected, 45*time.Second)
|
||||
require.Nil(subtest, status.AuthForm)
|
||||
require.Nil(subtest, status.AuthChallenge)
|
||||
err := exchangeOpenConnectTCPEcho(endpoint, 256*1024, 30*time.Second)
|
||||
require.NoError(subtest, err)
|
||||
err = exchangeOpenConnectUDPEcho(endpoint, 1400, 30*time.Second)
|
||||
@@ -167,7 +167,7 @@ func TestOpenConnectDockerInterop(t *testing.T) {
|
||||
|
||||
status := endpoint.OpenConnectStatus()
|
||||
require.Equal(subtest, adapter.OpenConnectStateConnected, status.State, status.Error)
|
||||
require.Nil(subtest, status.AuthForm)
|
||||
require.Nil(subtest, status.AuthChallenge)
|
||||
logs, err := openConnectDockerOutput(ctx, "logs", container.name)
|
||||
require.NoError(subtest, err)
|
||||
require.GreaterOrEqual(subtest, strings.Count(logs, "HTTP CONNECT /CSCOSSLC/tunnel"), 2, logs)
|
||||
@@ -254,13 +254,15 @@ func driveOpenConnectInteractiveAuthentication(t *testing.T, endpoint adapter.Op
|
||||
case adapter.OpenConnectStateError:
|
||||
t.Fatal(status.Error)
|
||||
case adapter.OpenConnectStateAuthPending:
|
||||
form := status.AuthForm
|
||||
require.NotNil(t, form)
|
||||
require.NotEmpty(t, form.ID)
|
||||
_, completed := completedForms[form.ID]
|
||||
challenge := status.AuthChallenge
|
||||
require.NotNil(t, challenge)
|
||||
require.NotNil(t, challenge.Form)
|
||||
require.Nil(t, challenge.Browser)
|
||||
require.NotEmpty(t, challenge.ID)
|
||||
_, completed := completedForms[challenge.ID]
|
||||
if !completed {
|
||||
values := make(map[string]string, len(form.Fields))
|
||||
for _, field := range form.Fields {
|
||||
values := make(map[string]string, len(challenge.Form.Fields))
|
||||
for _, field := range challenge.Form.Fields {
|
||||
require.NotEmpty(t, field.SubmissionKey)
|
||||
switch field.Name {
|
||||
case "username":
|
||||
@@ -274,9 +276,11 @@ func driveOpenConnectInteractiveAuthentication(t *testing.T, endpoint adapter.Op
|
||||
}
|
||||
}
|
||||
require.NotEmpty(t, values)
|
||||
err := endpoint.CompleteAuthForm(form.ID, values)
|
||||
err := endpoint.CompleteAuthChallenge(challenge.ID, adapter.OpenConnectAuthResponse{
|
||||
Form: &adapter.OpenConnectAuthFormResponse{Values: values},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
completedForms[form.ID] = struct{}{}
|
||||
completedForms[challenge.ID] = struct{}{}
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user