Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
fun updateSectionInConfig(sectionName: String, profile: Profile)

fun deleteSsoConnectionFromConfig(sessionName: String)
fun deleteSsoProfileScopesFromConfig(sessionName: String)
}

class DefaultConfigFilesFacade(
Expand Down Expand Up @@ -197,6 +198,31 @@
}
}

override fun deleteSsoProfileScopesFromConfig(sessionName: String) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what if a user is depending on the session to have scopes outside of the extension?

val filePath = configPath

Check warning on line 202 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt#L202

Added line #L202 was not covered by tests
val lines = filePath.inputStreamIfExists()?.reader()?.readLines().orEmpty().toMutableList()
val ssoHeaderLine = lines.indexOfFirst { it.startsWith("[${SsoSessionConstants.SSO_SESSION_SECTION_NAME} $sessionName]") }

Check warning on line 204 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt#L204

Added line #L204 was not covered by tests
if (ssoHeaderLine == -1) return
val nextHeaderLine = lines.subList(ssoHeaderLine + 1, lines.size).indexOfFirst { it.startsWith("[") }

Check warning on line 206 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt#L206

Added line #L206 was not covered by tests
val endIndex = if (nextHeaderLine == -1) lines.size else ssoHeaderLine + nextHeaderLine + 1

// Find and remove the sso_registration_scopes line
for (i in ssoHeaderLine until endIndex) {
if (lines[i].trim().startsWith("sso_registration_scopes=")) {
lines.removeAt(i)
break

Check warning on line 213 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt#L212-L213

Added lines #L212 - L213 were not covered by tests
}
}

filePath.writeText(lines.joinToString("\n"))

Check warning on line 217 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt#L217

Added line #L217 was not covered by tests

val applicationManager = ApplicationManager.getApplication()

Check warning on line 219 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt#L219

Added line #L219 was not covered by tests
if (applicationManager != null && !applicationManager.isUnitTestMode) {
FileDocumentManager.getInstance().saveAllDocuments()
ProfileWatcher.getInstance().forceRefresh()

Check warning on line 222 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt#L221-L222

Added lines #L221 - L222 were not covered by tests
}
}

Check warning on line 224 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/ConfigFilesFacade.kt#L224

Added line #L224 was not covered by tests

private fun getCorrespondingSsoSessionProfilePosition(updatedArray: List<String>, sessionName: String): List<String> {
var content = updatedArray
val finalContent = mutableListOf<String>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import software.aws.toolkits.core.utils.info
import software.aws.toolkits.core.utils.warn
import software.aws.toolkits.jetbrains.core.credentials.pinning.FeatureWithPinnedConnection
import software.aws.toolkits.jetbrains.core.credentials.profiles.ProfileCredentialsIdentifierSso
import software.aws.toolkits.jetbrains.core.credentials.profiles.ProfileWatcher
import software.aws.toolkits.jetbrains.core.credentials.profiles.SsoSessionConstants.SSO_SESSION_SECTION_NAME
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenAuthState
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProvider
Expand Down Expand Up @@ -204,6 +205,7 @@ fun loginSso(
fun logoutFromSsoConnection(project: Project?, connection: AwsBearerTokenConnection, callback: () -> Unit = {}) {
try {
ToolkitAuthManager.getInstance().deleteConnection(connection.id)
ProfileWatcher.getInstance().forceRefresh()
if (connection is ProfileSsoManagedBearerSsoConnection) {
deleteSsoConnection(connection)
}
Expand Down Expand Up @@ -338,7 +340,7 @@ fun deleteSsoConnection(connection: ProfileSsoManagedBearerSsoConnection) =
fun deleteSsoConnection(connection: CredentialIdentifier) =
deleteSsoConnection(getSsoSessionProfileNameFromCredentials(connection))

fun deleteSsoConnection(sessionName: String) = DefaultConfigFilesFacade().deleteSsoConnectionFromConfig(sessionName)
fun deleteSsoConnection(sessionName: String) = DefaultConfigFilesFacade().deleteSsoProfileScopesFromConfig(sessionName)

private fun getSsoSessionProfileNameFromCredentials(connection: CredentialIdentifier): String {
connection as ProfileCredentialsIdentifierSso
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,15 @@ package software.aws.toolkits.jetbrains.core.credentials.actions
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.project.DumbAwareAction
import com.intellij.openapi.ui.MessageDialogBuilder
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
import software.aws.toolkits.jetbrains.core.credentials.ProfileSsoManagedBearerSsoConnection
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManagerListener
import software.aws.toolkits.jetbrains.core.credentials.deleteSsoConnection
import software.aws.toolkits.jetbrains.core.credentials.logoutFromSsoConnection
import software.aws.toolkits.resources.AwsCoreBundle
import software.aws.toolkits.telemetry.UiTelemetry

class SsoLogoutAction(private val value: AwsBearerTokenConnection) : DumbAwareAction(AwsCoreBundle.message("credentials.individual_identity.signout")) {
override fun actionPerformed(e: AnActionEvent) {
UiTelemetry.click(e.project, "signOut")
if (value is ProfileSsoManagedBearerSsoConnection) {
val confirmDeletion = MessageDialogBuilder.okCancel(
AwsCoreBundle.message("gettingstarted.auth.idc.sign.out.confirmation.title"),
AwsCoreBundle.message("gettingstarted.auth.idc.sign.out.confirmation")
).yesText(AwsCoreBundle.message("general.confirm")).ask(e.project)
if (confirmDeletion) {
deleteSsoConnection(value)
}
}
logoutFromSsoConnection(e.project, value)
ApplicationManager.getApplication().messageBus.syncPublisher(
ToolkitConnectionManagerListener.TOPIC
Expand Down
Loading