Skip to content

Commit 5ae61b2

Browse files
author
Artur Kh
committed
Add list command; Make GistReponse & FileResponse
1 parent 9cdbef4 commit 5ae61b2

File tree

2 files changed

+147
-19
lines changed

2 files changed

+147
-19
lines changed

gist.go

Lines changed: 92 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package main
33
import (
44
"bytes"
55
"encoding/json"
6-
"fmt"
76
"io/ioutil"
87
"net/http"
98
)
@@ -21,6 +20,21 @@ type Gist struct {
2120
Public bool `json:"public"`
2221
}
2322

23+
type FileResponse struct {
24+
Size int `json:"size"`
25+
Type string `json:"type"`
26+
Language string `json:"laguage"`
27+
}
28+
29+
type GistResponse struct {
30+
Description string `json:"description"`
31+
Files map[string]*FileResponse `json:"files"`
32+
HtmlUrl string `json:"html_url"`
33+
Id string `json:"id"`
34+
Public bool `json:"public"`
35+
User string `json:"user"`
36+
}
37+
2438
func (gist *Gist) Create(anonymous bool) (string, error) {
2539
buf := bytes.NewBuffer(nil)
2640
e := json.NewEncoder(buf)
@@ -34,7 +48,7 @@ func (gist *Gist) Create(anonymous bool) (string, error) {
3448
}
3549

3650
req.Header.Add("Content-type", "application/json")
37-
if !anonymous {
51+
if config.APIKey != "" && !anonymous {
3852
req.Header.Add("Authorization", "token "+config.APIKey)
3953
}
4054

@@ -50,15 +64,86 @@ func (gist *Gist) Create(anonymous bool) (string, error) {
5064
return "", err
5165
}
5266

53-
fmt.Println(string(body))
67+
var gistResp GistResponse
68+
err = json.Unmarshal(body, &gistResp)
69+
if err != nil {
70+
return "", err
71+
}
5472

55-
return "", nil
73+
return gistResp.HtmlUrl, nil
5674
}
5775

5876
func (gist *Gist) Update(uid string) (string, error) {
59-
return "", nil
77+
buf := bytes.NewBuffer(nil)
78+
e := json.NewEncoder(buf)
79+
if err := e.Encode(gist); err != nil {
80+
return "", err
81+
}
82+
83+
req, err := http.NewRequest("PATCH", GitHubAPIURL+"/gists/"+uid, buf)
84+
if err != nil {
85+
return "", err
86+
}
87+
88+
req.Header.Add("Content-type", "application/json")
89+
if config.APIKey != "" {
90+
req.Header.Add("Authorization", "token "+config.APIKey)
91+
}
92+
93+
client := &http.Client{}
94+
resp, err := client.Do(req)
95+
if err != nil {
96+
return "", err
97+
}
98+
99+
defer resp.Body.Close()
100+
body, err := ioutil.ReadAll(resp.Body)
101+
if err != nil {
102+
return "", err
103+
}
104+
105+
var gistResp GistResponse
106+
err = json.Unmarshal(body, &gistResp)
107+
if err != nil {
108+
return "", err
109+
}
110+
111+
return gistResp.HtmlUrl, nil
60112
}
61113

62-
func GistList(user string) ([]*Gist, error) {
63-
return nil, nil
114+
func GistList(user string) ([]*GistResponse, error) {
115+
var uri string
116+
if user != "" {
117+
uri = "/users/" + user + "/gists"
118+
}
119+
120+
req, err := http.NewRequest("GET", GitHubAPIURL+uri, nil)
121+
if err != nil {
122+
return nil, err
123+
}
124+
125+
req.Header.Add("Content-type", "application/json")
126+
if config.APIKey != "" {
127+
req.Header.Add("Authorization", "token "+config.APIKey)
128+
}
129+
130+
client := &http.Client{}
131+
resp, err := client.Do(req)
132+
if err != nil {
133+
return nil, err
134+
}
135+
136+
defer resp.Body.Close()
137+
body, err := ioutil.ReadAll(resp.Body)
138+
if err != nil {
139+
return nil, err
140+
}
141+
142+
var gistResp []*GistResponse
143+
err = json.Unmarshal(body, &gistResp)
144+
if err != nil {
145+
return nil, err
146+
}
147+
148+
return gistResp, nil
64149
}

go-gist.go

Lines changed: 55 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"flag"
55
"fmt"
66
"io/ioutil"
7+
"strings"
78
)
89

910
var config = ConfigNew()
@@ -14,40 +15,82 @@ func main() {
1415
panic(err)
1516
}
1617

17-
login := flag.Bool("login", false, "Authenticate gist on this computer.")
18-
private := flag.Bool("p", false, "Indicates whether the gist is private.")
18+
anonymousFlag := flag.Bool("a", false, "Create an anonymous gist.")
1919
description := flag.String("d", "", "A description of the gist.")
20-
update := flag.String("u", "", "Update an existing gist.")
21-
list := flag.String("l", "", "List gists for user.")
22-
anonymous := flag.Bool("a", false, "Create an anonymous gist.")
2320
gistType := flag.String("t", "", "Sets the file extension and syntax type.")
21+
loginFlag := flag.Bool("login", false, "Authenticate gist on this computer.")
22+
privateFlag := flag.Bool("p", false, "Indicates whether the gist is private.")
23+
update := flag.String("u", "", "Update an existing gist. Takes ID as an argument.")
24+
user := flag.String("l", "", "List gists for user.")
25+
2426
flag.Parse()
2527

28+
if *loginFlag {
29+
login()
30+
} else if *user != "" {
31+
list(*user)
32+
} else if flag.NArg() > 0 {
33+
create(*update, *anonymousFlag, !*privateFlag, *description, *gistType, flag.Args())
34+
}
35+
}
36+
37+
func list(user string) {
38+
resp, err := GistList(user)
39+
if err != nil {
40+
fmt.Println(err)
41+
}
42+
43+
for _, r := range resp {
44+
var files []string
45+
for f := range r.Files {
46+
files = append(files, f)
47+
}
48+
49+
var secret string
50+
if r.Public == false {
51+
secret = "(secret)"
52+
}
53+
54+
fmt.Printf("%s %s %s\n", r.HtmlUrl, strings.Join(files, " "), secret)
55+
}
56+
}
57+
58+
func create(uid string, anonymous bool, public bool, desc string, gistType string, args []string) {
2659
gist := &Gist{
2760
make(map[string]*File),
28-
*description,
29-
!*private,
61+
desc,
62+
public,
3063
}
3164

3265
for _, name := range flag.Args() {
3366
content, err := ioutil.ReadFile(name)
3467
if err != nil {
3568
panic(err)
3669
}
70+
71+
if gistType != "" {
72+
name += "." + gistType
73+
}
74+
3775
gist.Files[name] = &File{name, string(content)}
3876
}
3977

40-
var gistUrl string
78+
var url string
79+
var err error
4180

42-
if *update != "" {
43-
gistUrl, err = gist.Update(*update)
81+
if uid != "" {
82+
url, err = gist.Update(uid)
4483
} else {
45-
gistUrl, err = gist.Create(*anonymous)
84+
url, err = gist.Create(anonymous)
4685
}
4786

4887
if err != nil {
4988
panic(err)
5089
}
5190

52-
fmt.Println(gistUrl)
91+
fmt.Println(url)
92+
}
93+
94+
func login() {
95+
5396
}

0 commit comments

Comments
 (0)