Przeglądaj źródła

Support for basic auth with token or password

Lucas Stadler 10 lat temu
rodzic
commit
969309f365
1 zmienionych plików z 34 dodań i 1 usunięć
  1. 34 1
      go/unpaginate/unpaginate.go

+ 34 - 1
go/unpaginate/unpaginate.go

13
package main
13
package main
14
14
15
import (
15
import (
16
	"encoding/base64"
16
	"encoding/json"
17
	"encoding/json"
17
	"flag"
18
	"flag"
18
	"fmt"
19
	"fmt"
20
	"golang.org/x/crypto/ssh/terminal"
19
	"net/http"
21
	"net/http"
20
	"os"
22
	"os"
21
	"strings"
23
	"strings"
22
)
24
)
23
25
26
var config struct {
27
	userInfo string
28
}
29
24
func init() {
30
func init() {
31
	flag.StringVar(&config.userInfo, "user", "", "The basic auth user information")
32
25
	flag.Usage = func() {
33
	flag.Usage = func() {
26
		fmt.Fprintf(os.Stderr, "Usage: %s [flags] <url>\n\n", os.Args[0])
34
		fmt.Fprintf(os.Stderr, "Usage: %s [flags] <url>\n\n", os.Args[0])
27
		fmt.Fprintf(os.Stderr, `Fetches JSON documents from a paginated resource
35
		fmt.Fprintf(os.Stderr, `Fetches JSON documents from a paginated resource
43
51
44
	url := flag.Arg(0)
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
	os.Stdout.WriteString("[\n")
70
	os.Stdout.WriteString("[\n")
47
71
48
	first := true
72
	first := true
49
	for url != "" {
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
		if err != nil {
84
		if err != nil {
52
			fmt.Println(err)
85
			fmt.Println(err)
53
			os.Exit(1)
86
			os.Exit(1)