Skip to content

Commit a16f4c6

Browse files
author
OpenShift Bot
authored
Merge pull request #12962 from juanvallejo/jvallejo/delete-sa-token-kubeconfig-logout
Merged by openshift-bot
2 parents 275db41 + 3c0eb53 commit a16f4c6

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

pkg/cmd/cli/cmd/login/logout.go

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"io"
77

8+
"github.com/golang/glog"
89
"github.com/spf13/cobra"
910

1011
"k8s.io/kubernetes/pkg/client/restclient"
@@ -124,24 +125,29 @@ func (o LogoutOptions) RunLogout() error {
124125
}
125126

126127
if err := client.OAuthAccessTokens().Delete(token); err != nil {
127-
return err
128+
glog.V(1).Infof("%v", err)
128129
}
129130

130-
newConfig := *o.StartingKubeConfig
131+
configErr := deleteTokenFromConfig(*o.StartingKubeConfig, o.PathOptions, token)
132+
if configErr == nil {
133+
glog.V(1).Infof("Removed token from your local configuration.")
134+
135+
// only return error instead of successful message if removing token from client
136+
// config fails. Any error that occurs deleting token using api is logged above.
137+
fmt.Fprintf(o.Out, "Logged %q out on %q\n", userInfo.Name, o.Config.Host)
138+
}
139+
140+
return configErr
141+
}
131142

132-
for key, value := range newConfig.AuthInfos {
133-
if value.Token == token {
143+
func deleteTokenFromConfig(config kclientcmdapi.Config, pathOptions *kclientcmd.PathOptions, bearerToken string) error {
144+
for key, value := range config.AuthInfos {
145+
if value.Token == bearerToken {
134146
value.Token = ""
135-
newConfig.AuthInfos[key] = value
147+
config.AuthInfos[key] = value
136148
// don't break, its possible that more than one user stanza has the same token.
137149
}
138150
}
139151

140-
if err := kclientcmd.ModifyConfig(o.PathOptions, newConfig, true); err != nil {
141-
return err
142-
}
143-
144-
fmt.Fprintf(o.Out, "Logged %q out on %q\n", userInfo.Name, o.Config.Host)
145-
146-
return nil
152+
return kclientcmd.ModifyConfig(pathOptions, config, true)
147153
}

test/cmd/login.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,15 @@ os::cmd::expect_failure_and_text 'oc get pods' '"system:anonymous" cannot list p
8787
# os::cmd::expect_failure_and_text "oc login '${KUBERNETES_MASTER}' -u test -p test '--config=${templocation}/file' --insecure-skip-tls-verify" 'KUBECONFIG is set to a file that cannot be created or modified'
8888
echo "login warnings: ok"
8989

90+
# login and create serviceaccount and test login and logout with a service account token
91+
os::cmd::expect_success "oc login ${KUBERNETES_MASTER} --certificate-authority='${MASTER_CONFIG_DIR}/ca.crt' -u test-user -p anything --api-version=v1"
92+
os::cmd::expect_success_and_text "oc create sa testserviceaccount" "serviceaccount \"testserviceaccount\" created"
93+
os::cmd::expect_success_and_text "oc login --token=$(oc sa get-token testserviceaccount)" "system:serviceaccount:project-foo:testserviceaccount"
94+
# attempt to logout successfully
95+
os::cmd::expect_success_and_text "oc logout" "Logged \"system:serviceaccount:project-foo:testserviceaccount\" out"
96+
# verify that the token is no longer present in our local config
97+
os::cmd::expect_failure_and_text "oc whoami" "User \"system:anonymous\" cannot get users"
98+
9099
# log in and set project to use from now on
91100
os::cmd::expect_success "oc login --server=${KUBERNETES_MASTER} --certificate-authority='${MASTER_CONFIG_DIR}/ca.crt' -u test-user -p anything"
92101
os::cmd::expect_success 'oc get projects'

0 commit comments

Comments
 (0)