diff --git a/.gitignore b/.gitignore index 6ab611b8..0b98534b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ # Compiled Object files, Static and Dynamic libs (Shared Objects) +*~ *.o *.a *.so diff --git a/goinsta.go b/goinsta.go index 1c8b7c61..bcfdbe3f 100644 --- a/goinsta.go +++ b/goinsta.go @@ -3,6 +3,7 @@ package goinsta import ( "crypto/tls" "encoding/json" + "fmt" "io" "io/ioutil" "net/http" @@ -448,9 +449,44 @@ func (inst *Instagram) Login() error { // Logout closes current session func (inst *Instagram) Logout() error { - _, err := inst.sendSimpleRequest(urlLogout) - inst.c.Jar = nil - inst.c = nil + result, err := json.Marshal( + map[string]interface{}{ + "guid": inst.uuid, + "login_attempt_count": 0, + "_csrftoken": inst.token, + "device_id": inst.dID, + "adid": inst.adid, + "phone_id": inst.pid, + "username": inst.user, + "password": inst.pass, + "google_tokens": "[]", + }, + ) + if err != nil { + return err + } + body, err := inst.sendRequest( + &reqOptions{ + Endpoint: urlLogout, + Query: generateSignature(b2s(result)), + IsPost: true, + Login: true, + }, + ) + if err != nil { + return err + } + + // getting logout status + res := accountResp{} + err = json.Unmarshal(body, &res) + if err != nil { + return err + } + if res.Status != "ok" { + return fmt.Errorf("Logout failed, try later!") + } + inst = nil return err } @@ -484,7 +520,7 @@ func (inst *Instagram) megaphoneLog() error { "action": "seen", "reason": "", "device_id": inst.dID, - "uuid": generateMD5Hash(string(time.Now().Unix())), + "uuid": generateMD5Hash(fmt.Sprint(time.Now().Unix())), }, ) if err != nil { diff --git a/shortid.go b/shortid.go index 00a1f924..9325fc4e 100644 --- a/shortid.go +++ b/shortid.go @@ -1,31 +1,17 @@ package goinsta import ( - "fmt" "strconv" "strings" ) -func leftPad2Len(s string, padStr string, overallLen int) string { - var padCountInt int - padCountInt = 1 + ((overallLen - len(padStr)) / len(padStr)) - var retStr = strings.Repeat(padStr, padCountInt) + s - return retStr[(len(retStr) - overallLen):] -} - -const base64UrlCharmap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" - -func MediaIDFromShortID(code string) (string, error) { - strID := "" - for i := 0; i < len(code); i++ { - base64 := strings.Index(base64UrlCharmap, string(code[i])) - str2bin := strconv.FormatInt(int64(base64), 2) - sixbits := leftPad2Len(str2bin, "0", 6) - strID = strID + sixbits +func MediaIDFromShortID(code string) string { + alphabet := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" + media_id := 0 + for _, letter := range code { + media_id = (media_id * 64) + strings.Index(alphabet, string(letter)) } - result, err := strconv.ParseInt(strID, 2, 64) - if err != nil { - return "", err - } - return fmt.Sprintf("%d", result), nil + result := strconv.Itoa(media_id) + + return result } diff --git a/shortid_test.go b/shortid_test.go index cc3a97ea..4e7de163 100644 --- a/shortid_test.go +++ b/shortid_test.go @@ -5,11 +5,7 @@ import ( ) func TestMediaIDFromShortID(t *testing.T) { - mediaID, err := MediaIDFromShortID("BR_repxhx4O") - if err != nil { - t.Fatal(err) - return - } + mediaID := MediaIDFromShortID("BR_repxhx4O") if mediaID != "1477090425239445006" { t.Fatal("Invalid mediaID") }