cli: clieanup and save endpoints and me

This commit is contained in:
Peter Stuifzand 2018-05-12 13:41:08 +02:00
parent 3615bdb64d
commit fa969e3602
3 changed files with 66 additions and 21 deletions

View File

@ -25,19 +25,56 @@ func loadAuth(c *client.Client, filename string) error {
return err return err
} }
c.Token = token.AccessToken c.Token = token.AccessToken
u, err := url.Parse(token.Me)
if err != nil {
return err
}
c.Me = u
return nil return nil
} }
func loadEndpoints(c *client.Client, me, filename string) error { func loadEndpoints(c *client.Client, me *url.URL, filename string) error {
endpoints, err := indieauth.GetEndpoints(me) var endpoints indieauth.Endpoints
f, err := os.Open(filename)
if err != nil { if err != nil {
return err f, err = os.Create(filename)
if err != nil {
return err
}
defer f.Close()
endpoints, err = indieauth.GetEndpoints(me)
if err != nil {
return err
}
enc := json.NewEncoder(f)
err = enc.Encode(&endpoints)
if err != nil {
return err
}
} else {
defer f.Close()
dec := json.NewDecoder(f)
err = dec.Decode(&endpoints)
if err != nil {
return err
}
}
if endpoints.MicrosubEndpoint == "" {
return fmt.Errorf("Microsub Endpoint is missing")
} }
u, err := url.Parse(endpoints.MicrosubEndpoint) u, err := url.Parse(endpoints.MicrosubEndpoint)
if err != nil { if err != nil {
return err return err
} }
c.MicrosubEndpoint = u c.MicrosubEndpoint = u
return nil return nil
} }
@ -55,8 +92,15 @@ func main() {
} }
defer f.Close() defer f.Close()
me := os.Args[2] me, err := url.Parse(os.Args[2])
if err != nil {
log.Fatal(err)
}
endpoints, err := indieauth.GetEndpoints(me) endpoints, err := indieauth.GetEndpoints(me)
if err != nil {
log.Fatal(err)
}
token, err := indieauth.Authorize(me, endpoints) token, err := indieauth.Authorize(me, endpoints)
if err != nil { if err != nil {
@ -64,25 +108,28 @@ func main() {
} }
enc := json.NewEncoder(f) enc := json.NewEncoder(f)
enc.Encode(token) err = enc.Encode(token)
if err != nil {
log.Fatal(err)
}
log.Println("Authorization successful") log.Println("Authorization successful")
return return
} }
me := os.Args[2]
var c client.Client var c client.Client
err := loadAuth(&c, "/home/peter/.config/microsub/client.json") err := loadAuth(&c, "/home/peter/.config/microsub/client.json")
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
err = loadEndpoints(&c, me, "/home/peter/.config/microsub/endpoints.json")
err = loadEndpoints(&c, c.Me, "/home/peter/.config/microsub/endpoints.json")
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
if len(os.Args) == 3 && os.Args[1] == "channels" { if len(os.Args) == 2 && os.Args[1] == "channels" {
channels := c.ChannelsGetList() channels := c.ChannelsGetList()
for _, ch := range channels { for _, ch := range channels {

View File

@ -11,6 +11,7 @@ import (
) )
type Client struct { type Client struct {
Me *url.URL
MicrosubEndpoint *url.URL MicrosubEndpoint *url.URL
Token string Token string
} }

View File

@ -13,10 +13,10 @@ import (
) )
type Endpoints struct { type Endpoints struct {
AuthorizationEndpoint string AuthorizationEndpoint string `json:"authorization_endpoint"`
TokenEndpoint string TokenEndpoint string `json:"token_endpoint"`
MicropubEndpoint string MicropubEndpoint string `json:"micropub_endpoint"`
MicrosubEndpoint string MicrosubEndpoint string `json:"microsub_endpoint"`
} }
type TokenResponse struct { type TokenResponse struct {
@ -26,15 +26,12 @@ type TokenResponse struct {
Scope string `json:"scope"` Scope string `json:"scope"`
} }
func GetEndpoints(me string) (Endpoints, error) { func GetEndpoints(me *url.URL) (Endpoints, error) {
var endpoints Endpoints var endpoints Endpoints
baseURL, err := url.Parse(me) baseURL := me
if err != nil {
return endpoints, err
}
res, err := http.Get(me) res, err := http.Get(me.String())
if err != nil { if err != nil {
return endpoints, err return endpoints, err
} }
@ -58,7 +55,7 @@ func GetEndpoints(me string) (Endpoints, error) {
return endpoints, nil return endpoints, nil
} }
func Authorize(me string, endpoints Endpoints) (TokenResponse, error) { func Authorize(me *url.URL, endpoints Endpoints) (TokenResponse, error) {
var tokenResponse TokenResponse var tokenResponse TokenResponse
authURL, err := url.Parse(endpoints.AuthorizationEndpoint) authURL, err := url.Parse(endpoints.AuthorizationEndpoint)
@ -78,7 +75,7 @@ func Authorize(me string, endpoints Endpoints) (TokenResponse, error) {
q := authURL.Query() q := authURL.Query()
q.Add("response_type", "code") q.Add("response_type", "code")
q.Add("me", me) q.Add("me", me.String())
q.Add("client_id", clientID) q.Add("client_id", clientID)
q.Add("redirect_uri", redirectURI) q.Add("redirect_uri", redirectURI)
q.Add("state", state) q.Add("state", state)
@ -128,7 +125,7 @@ func Authorize(me string, endpoints Endpoints) (TokenResponse, error) {
reqValues.Add("code", code) reqValues.Add("code", code)
reqValues.Add("redirect_uri", redirectURI) reqValues.Add("redirect_uri", redirectURI)
reqValues.Add("client_id", clientID) reqValues.Add("client_id", clientID)
reqValues.Add("me", me) reqValues.Add("me", me.String())
res, err := http.PostForm(endpoints.TokenEndpoint, reqValues) res, err := http.PostForm(endpoints.TokenEndpoint, reqValues)
if err != nil { if err != nil {