Merge branch 'master' into issue/763
This commit is contained in:
commit
47bdc6cbef
9 changed files with 77 additions and 22 deletions
|
@ -1,5 +1,5 @@
|
||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 0.19.1
|
current_version = 0.19.2
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)((?P<release>[a-z]+)(?P<candidate>\d+))?
|
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)((?P<release>[a-z]+)(?P<candidate>\d+))?
|
||||||
|
|
20
CHANGELOG.md
20
CHANGELOG.md
|
@ -8,7 +8,7 @@ Web UI version numbers should always match the corresponding version of LBRY App
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
### Added
|
### Added
|
||||||
* Added copy address button to the Wallet Address component on Send / Receive (#875)
|
*
|
||||||
*
|
*
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
@ -27,6 +27,24 @@ Web UI version numbers should always match the corresponding version of LBRY App
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
|
|
||||||
|
## [0.19.2] - 2017-12-22
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* Added copy address button to the Wallet Address component on Send / Receive (#875)
|
||||||
|
* Link to creators’ channels on homepage (#869)
|
||||||
|
* Pause playing video when file is opened (#880)
|
||||||
|
* Add captcha to verification process (#897)
|
||||||
|
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Contributor documentation (#879)
|
||||||
|
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Linux app categorization (#877)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [0.19.1] - 2017-12-13
|
## [0.19.1] - 2017-12-13
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "LBRY",
|
"name": "LBRY",
|
||||||
"version": "0.19.1",
|
"version": "0.19.2",
|
||||||
"description": "A browser for the LBRY network, a digital marketplace controlled by its users.",
|
"description": "A browser for the LBRY network, a digital marketplace controlled by its users.",
|
||||||
"homepage": "https://lbry.io/",
|
"homepage": "https://lbry.io/",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
|
|
|
@ -95,7 +95,6 @@ function openItem(fullPath) {
|
||||||
// Causes child process reference to be garbage collected, allowing main process to exit
|
// Causes child process reference to be garbage collected, allowing main process to exit
|
||||||
child.unref();
|
child.unref();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Quits by first killing the daemon, the calling quitting for real.
|
* Quits by first killing the daemon, the calling quitting for real.
|
||||||
*/
|
*/
|
||||||
|
@ -167,7 +166,7 @@ function createWindow() {
|
||||||
if (openUri) {
|
if (openUri) {
|
||||||
// We stored and received a URI that an external app requested before we had a window object
|
// We stored and received a URI that an external app requested before we had a window object
|
||||||
window.webContents.on('did-finish-load', () => {
|
window.webContents.on('did-finish-load', () => {
|
||||||
window.webContents.send('open-uri-requested', openUri);
|
window.webContents.send('open-uri-requested', openUri, true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { doUserEmailVerify } from 'redux/actions/user';
|
import { doUserEmailVerify, doUserEmailVerifyFailure } from 'redux/actions/user';
|
||||||
import {
|
import {
|
||||||
selectEmailVerifyIsPending,
|
selectEmailVerifyIsPending,
|
||||||
selectEmailToVerify,
|
selectEmailToVerify,
|
||||||
|
@ -20,7 +20,8 @@ const select = state => ({
|
||||||
});
|
});
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
verifyUserEmail: code => dispatch(doUserEmailVerify(code)),
|
verifyUserEmail: (code, recaptcha) => dispatch(doUserEmailVerify(code, recaptcha)),
|
||||||
|
verifyUserEmailFailure: error => dispatch(doUserEmailVerifyFailure(error)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export default connect(select, perform)(UserEmailVerify);
|
export default connect(select, perform)(UserEmailVerify);
|
||||||
|
|
|
@ -20,7 +20,12 @@ class UserEmailVerify extends React.PureComponent {
|
||||||
|
|
||||||
handleSubmit() {
|
handleSubmit() {
|
||||||
const { code } = this.state;
|
const { code } = this.state;
|
||||||
this.props.verifyUserEmail(code);
|
try {
|
||||||
|
const verification = JSON.parse(atob(code));
|
||||||
|
this.props.verifyUserEmail(verification.token, verification.recaptcha);
|
||||||
|
} catch (error) {
|
||||||
|
this.props.verifyUserEmailFailure('Invalid Verification Token');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|
|
@ -6,7 +6,8 @@ import SnackBar from 'component/snackBar';
|
||||||
import { Provider } from 'react-redux';
|
import { Provider } from 'react-redux';
|
||||||
import store from 'store';
|
import store from 'store';
|
||||||
import SplashScreen from 'component/splash';
|
import SplashScreen from 'component/splash';
|
||||||
import { doDaemonReady } from 'redux/actions/app';
|
import { doDaemonReady, doShowSnackBar, doConditionalAuthNavigate } from 'redux/actions/app';
|
||||||
|
import { doUserEmailVerify } from 'redux/actions/user';
|
||||||
import { doNavigate } from 'redux/actions/navigation';
|
import { doNavigate } from 'redux/actions/navigation';
|
||||||
import { doDownloadLanguages } from 'redux/actions/settings';
|
import { doDownloadLanguages } from 'redux/actions/settings';
|
||||||
import * as ACTIONS from 'constants/action_types';
|
import * as ACTIONS from 'constants/action_types';
|
||||||
|
@ -28,9 +29,24 @@ window.addEventListener('contextmenu', event => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcRenderer.on('open-uri-requested', (event, uri) => {
|
ipcRenderer.on('open-uri-requested', (event, uri, newSession) => {
|
||||||
if (uri && uri.startsWith('lbry://')) {
|
if (uri && uri.startsWith('lbry://')) {
|
||||||
app.store.dispatch(doNavigate('/show', { uri }));
|
if (uri.startsWith('lbry://?verify=')) {
|
||||||
|
let verification = {};
|
||||||
|
try {
|
||||||
|
verification = JSON.parse(atob(uri.substring(15)));
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
if (verification.token && verification.recaptcha) {
|
||||||
|
app.store.dispatch(doConditionalAuthNavigate(newSession));
|
||||||
|
app.store.dispatch(doUserEmailVerify(verification.token, verification.recaptcha));
|
||||||
|
} else {
|
||||||
|
app.store.dispatch(doShowSnackBar({ message: 'Invalid Verification URI' }));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
app.store.dispatch(doNavigate('/show', { uri }));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,8 @@ import { doAuthenticate } from 'redux/actions/user';
|
||||||
import { doFetchFileInfosAndPublishedClaims } from 'redux/actions/file_info';
|
import { doFetchFileInfosAndPublishedClaims } from 'redux/actions/file_info';
|
||||||
import * as MODALS from 'constants/modal_types';
|
import * as MODALS from 'constants/modal_types';
|
||||||
import { doFetchRewardedContent } from 'redux/actions/content';
|
import { doFetchRewardedContent } from 'redux/actions/content';
|
||||||
import { ipcRenderer, remote } from 'electron';
|
import { doAuthNavigate } from 'redux/actions/navigation';
|
||||||
|
import { remote, ipcRenderer } from 'electron';
|
||||||
import Path from 'path';
|
import Path from 'path';
|
||||||
|
|
||||||
const { download } = remote.require('electron-dl');
|
const { download } = remote.require('electron-dl');
|
||||||
|
@ -261,3 +262,12 @@ export function doChangeVolume(volume) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function doConditionalAuthNavigate(newSession) {
|
||||||
|
return function(dispatch, getState) {
|
||||||
|
const state = getState();
|
||||||
|
if (newSession || selectCurrentModal(state) !== 'email_collection') {
|
||||||
|
dispatch(doAuthNavigate());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -116,20 +116,31 @@ export function doUserEmailNew(email) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function doUserEmailVerify(verificationToken) {
|
export function doUserEmailVerifyFailure(error) {
|
||||||
|
return {
|
||||||
|
type: ACTIONS.USER_EMAIL_VERIFY_FAILURE,
|
||||||
|
data: { error },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function doUserEmailVerify(verificationToken, recaptcha) {
|
||||||
return function(dispatch, getState) {
|
return function(dispatch, getState) {
|
||||||
const email = selectEmailToVerify(getState());
|
const email = selectEmailToVerify(getState());
|
||||||
const trimmedVerificationToken = verificationToken.toString().trim();
|
|
||||||
|
|
||||||
dispatch({
|
dispatch({
|
||||||
type: ACTIONS.USER_EMAIL_VERIFY_STARTED,
|
type: ACTIONS.USER_EMAIL_VERIFY_STARTED,
|
||||||
code: trimmedVerificationToken,
|
code: verificationToken,
|
||||||
|
recaptcha,
|
||||||
});
|
});
|
||||||
|
|
||||||
Lbryio.call(
|
Lbryio.call(
|
||||||
'user_email',
|
'user_email',
|
||||||
'confirm',
|
'confirm',
|
||||||
{ verification_token: trimmedVerificationToken, email },
|
{
|
||||||
|
verification_token: verificationToken,
|
||||||
|
email,
|
||||||
|
recaptcha,
|
||||||
|
},
|
||||||
'post'
|
'post'
|
||||||
)
|
)
|
||||||
.then(userEmail => {
|
.then(userEmail => {
|
||||||
|
@ -144,12 +155,7 @@ export function doUserEmailVerify(verificationToken) {
|
||||||
throw new Error('Your email is still not verified.'); // shouldn't happen
|
throw new Error('Your email is still not verified.'); // shouldn't happen
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => dispatch(doUserEmailVerifyFailure(error)));
|
||||||
dispatch({
|
|
||||||
type: ACTIONS.USER_EMAIL_VERIFY_FAILURE,
|
|
||||||
data: { error },
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue