tests for pics_oauthproxy

This commit is contained in:
Anderson Valério 2024-12-27 14:59:07 -03:00
parent f46f7a39f3
commit 982e27fc00
No known key found for this signature in database
GPG Key ID: 92D38E56BFF005A0
3 changed files with 72 additions and 21 deletions

View File

@ -804,13 +804,15 @@ func (p *OAuthProxy) backendLogout(rw http.ResponseWriter, req *http.Request, si
return
}
resp, err = PicsSignOutAllSessions(providerData.BackendLogoutAllSessionsURL, session.IntrospectClaims, session.AccessToken)
resp, err := PicsSignOutAllSessions(providerData.BackendLogoutAllSessionsURL, session.IntrospectClaims, session.AccessToken)
if err != nil {
logger.Errorf("error while calling backend logout all sessions: %v", err)
return
}
defer resp.Body.Close()
if resp.StatusCode() != 200 {
logger.Errorf("error while calling backend logout url, returned error code %v", resp.StatusCode())
}
} else {
if providerData.BackendLogoutURL == "" {
return
@ -826,10 +828,9 @@ func (p *OAuthProxy) backendLogout(rw http.ResponseWriter, req *http.Request, si
}
defer resp.Body.Close()
}
if resp.StatusCode != 200 {
logger.Errorf("error while calling backend logout url, returned error code %v", resp.StatusCode)
if resp.StatusCode != 200 {
logger.Errorf("error while calling backend logout url, returned error code %v", resp.StatusCode)
}
}
}

View File

@ -4,36 +4,31 @@ import (
"encoding/base64"
"encoding/json"
"fmt"
"net/http"
"strings"
"github.com/oauth2-proxy/oauth2-proxy/v7/pkg/logger"
"github.com/oauth2-proxy/oauth2-proxy/v7/pkg/requests"
)
const (
picsSignOutAllDevicesPath = "/sign_out_all_sessions"
)
func PicsSignOutAllSessions(backendLogoutAllSessionsURL string, introspectClaims string, accessToken string) (resp *http.Response, err error) {
func PicsSignOutAllSessions(backendLogoutAllSessionsURL string, introspectClaims string, accessToken string) (resp requests.Result, err error) {
userID, err := getUserID(introspectClaims)
if err != nil {
return nil, fmt.Errorf("error getting userId from instrospect claims: %v", err)
return nil, fmt.Errorf("error getting userID from instrospect claims: %v", err)
}
backendLogoutURL := strings.ReplaceAll(backendLogoutAllSessionsURL, "{user_id}", userID)
resp = requests.New(backendLogoutURL).
WithMethod("POST").
SetHeader("Authorization", "Bearer "+accessToken).
SetHeader("API-Version", "1").
SetHeader("Accept", "application/json").
Do()
dummyBody := strings.NewReader(`{}`)
req, err := http.NewRequest("POST", backendLogoutURL, dummyBody)
if err != nil {
return nil, fmt.Errorf("error creating post request: %v", err)
}
req.Header.Set("Authorization", "Bearer "+accessToken)
req.Header.Set("API-Version", "1")
req.Header.Set("Accept", "application/json")
resp, err = http.DefaultClient.Do(req)
if err != nil {
if resp.Error() != nil {
return nil, fmt.Errorf("error logging out from IAM: %v", err)
}

55
pics_oauthproxy_test.go Normal file
View File

@ -0,0 +1,55 @@
package main
import (
"encoding/base64"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func createIntrospectClaims() string {
claims := map[string]interface{}{
"sub": "1234567890",
}
claimsBytes, err := json.Marshal(claims)
if err != nil {
return ""
}
return base64.StdEncoding.EncodeToString(claimsBytes)
}
func Test_PicsSignOutAllSessionsReturnsErrorWhenUserIDIsNotFound(t *testing.T) {
_, err := PicsSignOutAllSessions("http://localhost:8080/test", "", "")
assert.Error(t, err)
}
func Test_getUserID(t *testing.T) {
introspectClaims := createIntrospectClaims()
userID, err := getUserID(introspectClaims)
assert.NoError(t, err)
assert.Equal(t, "1234567890", userID)
}
func Test_PicsSignOutAllSessionsReturns200Ok(t *testing.T) {
introspectClaims := createIntrospectClaims()
accessToken := "validAccessToken"
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, "Bearer "+accessToken, r.Header.Get("Authorization"))
assert.Equal(t, "1", r.Header.Get("API-Version"))
assert.Equal(t, "application/json", r.Header.Get("Accept"))
w.WriteHeader(http.StatusOK)
}))
defer server.Close()
resp, err := PicsSignOutAllSessions(server.URL+"/{user_id}", introspectClaims, accessToken)
assert.NoError(t, err)
assert.Equal(t, http.StatusOK, resp.StatusCode())
}