Working on sc refresh token

This commit is contained in:
Mustafa Buyukcelebi 2019-01-02 17:36:30 +03:00
parent f0b5550308
commit be4221a145
6 changed files with 68 additions and 20 deletions

View File

@ -196,8 +196,10 @@ export const uploadImage = (file) => {
export const getNodes = () => serverList.get().then(resp => resp.data.nodes); export const getNodes = () => serverList.get().then(resp => resp.data.nodes);
export const getSCAccessToken = code => api export const getSCAccessToken = code => new Promise((resolve, reject) => {
.post('/api/sc-token-refresh', { console.log('code :', code);
code, api
}) .post('/sc-token-refresh', { code })
.then(resp => resp.data); .then(resp => resolve(resp.data))
.catch(err => console.log('err :', err, err.response, err.request));
});

View File

@ -85,6 +85,7 @@ export const login = async (username, password) => {
export const loginWithSC2 = async (code) => { export const loginWithSC2 = async (code) => {
const scTokens = await getSCAccessToken(code); const scTokens = await getSCAccessToken(code);
console.log('scTokens :', scTokens);
await setSCAccount(scTokens); await setSCAccount(scTokens);
await steemConnect.setAccessToken(scTokens.access_token); await steemConnect.setAccessToken(scTokens.access_token);
const account = await steemConnect.me(); const account = await steemConnect.me();
@ -118,7 +119,7 @@ export const loginWithSC2 = async (code) => {
.then(() => { .then(() => {
account.account.username = account.account.name; account.account.username = account.account.name;
updateCurrentUsername(account.account.name); updateCurrentUsername(account.account.name);
resolve({ ...account.account, accessToken }); resolve({ ...account.account, accessToken: scTokens.access_token });
}) })
.catch((error) => { .catch((error) => {
reject(error); reject(error);

View File

@ -504,29 +504,49 @@ export const setExistUser = existUser => new Promise((resolve, reject) => {
export const setSCAccount = data => new Promise((resolve, reject) => { export const setSCAccount = data => new Promise((resolve, reject) => {
try { try {
console.log('data :', data);
const scAccount = realm.objects(SC_ACCOUNTS).filtered('username = $0', data.username); const scAccount = realm.objects(SC_ACCOUNTS).filtered('username = $0', data.username);
const date = new Date(); const date = new Date();
const test = new Date(data.expires_in);
console.log('date :', date); console.log('date :', date);
console.log('test :', test); date.setSeconds(date.getSeconds() + data.expires_in);
// TODO: expire date colculate console.log('date :', date);
realm.write(() => { realm.write(() => {
if (Array.from(scAccount).length > 0) { if (Array.from(scAccount).length > 0) {
console.log('scAccount :', scAccount[0]);
scAccount[0].accessToken = data.accessToken; scAccount[0].accessToken = data.accessToken;
console.log('1');
scAccount[0].refreshToken = data.refreshToken; scAccount[0].refreshToken = data.refreshToken;
scAccount[0].expireDate = data.expireDate; console.log('2');
scAccount[0].expireDate = date;
console.log('scAccount :', scAccount);
resolve(); resolve();
} else { } else {
const account = { const account = {
username: data.username, username: data.username,
accessToken: data.access_token, accessToken: data.access_token,
refreshToken: data.refresh_token, refreshToken: data.refresh_token,
expireDate: data.expires_in, expireDate: date.toString(),
}; };
realm.create(APPLICATION_SCHEMA, { ...account }); console.log('account :', account);
realm.create(SC_ACCOUNTS, { ...account });
resolve(); resolve();
} }
}); });
} catch (error) {
console.log('error :', error);
reject(error);
}
});
export const getSCAccount = username => new Promise((resolve, reject) => {
try {
const scAccount = realm.objects(SC_ACCOUNTS);
console.log('scAccount :', Array.from(scAccount));
if (Array.from(scAccount).length > 0) {
resolve(scAccount[0]);
} else {
resolve(false);
}
} catch (error) { } catch (error) {
reject(error); reject(error);
} }

View File

@ -20,9 +20,12 @@ import {
removeUserData, removeUserData,
setPushTokenSaved, setPushTokenSaved,
getUserDataWithUsername, getUserDataWithUsername,
getSCAccount,
setSCAccount,
updateUserData,
} from '../../../realm/realm'; } from '../../../realm/realm';
import { getUser } from '../../../providers/steem/dsteem'; import { getUser } from '../../../providers/steem/dsteem';
import { setPushToken } from '../../../providers/esteem/esteem'; import { setPushToken, getSCAccessToken } from '../../../providers/esteem/esteem';
import { switchAccount } from '../../../providers/steem/auth'; import { switchAccount } from '../../../providers/steem/auth';
// Actions // Actions
@ -98,13 +101,32 @@ class ApplicationContainer extends Component {
await getAuthStatus().then((res) => { await getAuthStatus().then((res) => {
({ currentUsername } = res); ({ currentUsername } = res);
if (res) { if (res) {
getUserData().then((userData) => { console.log('res :', res);
getUserData().then(async (userData) => {
if (userData.length > 0) { if (userData.length > 0) {
realmData = userData; realmData = userData;
userData.forEach((accountData) => { userData.forEach((accountData) => {
dispatch(addOtherAccount({ username: accountData.username })); dispatch(addOtherAccount({ username: accountData.username }));
}); });
console.log('userData :', userData[0]);
if (userData[0].authType === 'steemConnect') {
const scAccount = await getSCAccount(userData[0].username);
console.log('scAccount :', scAccount);
const now = new Date();
const expireDate = new Date(scAccount.expireDate);
console.log('now :', now);
console.log('expireDate :', expireDate);
console.log('now >= expireDate :', now <= expireDate);
if (now >= expireDate) {
const newSCAccountData = await getSCAccessToken(scAccount.refreshToken);
console.log('newSCAccountData :', newSCAccountData);
await setSCAccount(newSCAccountData);
realmData = { ...userData[0], accessToken: scAccount.accessToken };
console.log('realmData :', realmData);
await updateUserData(realmData);
}
}
} }
}); });
} }
@ -209,8 +231,7 @@ class ApplicationContainer extends Component {
dispatch(removeOtherAccount(currentAccountUsername)); dispatch(removeOtherAccount(currentAccountUsername));
dispatch(logoutDone()); dispatch(logoutDone());
}) })
.catch(() => { .catch(() => {});
});
}; };
_switchAccount = (targetAccountUsername) => { _switchAccount = (targetAccountUsername) => {

View File

@ -2,5 +2,5 @@ export const steemConnectOptions = {
base_url: 'https://steemconnect.com/oauth2/authorize', base_url: 'https://steemconnect.com/oauth2/authorize',
client_id: 'esteem-app', client_id: 'esteem-app',
redirect_uri: 'http://127.0.0.1:3415/', // http://127.0.0.1:3415 redirect_uri: 'http://127.0.0.1:3415/', // http://127.0.0.1:3415
scope: 'vote,comment,delete_comment,comment_options,custom_json,claim_reward_balance', scope: 'vote,comment,delete_comment,comment_options,custom_json,claim_reward_balance,offline',
}; };

View File

@ -24,17 +24,21 @@ class SteemConnect extends PureComponent {
let code; let code;
const { dispatch, setPinCodeState, handleOnModalClose } = this.props; const { dispatch, setPinCodeState, handleOnModalClose } = this.props;
const { isLoading } = this.state; const { isLoading } = this.state;
console.log('event :', event);
if (event.url.indexOf('?code=') > -1) { if (event.url.indexOf('?code=') > -1) {
this.webview.stopLoading(); this.webview.stopLoading();
try { try {
code = event.url.match(/\?(?:code)\=([\S\s]*?)\&/)[1]; code = event.url.match(/code=([^&]*)/);
} catch (error) { } catch (error) {
// TODO: return // TODO: return
} }
console.log('code :', code[1]);
console.log('event.url :', event.url);
if (!isLoading) { if (!isLoading) {
this.setState({ isLoading: true }); this.setState({ isLoading: true });
handleOnModalClose(); handleOnModalClose();
loginWithSC2(code, 'pinCode') loginWithSC2(code[1])
.then((result) => { .then((result) => {
if (result) { if (result) {
dispatch(updateCurrentAccount({ ...result })); dispatch(updateCurrentAccount({ ...result }));
@ -64,7 +68,7 @@ class SteemConnect extends PureComponent {
steemConnectOptions.client_id steemConnectOptions.client_id
}&redirect_uri=${encodeURIComponent( }&redirect_uri=${encodeURIComponent(
steemConnectOptions.redirect_uri, steemConnectOptions.redirect_uri,
)}&scope=${encodeURIComponent(steemConnectOptions.scope)}`, )}&response_type=code&scope=${encodeURIComponent(steemConnectOptions.scope)}`,
}} }}
onNavigationStateChange={this._onNavigationStateChange} onNavigationStateChange={this._onNavigationStateChange}
ref={(ref) => { ref={(ref) => {