Skip to content

Commit db1fb01

Browse files
committed
add logout
1 parent e763875 commit db1fb01

File tree

3 files changed

+117
-0
lines changed

3 files changed

+117
-0
lines changed

pkg/cmd/logout.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package cmd
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"os"
7+
8+
"github.com/SwissDataScienceCenter/renku-dev-utils/pkg/github"
9+
ns "github.com/SwissDataScienceCenter/renku-dev-utils/pkg/namespace"
10+
"github.com/SwissDataScienceCenter/renku-dev-utils/pkg/renkuapi"
11+
"github.com/spf13/cobra"
12+
)
13+
14+
var logoutCmd = &cobra.Command{
15+
Use: "logout",
16+
Short: "Log out of a renku instance",
17+
Run: logout,
18+
}
19+
20+
func logout(cmd *cobra.Command, args []string) {
21+
ctx := context.Background()
22+
23+
logoutAll, err := cmd.Flags().GetBool("all")
24+
if err != nil {
25+
fmt.Println(err)
26+
os.Exit(1)
27+
}
28+
if logoutAll {
29+
err := renkuapi.LogoutAll(ctx)
30+
if err != nil {
31+
fmt.Println(err)
32+
os.Exit(1)
33+
}
34+
return
35+
}
36+
37+
url, err := cmd.Flags().GetString("url")
38+
if err != nil {
39+
fmt.Println(err)
40+
os.Exit(1)
41+
}
42+
43+
if url == "" {
44+
namespace, err := cmd.Flags().GetString("namespace")
45+
if err != nil {
46+
fmt.Println(err)
47+
os.Exit(1)
48+
}
49+
if namespace == "" {
50+
cli, err := github.NewGitHubCLI("")
51+
if err != nil {
52+
fmt.Println(err)
53+
os.Exit(1)
54+
}
55+
namespace, err = ns.FindCurrentNamespace(ctx, cli)
56+
if err != nil {
57+
fmt.Println(err)
58+
os.Exit(1)
59+
}
60+
}
61+
62+
deploymentURL, err := ns.GetDeploymentURL(namespace)
63+
if err != nil {
64+
fmt.Println(err)
65+
os.Exit(1)
66+
}
67+
url = deploymentURL.String()
68+
}
69+
70+
fmt.Printf("Renku URL: %s\n", url)
71+
72+
auth, err := renkuapi.NewRenkuApiAuth(url)
73+
if err != nil {
74+
fmt.Println(err)
75+
os.Exit(1)
76+
}
77+
78+
err = auth.Logout(ctx)
79+
if err != nil {
80+
fmt.Println(err)
81+
os.Exit(1)
82+
}
83+
}
84+
85+
func init() {
86+
logoutCmd.Flags().String("url", "", "instance URL")
87+
logoutCmd.Flags().StringP("namespace", "n", "", "k8s namespace")
88+
logoutCmd.Flags().Bool("all", false, "remote all saved logins")
89+
}

pkg/cmd/root.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ func init() {
3434
rootCmd.AddCommand(cleanupDeploymentCmd)
3535
rootCmd.AddCommand(copyKeycloakAdminPasswordCmd)
3636
rootCmd.AddCommand(loginCmd)
37+
rootCmd.AddCommand(logoutCmd)
3738
rootCmd.AddCommand(makeMeAdminCmd)
3839
rootCmd.AddCommand(namespaceCmd)
3940
rootCmd.AddCommand(openDeploymentCmd)

pkg/renkuapi/auth.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,11 @@ func (auth *RenkuApiAuth) saveAccessTokenToKeyring() (err error) {
155155
return keyring.Set(keyringService, kUser, auth.accessToken)
156156
}
157157

158+
func (auth *RenkuApiAuth) deleteAccessTokenFromKeyring() (err error) {
159+
kUser := fmt.Sprintf("%s:%s", auth.getKeyringUserPrefix(), "access_token")
160+
return keyring.Delete(keyringService, kUser)
161+
}
162+
158163
func (auth *RenkuApiAuth) getRefreshTokenFromKeyring() (token string, err error) {
159164
kUser := fmt.Sprintf("%s:%s", auth.getKeyringUserPrefix(), "refresh_token")
160165
return keyring.Get(keyringService, kUser)
@@ -168,6 +173,11 @@ func (auth *RenkuApiAuth) saveRefreshTokenToKeyring() (err error) {
168173
return keyring.Set(keyringService, kUser, auth.refreshToken)
169174
}
170175

176+
func (auth *RenkuApiAuth) deleteRefreshTokenFromKeyring() (err error) {
177+
kUser := fmt.Sprintf("%s:%s", auth.getKeyringUserPrefix(), "refresh_token")
178+
return keyring.Delete(keyringService, kUser)
179+
}
180+
171181
func (auth *RenkuApiAuth) getKeyringUserPrefix() string {
172182
return fmt.Sprintf("rdu:%s", auth.baseURL.String())
173183
}
@@ -475,3 +485,20 @@ func (auth *RenkuApiAuth) postRefeshToken(ctx context.Context, refreshToken stri
475485
}
476486
return result, nil
477487
}
488+
489+
func (auth *RenkuApiAuth) Logout(ctx context.Context) error {
490+
err1 := auth.deleteAccessTokenFromKeyring()
491+
err2 := auth.deleteRefreshTokenFromKeyring()
492+
if err1 != nil && err2 != nil {
493+
return fmt.Errorf("got errors: %w and %w", err1, err2)
494+
}
495+
if err1 != nil {
496+
return err1
497+
}
498+
return err2
499+
}
500+
501+
func LogoutAll(ctx context.Context) error {
502+
return keyring.DeleteAll(keyringService)
503+
504+
}

0 commit comments

Comments
 (0)