This repository has been archived by the owner on Nov 3, 2019. It is now read-only.
/
user.js
180 lines (161 loc) · 3.95 KB
/
user.js
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
import { V1 as api } from 'instagram-private-api'
import settings from 'electron-settings'
import hasha from 'hasha'
import { inspect } from 'util'
import utils from '../utils'
let user = settings.get('currentUser')
// Set session from cookie file
const loadSession = async user => {
let path = utils.buildPath(user.hash)
let device = new api.Device(user.username)
let storage = new api.CookieFileStorage(path)
if (storage) {
return new api.Session(device, storage)
} else {
let file = await createSessionFile(user)
if (file) console.log('Session File Created')
return false
}
}
const createSession = async (user, password) => {
let path = utils.buildPath(user.hash)
let device = new api.Device(user.username)
let storage = new api.CookieFileStorage(path)
if (storage) {
try {
let conn = await api.Session.create(device, storage, user.username, password)
return conn
} catch (e) {
return e
}
} else {
try {
let file = await createSessionFile(user)
if (!file) {
console.log('error')
}
return false
} catch (e) {
console.log('here', e)
}
}
}
const createSessionFile = async user => {
user.hash = hasha(user)
let path = await utils.createFile(utils.buildPath(user.hash))
return path
}
// Check if user logged in
const isLoggedIn = async () => {
if (user) {
try {
let session = await loadSession(user)
let account = await session.getAccount()
return account.hasOwnProperty('_params')
} catch (e) {
return false
}
}
}
// Perform login
const doLogin = async (username, password) => {
if (typeof user === 'undefined' || !user.hasOwnProperty('hash')) {
let userData = {
username: username,
hash: hasha(username, {
algorithm: 'md5'
})
}
settings.set('currentUser', userData)
user = settings.get('currentUser')
}
let session = await createSession(user, password)
return session
}
// Do 2FA login
const do2FALogin = async (session, code) => {
return api.Web.Challenge.code(code)
}
// Get user data
const get = async () => {
if (user) {
try {
let session = await loadSession(user)
let account = await session.getAccount()
let profile = await api.Account.showProfile(session)
return Object.assign({}, account._params, profile)
} catch (e) {
return false
}
}
}
// Get user data
const getMedia = async (cursor = null) => {
if (user) {
try {
let session = await loadSession(user)
let account = await session.getAccount()
let feed = new api.Feed.UserMedia(session, account._params.id)
if (cursor) feed.setCursor(cursor)
let q = await feed.get()
return q.map(el => {
return {
images: el._params.images,
id: el.id,
url: el._params.webLink
}
})
} catch (e) {
return false
}
}
}
// Get activity
const getFollowers = async (cursor = null) => {
if (user) {
try {
let session = await loadSession(user)
let account = await session.getAccount()
let feed = new api.Feed.AccountFollowers(session, account._params.id)
if (cursor) feed.setCursor(cursor)
let q = await feed.get()
return q.map(el => {
return {
events: el._events,
eventsCount: el._eventsCount,
params: el._params
}
})
} catch (e) {
return false
}
}
}
// Get activity
const getActivity = async (cursor = null) => {
if (user) {
try {
let session = await loadSession(user)
// let account = await session.getAccount()
return new api.Request(session)
.setMethod('GET')
.setResource('news')
.send()
.then(function (json) {
console.log(inspect(json))
return inspect(json)
})
} catch (e) {
return false
}
}
}
export default {
isLoggedIn,
doLogin,
do2FALogin,
get,
getMedia,
getFollowers,
getActivity
}