Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

clears authentications when logout is clicked #5316

Merged
5 changes: 5 additions & 0 deletions src/core/components/auth/auths.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ export default class Auths extends React.Component {
return key
}).toArray()

this.setState(auths.reduce((prev, auth) => {
prev[auth] = ""
return prev
}, {}))

authActions.logout(auths)
}

Expand Down
47 changes: 47 additions & 0 deletions test/e2e-cypress/static/documents/bugs/4641.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
openapi: 3.0.0
info:
title: Demo API
description: First test
termsOfService: 'http://demo.io/terms-of-service/'
contact:
name: Demo Support
email: [email protected]
version: 1.0.0

paths:
/4641_1:
get:
summary: Returns a 200
security:
- api_key_1: []
responses:
'200':
description: A 200
content:
application/text:
schema:
type: string
/4641_2:
get:
summary: Returns a 200
security:
- api_key_1: []
- api_key_2: []
responses:
'200':
description: A 200
content:
application/text:
schema:
type: string

components:
securitySchemes:
api_key_1:
type: apiKey
name: api_key_1
in: header
api_key_2:
type: apiKey
name: api_key_2
in: header
98 changes: 98 additions & 0 deletions test/e2e-cypress/tests/bugs/4641.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
const clickTryItOutAndExecute = () => {
return cy
.get(".opblock-summary")
.click()
.get(".try-out > .btn") // expand "try it out"
.click()
.get(".execute-wrapper > .btn") // excecute request
.click()
}

const fillInApiKeyAndAuthorise = apiKey => () => {
return cy
.get("section>input") // type api key into input
.type(apiKey)
.get(".auth-btn-wrapper > .authorize") // authorise button
.click()
}

const clickLogoutAndReauthorise = () => {
return cy
.get(".auth-btn-wrapper button:nth-child(1)") // logout button
.click()
.get(".auth-btn-wrapper > .authorize") // authorise button
.click()
}

describe("#4641: The Logout button in Authorize popup not clearing API Key", () => {
leggsimon marked this conversation as resolved.
Show resolved Hide resolved
beforeEach(() => {
cy.server()
cy
.route({
url: "/4641*",
response: "OK",
})
.as("request")
})

it("should include the given api key in requests", () => {
cy
.visit("/?url=/documents/bugs/4641.yaml")
.get("button.btn.authorize") // open authorize popup
.click()
.get(".modal-ux-content > :nth-child(1)") // only deal with api_key_1 for this test
.within(fillInApiKeyAndAuthorise("my_api_key"))
.get(".close-modal") // close authorise popup button
.click()
.get("#operations-default-get_4641_1") // expand the route details
.within(clickTryItOutAndExecute)
.get("@request")
.its("request")
.should(request => {
expect(request.headers).to.have.property("api_key_1", "my_api_key")
})
})

it("should not remember the previous auth value when you logout and reauthorise", () => {
cy
.visit("/?url=/documents/bugs/4641.yaml")
.get("button.btn.authorize") // open authorize popup
.click()
.get(".modal-ux-content > :nth-child(1)") // only deal with api_key_1 for this test
.within(fillInApiKeyAndAuthorise("my_api_key"))
.get(".modal-ux-content > :nth-child(1)") // only deal with api_key_1 for this test
.within(clickLogoutAndReauthorise)
.get(".close-modal") // close authorise popup button
.click()
.get("#operations-default-get_4641_1") // expand the route details
.within(clickTryItOutAndExecute)
.get("@request")
.its("request")
.should(request => {
expect(request.headers).not.to.have.property("api_key_1")
})
})

it("should not only forget the value of the auth the user logged out from", () => {
leggsimon marked this conversation as resolved.
Show resolved Hide resolved
cy
.visit("/?url=/documents/bugs/4641.yaml")
.get("button.btn.authorize") // open authorize popup
.click()
.get(".modal-ux-content > :nth-child(1)") // deal with api_key_1
.within(fillInApiKeyAndAuthorise("my_api_key"))
.get(".modal-ux-content > :nth-child(2)") // deal with api_key_2
.within(fillInApiKeyAndAuthorise("my_second_api_key"))
.get(".modal-ux-content > :nth-child(1)") // deal with api_key_1 again
.within(clickLogoutAndReauthorise)
.get(".close-modal") // close authorise popup button
.click()
.get("#operations-default-get_4641_2") // expand the route details
.within(clickTryItOutAndExecute)
.get("@request")
.its("request")
.should(request => {
expect(request.headers).not.to.have.property("api_key_1")
expect(request.headers).to.have.property("api_key_2", "my_second_api_key")
})
})
})