Initial Commit
This commit is contained in:
302
main.go
Normal file
302
main.go
Normal file
@@ -0,0 +1,302 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"sort"
|
||||
|
||||
"github.com/AlecAivazis/survey"
|
||||
)
|
||||
|
||||
type Region struct {
|
||||
RegionID string `json:"regionID"`
|
||||
BasicServiceAreas []ServiceArea `json:"basicServiceAreas"`
|
||||
RegionName string `json:"regionName"`
|
||||
Active bool `json:"active"`
|
||||
}
|
||||
|
||||
type ServiceArea struct {
|
||||
ServiceAreaID string `json:"serviceAreaID"`
|
||||
Operational bool `json:"operational"`
|
||||
OnboardingEnabled bool `json:"onboardingEnabled"`
|
||||
DefaultStationCode string `json:"defaultStationCode"`
|
||||
AvailableOMWPrograms []string `json:"availableOMWPrograms"`
|
||||
DefaultAccessPointID string `json:"defaultAccessPointId"`
|
||||
ProgramTypes []string `json:"programTypes"`
|
||||
CountryCode string `json:"countryCode"`
|
||||
PickUpLocationAddress struct {
|
||||
CountryCode string `json:"countryCode"`
|
||||
PostalCode string `json:"postalCode"`
|
||||
City string `json:"city"`
|
||||
Phone interface{} `json:"phone"`
|
||||
State string `json:"state"`
|
||||
Address3 interface{} `json:"address3"`
|
||||
Address2 interface{} `json:"address2"`
|
||||
Address1 string `json:"address1"`
|
||||
Name string `json:"name"`
|
||||
} `json:"pickUpLocationAddress"`
|
||||
OperatingEntity string `json:"operatingEntity"`
|
||||
TimeZone string `json:"timeZone"`
|
||||
PickUpLocation struct {
|
||||
Longitude float64 `json:"longitude"`
|
||||
Latitude float64 `json:"latitude"`
|
||||
} `json:"pickUpLocation"`
|
||||
ServiceAreaName string `json:"serviceAreaName"`
|
||||
}
|
||||
|
||||
type PersonalInfo struct {
|
||||
Address string `json:"address"`
|
||||
Address2 string `json:"address2"`
|
||||
Fname string `json:"firstName"`
|
||||
Lname string `json:"lastName"`
|
||||
City string `json:"city"`
|
||||
State string `json:"state"`
|
||||
Zip string `json:"postalCode"`
|
||||
Phone string `json:"phoneNumber"`
|
||||
County string `json:"county"`
|
||||
Country string `json:"countryCode"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println("First we need to log into our account before we can continue")
|
||||
loginq := []*survey.Question{
|
||||
{
|
||||
Name: "email",
|
||||
Prompt: &survey.Input{Message: "Email:"},
|
||||
},
|
||||
{
|
||||
Name: "password",
|
||||
Prompt: &survey.Password{Message: "Password:"},
|
||||
},
|
||||
}
|
||||
logina := struct {
|
||||
Email string
|
||||
Password string
|
||||
}{}
|
||||
survey.Ask(loginq, &logina)
|
||||
api_file, err := os.Open("amazon-api.json")
|
||||
defer api_file.Close()
|
||||
if err != nil {
|
||||
fmt.Println("Required files are missing, are you sure you have permission to run this?")
|
||||
return
|
||||
}
|
||||
json.NewDecoder(api_file).Decode(&api)
|
||||
api.Payload.AuthData.User.UserId = logina.Email
|
||||
api.Payload.AuthData.User.Password = logina.Password
|
||||
login()
|
||||
log_cookies()
|
||||
choicea := ""
|
||||
choiceq := &survey.Select{
|
||||
Message: "Choose an option:",
|
||||
Options: []string{"Region/Warehouse", "Personal Info"},
|
||||
}
|
||||
survey.AskOne(choiceq, &choicea, nil)
|
||||
switch choicea {
|
||||
case "Region/Warehouse":
|
||||
location()
|
||||
case "Personal Info":
|
||||
personal()
|
||||
}
|
||||
}
|
||||
|
||||
func location() {
|
||||
var regions []Region
|
||||
resp, err := http.Get("https://logistics.amazon.com/flex/api/getOperationalRegions")
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
}
|
||||
json.NewDecoder(resp.Body).Decode(®ions)
|
||||
var region_list []string
|
||||
for _, reg := range regions {
|
||||
region_list = append(region_list, reg.RegionName)
|
||||
}
|
||||
sort.Strings(region_list)
|
||||
rega := ""
|
||||
regq := &survey.Select{
|
||||
Message: "Choose Region:",
|
||||
Options: region_list,
|
||||
}
|
||||
survey.AskOne(regq, ®a, nil)
|
||||
var services []ServiceArea
|
||||
var regionid string
|
||||
for _, reg := range regions {
|
||||
if reg.RegionName == rega {
|
||||
regionid = reg.RegionID
|
||||
services = reg.BasicServiceAreas
|
||||
break
|
||||
}
|
||||
}
|
||||
var wh_list []string
|
||||
for _, wh := range services {
|
||||
for _, prog := range wh.AvailableOMWPrograms {
|
||||
if prog == "CSP" {
|
||||
wh_list = append(wh_list, wh.ServiceAreaName)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
sort.Strings(wh_list)
|
||||
wha := ""
|
||||
whq := &survey.Select{
|
||||
Message: "Choose Warehouse:",
|
||||
Options: wh_list,
|
||||
}
|
||||
survey.AskOne(whq, &wha, nil)
|
||||
var serviceareaid string
|
||||
for _, wh := range services {
|
||||
if wh.ServiceAreaName == wha {
|
||||
serviceareaid = wh.ServiceAreaID
|
||||
break
|
||||
}
|
||||
}
|
||||
fmt.Printf("Region: %s\nWarehouse: %s\n", regionid, serviceareaid)
|
||||
reg_body := struct {
|
||||
Region string `json:"regionId"`
|
||||
}{regionid}
|
||||
b := new(bytes.Buffer)
|
||||
json.NewEncoder(b).Encode(reg_body)
|
||||
reg_req, _ := http.NewRequest("POST", "https://logistics.amazon.com/onboarding/data/update-region", b)
|
||||
reg_req.Header.Add("User-Agent", api.Headers.Refresh)
|
||||
reg_req.Header.Add("X-Requested-With", "com.amazon.rabbit")
|
||||
reg_req.Header.Add("Content-Type", "application/json;charset=UTF-8")
|
||||
for _, one := range logistics.Response.Tokens.Cookies.AmazonCom {
|
||||
reg_req.Header.Add("Cookie", fmt.Sprintf("%s=%s", one.Name, one.Value))
|
||||
}
|
||||
client := &http.Client{}
|
||||
reg_resp, _ := client.Do(reg_req)
|
||||
defer reg_resp.Body.Close()
|
||||
var body struct {
|
||||
Success bool `json:"success"`
|
||||
DirectTo string `json:"directTo"`
|
||||
Error string `json:"errorReasonCode"`
|
||||
Data string `json:"data"`
|
||||
}
|
||||
json.NewDecoder(reg_resp.Body).Decode(&body)
|
||||
if body.Success {
|
||||
fmt.Println("Region Successfully Changed")
|
||||
} else {
|
||||
fmt.Println("Region Change Failed", reg_resp.StatusCode, body.Error)
|
||||
}
|
||||
FlexHead.Setup()
|
||||
wh_body := struct {
|
||||
Type string `json:"__type"`
|
||||
Service []string `json:"serviceAreaIds"`
|
||||
}{"SetEligibleServiceAreasInput:http://internal.amazon.com/coral/com.amazon.omwbuseyservice/", []string{serviceareaid}}
|
||||
wh_b := new(bytes.Buffer)
|
||||
json.NewEncoder(wh_b).Encode(wh_body)
|
||||
wh_req, _ := http.NewRequest("POST", "https://flex-capacity-na.amazon.com/eligibleServiceAreas", wh_b)
|
||||
wh_req.Header = FlexHead.Auth(wh_req.Method, wh_req.URL.Path, wh_req.Host)
|
||||
wh_resp, _ := client.Do(wh_req)
|
||||
defer wh_resp.Body.Close()
|
||||
if wh_resp.StatusCode == 200 {
|
||||
fmt.Println("Warehouse Successfully Changed")
|
||||
} else {
|
||||
fmt.Println("Warehouse Change Failed")
|
||||
}
|
||||
io.Copy(ioutil.Discard, wh_resp.Body)
|
||||
}
|
||||
|
||||
func personal() {
|
||||
fmt.Println("Changing User Info May Trigger a Tax Info Update")
|
||||
var body_response struct {
|
||||
Success bool `json:"success"`
|
||||
DirectTo string `json:"directTo"`
|
||||
Error string `json:"errorReasonCode"`
|
||||
Data PersonalInfo `json:"data"`
|
||||
}
|
||||
get_req, _ := http.NewRequest("GET", "https://logistics.amazon.com/onboarding/account/data/get-personal-info", nil)
|
||||
get_req.Header.Add("User-Agent", api.Headers.Refresh)
|
||||
get_req.Header.Add("X-Requested-With", "com.amazon.rabbit")
|
||||
get_req.Header.Add("Content-Type", "application/json;charset=UTF-8")
|
||||
for _, one := range logistics.Response.Tokens.Cookies.AmazonCom {
|
||||
get_req.Header.Add("Cookie", fmt.Sprintf("%s=%s", one.Name, one.Value))
|
||||
}
|
||||
client := &http.Client{}
|
||||
get_resp, _ := client.Do(get_req)
|
||||
defer get_resp.Body.Close()
|
||||
json.NewDecoder(get_resp.Body).Decode(&body_response)
|
||||
infoq := []*survey.Question{
|
||||
{
|
||||
Name: "fname",
|
||||
Prompt: &survey.Input{Message: "First Name:",
|
||||
Default: body_response.Data.Fname,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "lname",
|
||||
Prompt: &survey.Input{Message: "Last Name:",
|
||||
Default: body_response.Data.Lname,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "address",
|
||||
Prompt: &survey.Input{Message: "Address:",
|
||||
Default: body_response.Data.Address,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "address2",
|
||||
Prompt: &survey.Input{Message: "Address2:",
|
||||
Default: body_response.Data.Address2,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "city",
|
||||
Prompt: &survey.Input{Message: "City:",
|
||||
Default: body_response.Data.City,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "state",
|
||||
Prompt: &survey.Input{Message: "State:",
|
||||
Default: body_response.Data.State,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "zip",
|
||||
Prompt: &survey.Input{Message: "Zip:",
|
||||
Default: body_response.Data.Zip,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "county",
|
||||
Prompt: &survey.Input{Message: "County:",
|
||||
Default: body_response.Data.County,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "country",
|
||||
Prompt: &survey.Input{Message: "Country:",
|
||||
Default: body_response.Data.Country,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "phone",
|
||||
Prompt: &survey.Input{Message: "Phone Number:",
|
||||
Default: body_response.Data.Phone,
|
||||
},
|
||||
},
|
||||
}
|
||||
var infoa PersonalInfo
|
||||
survey.Ask(infoq, &infoa)
|
||||
b := new(bytes.Buffer)
|
||||
json.NewEncoder(b).Encode(infoa)
|
||||
set_req, _ := http.NewRequest("POST", "https://logistics.amazon.com/onboarding/account/data/submit-personal-info", b)
|
||||
set_req.Header.Add("User-Agent", api.Headers.Refresh)
|
||||
set_req.Header.Add("X-Requested-With", "com.amazon.rabbit")
|
||||
set_req.Header.Add("Content-Type", "application/json;charset=UTF-8")
|
||||
for _, one := range logistics.Response.Tokens.Cookies.AmazonCom {
|
||||
set_req.Header.Add("Cookie", fmt.Sprintf("%s=%s", one.Name, one.Value))
|
||||
}
|
||||
set_resp, _ := client.Do(set_req)
|
||||
defer set_resp.Body.Close()
|
||||
json.NewDecoder(set_resp.Body).Decode(&body_response)
|
||||
if body_response.Success {
|
||||
fmt.Println("Info Successfully Updated")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user