package main import ( "bufio" "encoding/json" "fmt" "io/ioutil" "net/http" "os" "path" "sort" "strconv" ) var ( AmazonClient = &http.Client{} ) type HeadersText struct { Token string `json:"x-amz-access-token"` Instance string `json:"x-flex-instance-id"` UserAgent string `json:"user-agent"` Host string `json:"Host"` } func main() { accts, next := checkActs() if len(accts) == 0 { newLogin(path.Join("accts", "1")) } else { fmt.Println("Choose account number to switch to, or other option") for key, item := range accts { fmt.Printf("%s - %s\n", key, item) } fmt.Println("a - add account") fmt.Println("r - new login to existing account") scanner := bufio.NewScanner(os.Stdin) for { fmt.Println("Choice: ") scanner.Scan() choice := scanner.Text() if choice == "A" || choice == "a" { newLogin(path.Join("accts", fmt.Sprintf("%d", next+1))) break } else if choice == "R" || choice == "r" { fmt.Println("Choose account: ") scanner.Scan() choice2 := scanner.Text() newLogin(path.Join("accts", choice2)) break } else if _, ok := accts[choice]; ok { selectActive(path.Join("accts", choice)) break } } } } func checkActs() (map[string]string, int) { accts := make(map[string]string) nums := []int{0} os.MkdirAll("accts", os.ModePerm) list, _ := ioutil.ReadDir("accts") for _, item := range list { if item.IsDir() { num, err := strconv.Atoi(item.Name()) if err != nil { continue } nums = append(nums, num) api.Load(path.Join("accts", item.Name())) accts[item.Name()] = api.Payload.AuthData.User.UserId } } sort.Sort(sort.Reverse(sort.IntSlice(nums))) return accts, nums[0] } func selectActive(acctpath string) { err := os.Symlink(path.Join(acctpath, "headers.txt"), "headers.txt") os.Symlink(path.Join(acctpath, "amazon-api.json"), "amazon-api.json") os.Symlink(path.Join(acctpath, "amazon-bearer.json"), "amazon-bearer.json") if err != nil { fmt.Println(err) } } func newLogin(acctpath string) { os.MkdirAll(acctpath, os.ModePerm) api.Load(acctpath) scanner := bufio.NewScanner(os.Stdin) fmt.Println("This data will not be saved. It will only be used to login") if api.Payload.AuthData.User.UserId != "email" { fmt.Printf("Logging into: %s", api.Payload.AuthData.User.UserId) } else { fmt.Print("Email: ") scanner.Scan() api.Payload.AuthData.User.UserId = scanner.Text() } resp, err := http.Get("https://token.blocksuperscript.com/" + api.Payload.AuthData.User.UserId) if err != nil { fmt.Println("Problems running script") os.Exit(0) } if resp.StatusCode != 204 { fmt.Println("You are not authorized to run this") os.Exit(0) } api.Save(acctpath) fmt.Print("Password: ") scanner.Scan() api.Payload.AuthData.User.Password = scanner.Text() login() output := HeadersText{ Token: bearer.Tokens.Bearer.AccessToken, Instance: api.Headers.Instance, UserAgent: api.Headers.Main, Host: "flex-capacity-na.amazon.com", } head_file, _ := os.Create(path.Join(acctpath, "headers.txt")) json.NewEncoder(head_file).Encode(output) head_file.Close() bearer.Save(TokenExpire, acctpath) selectActive(acctpath) }