mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-20 09:06:45 +00:00
62 lines
1020 B
Go
62 lines
1020 B
Go
package cookies
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/cookiejar"
|
|
"net/url"
|
|
"sync"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type Jar struct {
|
|
jar *cookiejar.Jar
|
|
persister *Persister
|
|
locker sync.Locker
|
|
}
|
|
|
|
func New(persister *Persister) (*Jar, error) {
|
|
jar, err := cookiejar.New(nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
cookies, err := persister.Load()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for rawURL, cookies := range cookies {
|
|
url, err := url.Parse(rawURL)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
jar.SetCookies(url, cookies)
|
|
}
|
|
|
|
return &Jar{
|
|
jar: jar,
|
|
persister: persister,
|
|
locker: &sync.Mutex{},
|
|
}, nil
|
|
}
|
|
|
|
func (j *Jar) SetCookies(u *url.URL, cookies []*http.Cookie) {
|
|
j.locker.Lock()
|
|
defer j.locker.Unlock()
|
|
|
|
j.jar.SetCookies(u, cookies)
|
|
|
|
if err := j.persister.Persist(u.String(), cookies); err != nil {
|
|
logrus.WithError(err).Warn("Failed to persist cookie")
|
|
}
|
|
}
|
|
|
|
func (j *Jar) Cookies(u *url.URL) []*http.Cookie {
|
|
j.locker.Lock()
|
|
defer j.locker.Unlock()
|
|
|
|
return j.jar.Cookies(u)
|
|
}
|