Skip to content

Commit 3a158ec

Browse files
committed
add cookies in keyring
1 parent 65195ee commit 3a158ec

3 files changed

Lines changed: 37 additions & 11 deletions

File tree

helper/credentials/saml.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,15 @@ func LookupCredentials(loginDetails *creds.LoginDetails, provider string) error
3333
loginDetails.ClientID = id
3434
loginDetails.ClientSecret = secret
3535
}
36+
37+
if provider == "Browser" {
38+
_, cookiesJson, err := CurrentHelper.Get(path.Join(loginDetails.URL, "/browserCookieJson"))
39+
if err != nil {
40+
return err
41+
}
42+
loginDetails.CookiesJson = cookiesJson
43+
}
44+
3645
return nil
3746
}
3847

pkg/creds/creds.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ type LoginDetails struct {
55
ClientID string // used by OneLogin
66
ClientSecret string // used by OneLogin
77
DownloadBrowser bool // used by Browser
8+
CookiesJson string // used by Browser
89
MFAIPAddress string // used by OneLogin
910
Username string
1011
Password string

pkg/provider/browser/browser.go

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
package browser
22

33
import (
4+
"path"
45
"errors"
56
"fmt"
67
"net/url"
7-
"os"
88
"regexp"
99
"strings"
10+
"encoding/json"
1011

1112
"github.com/playwright-community/playwright-go"
1213
"github.com/sirupsen/logrus"
1314
"github.com/versent/saml2aws/v2/pkg/cfg"
1415
"github.com/versent/saml2aws/v2/pkg/creds"
16+
"github.com/versent/saml2aws/v2/helper/credentials"
1517
)
1618

1719
var logger = logrus.WithField("provider", "browser")
@@ -113,20 +115,25 @@ func (cl *Client) Authenticate(loginDetails *creds.LoginDetails) (string, error)
113115
// create Context Optionsf
114116
contextOptions := playwright.BrowserNewContextOptions{}
115117

116-
// load saved storageState if present and add to contextOptions
117-
userHomeDir, err := os.UserHomeDir()
118-
storageStatePath := fmt.Sprintf("%s/.aws/saml2aws/storageState.json", userHomeDir)
118+
context, err := browser.NewContext(contextOptions)
119119
if err != nil {
120120
return "", err
121121
}
122-
if _, err := os.Stat(storageStatePath); err == nil {
123-
contextOptions.StorageStatePath = playwright.String(storageStatePath)
122+
123+
124+
if loginDetails.CookiesJson == "" {
125+
logger.Info("could not retrieve cookies")
126+
} else {
127+
logger.Info("cookie json string length: ", len(loginDetails.CookiesJson))
124128
}
125129

126-
// Create new broswer context
127-
context, err := browser.NewContext(contextOptions)
128-
if err != nil {
129-
return "", err
130+
var cookies []playwright.OptionalCookie
131+
if err := json.Unmarshal([]byte(loginDetails.CookiesJson), &cookies); err != nil {
132+
logger.Info("could not unmarshal cookies: %v", err)
133+
}
134+
135+
if err := context.AddCookies(cookies); err != nil {
136+
logger.Info("could not add cookies: %v", err)
130137
}
131138

132139
page, err := context.NewPage()
@@ -136,7 +143,16 @@ func (cl *Client) Authenticate(loginDetails *creds.LoginDetails) (string, error)
136143

137144
defer func() {
138145
logger.Info("saving storage state")
139-
_, err := context.StorageState(storageStatePath)
146+
cookies, err := context.Cookies(loginDetails.URL)
147+
if err != nil {
148+
logger.Info("could not get cookies: %v", err)
149+
}
150+
151+
cookiesByteArr, err := json.Marshal(cookies)
152+
if err != nil {
153+
logger.Info("Error converting storage state", err)
154+
}
155+
err = credentials.SaveCredentials(path.Join(loginDetails.URL, "/browserCookieJson"), loginDetails.Username, string(cookiesByteArr))
140156
if err != nil {
141157
logger.Info("Error saving storage state", err)
142158
}

0 commit comments

Comments
 (0)