11package browser
22
33import (
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
1719var 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