auto login

This commit is contained in:
Celogeek 2021-12-16 10:38:56 +01:00
parent 025991160b
commit 6c37970be2
Signed by: celogeek
GPG Key ID: E6B7BDCFC446233A
7 changed files with 76 additions and 31 deletions

View File

@ -59,7 +59,7 @@ func (p *Piwigo) LoadConfig() (err error) {
err = json.Unmarshal(b, &p)
if p.Url == "" || p.Token == nil {
if p.Url == "" || p.Username == "" || p.Password == "" {
err = errors.New("missing configuration url or token")
}

55
internal/piwigo/login.go Normal file
View File

@ -0,0 +1,55 @@
package piwigo
import (
"errors"
"net/url"
)
type StatusResponse struct {
User string `json:"username"`
Role string `json:"status"`
Version string `json:"version"`
}
func (p *Piwigo) GetStatus() (*StatusResponse, error) {
if p.Url == "" || p.Username == "" || p.Password == "" {
return nil, errors.New("missing configuration url or token")
}
resp := &StatusResponse{}
err := p.Post("pwg.session.getStatus", nil, resp)
if err != nil {
return nil, err
}
if resp.User == p.Username {
return resp, nil
}
return nil, errors.New("you are a guest")
}
func (p *Piwigo) Login() (*StatusResponse, error) {
resp, err := p.GetStatus()
if err != nil && err.Error() != "you are a guest" {
return nil, err
}
if resp != nil {
return resp, nil
}
err = p.Post("pwg.session.login", &url.Values{
"username": []string{p.Username},
"password": []string{p.Password},
}, nil)
if err != nil {
return nil, err
}
err = p.SaveConfig()
if err != nil {
return nil, err
}
return p.GetStatus()
}

View File

@ -1,10 +1,10 @@
package piwigo
import "net/http"
type Piwigo struct {
Url string `json:"url"`
Token *http.Cookie `json:"token"`
Username string `json:"username"`
Password string `json:"password"`
Token string `json:"token"`
}
type PiwigoResult struct {

View File

@ -42,8 +42,8 @@ func (p *Piwigo) Post(method string, form *url.Values, resp interface{}) error {
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
if p.Token != nil {
req.AddCookie(p.Token)
if p.Token != "" {
req.AddCookie(&http.Cookie{Name: "pwg_id", Value: p.Token, HttpOnly: true})
}
r, err := http.DefaultClient.Do(req)
@ -66,6 +66,7 @@ func (p *Piwigo) Post(method string, form *url.Values, resp interface{}) error {
if err != nil {
return err
}
DumpResponse(RawResult)
err = json.NewDecoder(newBody).Decode(&Result)
@ -85,7 +86,7 @@ func (p *Piwigo) Post(method string, form *url.Values, resp interface{}) error {
for _, c := range r.Cookies() {
if c.Name == "pwg_id" {
p.Token = c
p.Token = c.Value
break
}
}

View File

@ -28,6 +28,11 @@ func (c *GetInfosCommand) Execute(args []string) error {
return err
}
_, err := p.Login()
if err != nil {
return err
}
var resp GetInfosResponse
if err := p.Post("pwg.getInfos", &url.Values{}, &resp); err != nil {
@ -35,7 +40,7 @@ func (c *GetInfosCommand) Execute(args []string) error {
}
t := table.NewWriter()
t.AppendHeader(table.Row{"", "Value"})
t.AppendHeader(table.Row{"Key", "Value"})
for _, info := range resp.Infos {
t.AppendRow(table.Row{info.Name, info.Value})
}

View File

@ -2,7 +2,6 @@ package piwigocli
import (
"fmt"
"net/url"
"github.com/celogeek/piwigo-cli/internal/piwigo"
)
@ -18,19 +17,11 @@ func (c *LoginCommand) Execute(args []string) error {
p := piwigo.Piwigo{
Url: c.Url,
Username: c.Login,
Password: c.Password,
}
result := false
err := p.Post("pwg.session.login", &url.Values{
"username": []string{c.Login},
"password": []string{c.Password},
}, &result)
if err != nil {
return err
}
err = p.SaveConfig()
_, err := p.Login()
if err != nil {
return err
}

View File

@ -10,21 +10,14 @@ import (
type StatusCommand struct {
}
type StatusResponse struct {
User string `json:"username"`
Role string `json:"status"`
Version string `json:"version"`
}
func (c *StatusCommand) Execute(args []string) error {
p := piwigo.Piwigo{}
if err := p.LoadConfig(); err != nil {
return err
}
resp := &StatusResponse{}
if err := p.Post("pwg.session.getStatus", nil, &resp); err != nil {
resp, err := p.Login()
if err != nil {
return err
}