# HG changeset patch # User Ollivier Robert # Date 1491832450 -7200 # Node ID 27c58d359940b3d36a1f87926e4b2a3822b060f5 # Parent 69711df3beac5c8914aed7f5d3213c4bbe46f380 Register the new client if not already done. diff -r 69711df3beac -r 27c58d359940 app.go --- a/app.go Fri Apr 07 15:32:49 2017 +0200 +++ b/app.go Mon Apr 10 15:54:10 2017 +0200 @@ -1,18 +1,95 @@ package gondole import ( + "encoding/json" + "github.com/sendgrid/rest" + "log" + "strings" +) +var ( + ourScopes = []string{ + "read", + "write", + "follow", + } ) -// NewApp registers a new instance -func NewApp(name, redirectURI string) (g *Gondole, err error) { - // Load configuration, will register if none is found +type registerApp struct { + ID int64 `json:"id"` + ClientID int64 `json:"Client_id"` + ClientSecret string `json:"client_secret"` +} + +func registerApplication(name string, scopes []string, redirectURI string) (g *Gondole, err error) { + g = &Gondole{ + Name: name, + } + + req := g.prepareRequest("apps") + if redirectURI != "" { + req.QueryParams["redirect_uris"] = redirectURI + } else { + req.QueryParams["redirect_uris"] = NoRedirect + } + req.QueryParams["client_name"] = name + req.QueryParams["scopes"] = strings.Join(scopes, " ") + req.Method = rest.Post - g = &Gondole{ - Name: name, - //ID: config.ID, - //Secret: config.BearerToken, + r, err := rest.API(req) + if err != nil { + log.Fatalf("error can not register app: %v", err) + } + + var resp registerApp + + err = json.Unmarshal([]byte(r.Body), &resp) + if err != nil { + log.Fatalf("error can not register app: %v", err) + } + g.ID = resp.ClientID + g.Secret = resp.ClientSecret + + server := &Server{ + ID: g.ID, + Name: name, + BearerToken: g.Secret, + } + err = server.WriteToken(name) + if err != nil { + log.Fatalf("error: can not write token for %s", name) } return } +// NewApp registers a new instance +func NewApp(name string, scopes []string, redirectURI string) (g *Gondole, err error) { + // Load configuration, will register if none is found + cnf, err := LoadConfig(name) + if err != nil { + // Nothing exist yet + cnf := Config{ + Default: name, + } + err = cnf.Write() + if err != nil { + log.Fatalf("error: can not write config for %s", name) + } + + // Now register this through OAuth + if scopes == nil { + scopes = ourScopes + } + + g, err = registerApplication(name, scopes, redirectURI) + + } else { + g = &Gondole{ + Name: cnf.Name, + ID: cnf.ID, + Secret: cnf.BearerToken, + } + } + + return +}