mirror of
https://github.com/celogeek/piwigo-cli.git
synced 2025-05-25 10:12:37 +02:00
factorize piwigo call
This commit is contained in:
parent
ddb44fd6eb
commit
9c0dffad8d
77
internal/piwigo/post.go
Normal file
77
internal/piwigo/post.go
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
package piwigo
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Piwigo struct {
|
||||||
|
Url string
|
||||||
|
Token string
|
||||||
|
Method string
|
||||||
|
}
|
||||||
|
|
||||||
|
type PiwigoResult struct {
|
||||||
|
Stat string `json:"stat"`
|
||||||
|
Err int `json:"err"`
|
||||||
|
ErrMessage string `json:"message"`
|
||||||
|
Result interface{} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Piwigo) BuildUrl() (string, error) {
|
||||||
|
|
||||||
|
Url, Err := url.Parse(p.Url)
|
||||||
|
if Err != nil {
|
||||||
|
return "", Err
|
||||||
|
}
|
||||||
|
Url.Path += "/ws.php"
|
||||||
|
q := Url.Query()
|
||||||
|
q.Set("format", "json")
|
||||||
|
q.Set("method", p.Method)
|
||||||
|
Url.RawQuery = q.Encode()
|
||||||
|
return Url.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Piwigo) Post(req *url.Values, resp interface{}) error {
|
||||||
|
Url, Err := p.BuildUrl()
|
||||||
|
if Err != nil {
|
||||||
|
return Err
|
||||||
|
}
|
||||||
|
|
||||||
|
r, Err := http.PostForm(Url, *req)
|
||||||
|
if Err != nil {
|
||||||
|
return Err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer r.Body.Close()
|
||||||
|
|
||||||
|
b, Err := ioutil.ReadAll(r.Body)
|
||||||
|
if Err != nil {
|
||||||
|
return Err
|
||||||
|
}
|
||||||
|
|
||||||
|
Result := PiwigoResult{
|
||||||
|
Result: resp,
|
||||||
|
}
|
||||||
|
|
||||||
|
Err = json.Unmarshal(b, &Result)
|
||||||
|
if Err != nil {
|
||||||
|
return Err
|
||||||
|
}
|
||||||
|
|
||||||
|
if Result.Stat != "ok" {
|
||||||
|
return fmt.Errorf("[Error %d] %s", Result.Err, Result.ErrMessage)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range r.Cookies() {
|
||||||
|
if c.Name == "pwg_id" {
|
||||||
|
p.Token = c.Value
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
59
login.go
59
login.go
@ -1,12 +1,10 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
"net/http"
|
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
|
"github.com/celogeek/piwigo-cli/internal/piwigo"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LoginCommand struct {
|
type LoginCommand struct {
|
||||||
@ -17,57 +15,24 @@ type LoginCommand struct {
|
|||||||
|
|
||||||
var loginCommand LoginCommand
|
var loginCommand LoginCommand
|
||||||
|
|
||||||
type Result struct {
|
|
||||||
Stat string `json:"stat"`
|
|
||||||
Result bool `json:"result"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *LoginCommand) Execute(args []string) error {
|
func (c *LoginCommand) Execute(args []string) error {
|
||||||
fmt.Printf("Login on %s...\n", c.Url)
|
fmt.Printf("Login on %s...\n", c.Url)
|
||||||
|
|
||||||
Url, err := url.Parse(c.Url)
|
Piwigo := piwigo.Piwigo{
|
||||||
if err != nil {
|
Url: c.Url,
|
||||||
return err
|
Method: "pwg.session.login",
|
||||||
}
|
|
||||||
Url.Path = "ws.php"
|
|
||||||
q := Url.Query()
|
|
||||||
q.Set("format", "json")
|
|
||||||
q.Set("method", "pwg.session.login")
|
|
||||||
Url.RawQuery = q.Encode()
|
|
||||||
fmt.Println(Url.String())
|
|
||||||
|
|
||||||
Form := url.Values{}
|
|
||||||
Form.Set("username", c.Login)
|
|
||||||
Form.Set("password", c.Password)
|
|
||||||
|
|
||||||
r, err := http.PostForm(Url.String(), Form)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer r.Body.Close()
|
|
||||||
|
|
||||||
b, err := ioutil.ReadAll(r.Body)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
result := Result{}
|
result := false
|
||||||
|
|
||||||
err = json.Unmarshal(b, &result)
|
if Err := Piwigo.Post(&url.Values{
|
||||||
if err != nil {
|
"username": []string{c.Login},
|
||||||
return err
|
"password": []string{c.Password},
|
||||||
|
}, &result); Err != nil {
|
||||||
|
return Err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !result.Result {
|
fmt.Printf("Token: %s\n", Piwigo.Token)
|
||||||
return errors.New("can't login with the credential provided")
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, c := range r.Cookies() {
|
|
||||||
if c.Name == "pwg_id" {
|
|
||||||
fmt.Println("Token:", c.Value)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user