/
login.go
64 lines (59 loc) · 1.49 KB
/
login.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package main
import (
"context"
"errors"
"flag"
"fmt"
"github.com/peterbourgon/ff/v3/ffcli"
"golang.org/x/crypto/ssh/terminal"
"log"
"os"
)
// loginCommand creates the "login" subcommand
func loginCommand() *ffcli.Command {
c, err := getConfig()
if err != nil {
log.Fatal(err)
}
fs := flag.NewFlagSet("testmyapp login", flag.ExitOnError)
var (
loginFlags struct {
// Add flags specific to the "login" subcommand
username string
}
)
fs.StringVar(&loginFlags.username, "u", "", "u option for login command")
return &ffcli.Command{
Name: "login",
ShortUsage: "login [flags]",
FlagSet: fs,
Exec: func(_ context.Context, args []string) error {
if loginFlags.username == "" {
return errors.New("username is required")
}
fmt.Print("Enter Password: ")
bytePassword, err := terminal.ReadPassword(int(os.Stdin.Fd()))
if err != nil {
return err
}
password := string(bytePassword)
fmt.Println() // Print a newline after the user presses enter
return login(loginFlags.username, password, &c)
},
}
}
func login(username, password string, cfg *Config) error {
c := NewCustomHTTPClient(apiHost, "", "")
t, r, userID, err := c.Login(username, password)
if err != nil {
return err
}
err = cfg.UpdateTokens(username, t, r, userID)
if err != nil {
return err
}
fmt.Println("Login successful")
fmt.Println()
fmt.Println("Now go to a directory with your static site in it and run 'testmyapp upload' to get a URL to view your site.")
return nil
}