mirror of
https://github.com/celogeek/piwigo-cli.git
synced 2025-05-25 02:02:37 +02:00
auto login
This commit is contained in:
parent
025991160b
commit
6c37970be2
@ -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
55
internal/piwigo/login.go
Normal 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()
|
||||
}
|
@ -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 {
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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})
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user