Ver Código Fonte

Support for basic auth with token or password

Lucas Stadler 10 anos atrás
pai
commit
969309f365
1 arquivos alterados com 34 adições e 1 exclusões
  1. 34 1
      go/unpaginate/unpaginate.go

+ 34 - 1
go/unpaginate/unpaginate.go

@ -13,15 +13,23 @@
13 13
package main
14 14
15 15
import (
16
	"encoding/base64"
16 17
	"encoding/json"
17 18
	"flag"
18 19
	"fmt"
20
	"golang.org/x/crypto/ssh/terminal"
19 21
	"net/http"
20 22
	"os"
21 23
	"strings"
22 24
)
23 25
26
var config struct {
27
	userInfo string
28
}
29
24 30
func init() {
31
	flag.StringVar(&config.userInfo, "user", "", "The basic auth user information")
32
25 33
	flag.Usage = func() {
26 34
		fmt.Fprintf(os.Stderr, "Usage: %s [flags] <url>\n\n", os.Args[0])
27 35
		fmt.Fprintf(os.Stderr, `Fetches JSON documents from a paginated resource
@ -43,11 +51,36 @@ func main() {
43 51
44 52
	url := flag.Arg(0)
45 53
54
	authorization := ""
55
	if config.userInfo != "" {
56
		if !strings.Contains(config.userInfo, ":") {
57
			fmt.Fprint(os.Stderr, "Type in your password/token: ")
58
			password, err := terminal.ReadPassword(int(os.Stdin.Fd()))
59
			if err != nil {
60
				fmt.Println(err)
61
				os.Exit(1)
62
			}
63
64
			config.userInfo += ":" + string(password)
65
		}
66
67
		authorization = "Basic " + base64.StdEncoding.EncodeToString([]byte(config.userInfo))
68
	}
69
46 70
	os.Stdout.WriteString("[\n")
47 71
48 72
	first := true
49 73
	for url != "" {
50
		res, err := http.Get(url)
74
		req, err := http.NewRequest("GET", url, nil)
75
		if err != nil {
76
			fmt.Println(err)
77
			os.Exit(1)
78
		}
79
		if authorization != "" {
80
			req.Header.Set("Authorization", authorization)
81
		}
82
83
		res, err := http.DefaultClient.Do(req)
51 84
		if err != nil {
52 85
			fmt.Println(err)
53 86
			os.Exit(1)