From d2c7c6693ea8ac43898e2ed07792ae23a9c5f09b Mon Sep 17 00:00:00 2001 From: Knut Ahlers Date: Wed, 29 Jun 2016 13:50:24 +0200 Subject: [PATCH] Added GitHub service with license command --- service_github.go | 76 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 service_github.go diff --git a/service_github.go b/service_github.go new file mode 100644 index 0000000..b4f877f --- /dev/null +++ b/service_github.go @@ -0,0 +1,76 @@ +package main + +import ( + "encoding/json" + "errors" + "net/http" + "strings" + + "golang.org/x/net/context" + "golang.org/x/net/context/ctxhttp" +) + +func init() { + registerServiceHandler("github", githubServiceHandler{}) +} + +type githubServiceHandler struct{} + +func (g githubServiceHandler) GetDocumentation() serviceHandlerDocumentationList { + return serviceHandlerDocumentationList{ + { + ServiceName: "GitHub repo license", + DemoPath: "/github/license/Luzifer/badge-gen", + Arguments: []string{"license", "", ""}, + }, + } +} + +func (g githubServiceHandler) Handle(ctx context.Context, params []string) (title, text, color string, err error) { + if len(params) < 2 { + err = errors.New("No service-command / parameters were given") + return + } + + switch params[0] { + case "license": + title, text, color, err = g.handleLicense(ctx, params[1:]) + default: + err = errors.New("An unknown service command was called") + } + + return +} + +func (g githubServiceHandler) handleLicense(ctx context.Context, params []string) (title, text, color string, err error) { + path := strings.Join([]string{"repos", params[0], params[1], "license"}, "/") + + req, _ := http.NewRequest("GET", "https://api.github.com/"+path, nil) + req.Header.Set("Accept", "application/vnd.github.drax-preview+json") + + var resp *http.Response + resp, err = ctxhttp.Do(ctx, http.DefaultClient, req) + if err != nil { + return + } + defer resp.Body.Close() + + r := struct { + License struct { + Name string `json:"name"` + } `json:"license"` + }{} + if err = json.NewDecoder(resp.Body).Decode(&r); err != nil { + return + } + + title = "license" + text = r.License.Name + color = "007ec6" + + if text == "" { + text = "None" + } + + return +}