...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package main
16
17 import (
18 "bufio"
19 "context"
20 "fmt"
21 "os"
22 "strings"
23 "syscall"
24
25 "github.com/google/go-github/v33/github"
26 "golang.org/x/crypto/ssh/terminal"
27 )
28
29 func main() {
30 r := bufio.NewReader(os.Stdin)
31 fmt.Print("GitHub Username: ")
32 username, _ := r.ReadString('\n')
33
34 fmt.Print("GitHub Password: ")
35 bytePassword, _ := terminal.ReadPassword(int(syscall.Stdin))
36 password := string(bytePassword)
37
38 tp := github.BasicAuthTransport{
39 Username: strings.TrimSpace(username),
40 Password: strings.TrimSpace(password),
41 }
42
43 client := github.NewClient(tp.Client())
44 ctx := context.Background()
45 user, _, err := client.Users.Get(ctx, "")
46
47
48 if _, ok := err.(*github.TwoFactorAuthError); ok {
49 fmt.Print("\nGitHub OTP: ")
50 otp, _ := r.ReadString('\n')
51 tp.OTP = strings.TrimSpace(otp)
52 user, _, err = client.Users.Get(ctx, "")
53 }
54
55 if err != nil {
56 fmt.Printf("\nerror: %v\n", err)
57 return
58 }
59
60 fmt.Printf("\n%v\n", github.Stringify(user))
61 }
62
View as plain text