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)
|
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")
|
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
|
package piwigo
|
||||||
|
|
||||||
import "net/http"
|
|
||||||
|
|
||||||
type Piwigo struct {
|
type Piwigo struct {
|
||||||
Url string `json:"url"`
|
Url string `json:"url"`
|
||||||
Token *http.Cookie `json:"token"`
|
Username string `json:"username"`
|
||||||
|
Password string `json:"password"`
|
||||||
|
Token string `json:"token"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type PiwigoResult struct {
|
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")
|
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||||
if p.Token != nil {
|
if p.Token != "" {
|
||||||
req.AddCookie(p.Token)
|
req.AddCookie(&http.Cookie{Name: "pwg_id", Value: p.Token, HttpOnly: true})
|
||||||
}
|
}
|
||||||
|
|
||||||
r, err := http.DefaultClient.Do(req)
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
DumpResponse(RawResult)
|
DumpResponse(RawResult)
|
||||||
|
|
||||||
err = json.NewDecoder(newBody).Decode(&Result)
|
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() {
|
for _, c := range r.Cookies() {
|
||||||
if c.Name == "pwg_id" {
|
if c.Name == "pwg_id" {
|
||||||
p.Token = c
|
p.Token = c.Value
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,11 @@ func (c *GetInfosCommand) Execute(args []string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, err := p.Login()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
var resp GetInfosResponse
|
var resp GetInfosResponse
|
||||||
|
|
||||||
if err := p.Post("pwg.getInfos", &url.Values{}, &resp); err != nil {
|
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 := table.NewWriter()
|
||||||
t.AppendHeader(table.Row{"", "Value"})
|
t.AppendHeader(table.Row{"Key", "Value"})
|
||||||
for _, info := range resp.Infos {
|
for _, info := range resp.Infos {
|
||||||
t.AppendRow(table.Row{info.Name, info.Value})
|
t.AppendRow(table.Row{info.Name, info.Value})
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package piwigocli
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
|
||||||
|
|
||||||
"github.com/celogeek/piwigo-cli/internal/piwigo"
|
"github.com/celogeek/piwigo-cli/internal/piwigo"
|
||||||
)
|
)
|
||||||
@ -17,20 +16,12 @@ func (c *LoginCommand) Execute(args []string) error {
|
|||||||
fmt.Printf("Login on %s...\n", c.Url)
|
fmt.Printf("Login on %s...\n", c.Url)
|
||||||
|
|
||||||
p := piwigo.Piwigo{
|
p := piwigo.Piwigo{
|
||||||
Url: c.Url,
|
Url: c.Url,
|
||||||
|
Username: c.Login,
|
||||||
|
Password: c.Password,
|
||||||
}
|
}
|
||||||
|
|
||||||
result := false
|
_, err := p.Login()
|
||||||
|
|
||||||
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()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -10,21 +10,14 @@ import (
|
|||||||
type StatusCommand struct {
|
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 {
|
func (c *StatusCommand) Execute(args []string) error {
|
||||||
p := piwigo.Piwigo{}
|
p := piwigo.Piwigo{}
|
||||||
if err := p.LoadConfig(); err != nil {
|
if err := p.LoadConfig(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
resp := &StatusResponse{}
|
resp, err := p.Login()
|
||||||
|
if err != nil {
|
||||||
if err := p.Post("pwg.session.getStatus", nil, &resp); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user