From ae946a739754446c5bba928470081cb8c23fd83c Mon Sep 17 00:00:00 2001 From: Ivan Diaz Date: Tue, 10 Jan 2017 13:14:35 -0300 Subject: [PATCH 1/5] Ivan - Add verification token for frontend user view [skip ci] --- client/src/actions/session-actions.js | 7 ++++ client/src/app/Routes.js | 2 + .../main-home/main-home-page-login-widget.js | 26 ++++++------- .../src/app/main/main-home/main-home-page.js | 38 ++++++++++++++++++- .../app/main/main-home/main-home-page.scss | 5 +++ client/src/app/main/main-verify-token-page.js | 38 +++++++++++++++++++ client/src/data/fixtures/user-fixtures.js | 12 +++++- client/src/data/languages/en.js | 5 +++ client/src/reducers/session-reducer.js | 13 ++++++- 9 files changed, 129 insertions(+), 17 deletions(-) create mode 100644 client/src/app/main/main-verify-token-page.js diff --git a/client/src/actions/session-actions.js b/client/src/actions/session-actions.js index 2d1b7995..4a329e90 100644 --- a/client/src/actions/session-actions.js +++ b/client/src/actions/session-actions.js @@ -71,6 +71,13 @@ export default { } }, + verify(value) { + return { + type: 'VERIFY', + payload: value + }; + }, + initSession() { return { type: 'CHECK_SESSION', diff --git a/client/src/app/Routes.js b/client/src/app/Routes.js index bd97b39b..2a137332 100644 --- a/client/src/app/Routes.js +++ b/client/src/app/Routes.js @@ -10,6 +10,7 @@ import DemoPage from 'app/demo/components-demo-page'; import MainLayout from 'app/main/main-layout'; import MainHomePage from 'app/main/main-home/main-home-page'; import MainSignUpPage from 'app/main/main-signup/main-signup-page'; +import MainVerifyTokenPage from 'app/main/main-verify-token-page'; import MainRecoverPasswordPage from 'app/main/main-recover-password/main-recover-password-page'; import MainMaintenancePage from 'app/main/main-maintenance-page'; @@ -59,6 +60,7 @@ export default ( + diff --git a/client/src/app/main/main-home/main-home-page-login-widget.js b/client/src/app/main/main-home/main-home-page-login-widget.js index 0e99b8b9..c4da1867 100644 --- a/client/src/app/main/main-home/main-home-page-login-widget.js +++ b/client/src/app/main/main-home/main-home-page-login-widget.js @@ -19,18 +19,14 @@ import Message from 'core-components/message'; class MainHomePageLoginWidget extends React.Component { - constructor(props) { - super(props); - - this.state = { - sideToShow: 'front', - loginFormErrors: {}, - recoverFormErrors: {}, - recoverSent: false, - loadingLogin: false, - loadingRecover: false - }; - } + state = { + sideToShow: 'front', + loginFormErrors: {}, + recoverFormErrors: {}, + recoverSent: false, + loadingLogin: false, + loadingRecover: false + }; componentDidUpdate(prevProps) { if (!prevProps.session.failed && this.props.session.failed) { @@ -126,7 +122,11 @@ class MainHomePageLoginWidget extends React.Component { let errors = _.extend({}, this.state.loginFormErrors); if (this.props.session.failed) { - errors.password = i18n('ERROR_PASSWORD'); + if (this.props.session.failMessage === 'INVALID_CREDENTIALS') { + errors.password = i18n('ERROR_PASSWORD'); + } else if (this.props.session.failMessage === 'UNVERIFIED_USER') { + errors.email = i18n('UNVERIFIED_EMAIL'); + } } return errors; diff --git a/client/src/app/main/main-home/main-home-page.js b/client/src/app/main/main-home/main-home-page.js index c691a717..5b258354 100644 --- a/client/src/app/main/main-home/main-home-page.js +++ b/client/src/app/main/main-home/main-home-page.js @@ -1,13 +1,18 @@ import React from 'react'; +import {connect} from 'react-redux' +import i18n from 'lib-app/i18n'; + import MainHomePageLoginWidget from 'app/main/main-home/main-home-page-login-widget'; import MainHomePagePortal from 'app/main/main-home/main-home-page-portal'; +import Message from 'core-components/message'; class MainHomePage extends React.Component { render() { return (
+ {this.renderMessage()}
@@ -17,6 +22,37 @@ class MainHomePage extends React.Component {
); } + + renderMessage() { + switch (this.props.session.verify) { + case 'success': + return this.renderSuccess(); + case 'failed': + return this.renderFailed(); + default: + return null; + } + } + + renderSuccess() { + return ( + + {i18n('VERIFY_SUCCESS_DESCRIPTION')} + + ); + } + + renderFailed() { + return ( + + {i18n('VERIFY_FAILED_DESCRIPTION')} + + ); + } } -export default MainHomePage; \ No newline at end of file +export default connect((store) => { + return { + session: store.session + }; +})(MainHomePage); \ No newline at end of file diff --git a/client/src/app/main/main-home/main-home-page.scss b/client/src/app/main/main-home/main-home-page.scss index 2e494f51..b21ec3d0 100644 --- a/client/src/app/main/main-home/main-home-page.scss +++ b/client/src/app/main/main-home/main-home-page.scss @@ -1,3 +1,8 @@ .main-home-page { + &__message { + margin-bottom: 20px; + margin-left: 20px; + margin-right: 20px; + } } \ No newline at end of file diff --git a/client/src/app/main/main-verify-token-page.js b/client/src/app/main/main-verify-token-page.js new file mode 100644 index 00000000..59488b64 --- /dev/null +++ b/client/src/app/main/main-verify-token-page.js @@ -0,0 +1,38 @@ +import React from 'react'; +import {connect} from 'react-redux' +import {browserHistory} from 'react-router'; + +import SessionActions from 'actions/session-actions' +import API from 'lib-app/api-call'; + +import Message from 'core-components/message'; + +class MainVerifyTokenPage extends React.Component { + + componentDidMount() { + API.call({ + path: '/user/verify-token', + data: { + token: this.props.params.token, + email: this.props.params.email + } + }).then(() => { + this.props.dispatch(SessionActions.verify(true)); + browserHistory.push('/'); + }).catch(() => { + this.props.dispatch(SessionActions.verify(false)); + browserHistory.push('/'); + }); + } + + render() { + return null; + } +} + + +export default connect((store) => { + return { + session: store.session + }; +})(MainVerifyTokenPage); \ No newline at end of file diff --git a/client/src/data/fixtures/user-fixtures.js b/client/src/data/fixtures/user-fixtures.js index bf795b56..1fb85387 100644 --- a/client/src/data/fixtures/user-fixtures.js +++ b/client/src/data/fixtures/user-fixtures.js @@ -21,7 +21,7 @@ module.exports = [ } else { response = { status: 'fail', - message: 'Invalid Credientals' + message: 'INVALID_CREDENTIALS' }; } @@ -88,6 +88,16 @@ module.exports = [ } } }, + { + path: '/user/verify-token', + time: 200, + response: function () { + return { + status: 'success', + data: {} + }; + } + }, { path: '/user/signup', time: 1000, diff --git a/client/src/data/languages/en.js b/client/src/data/languages/en.js index 67a36e64..b70a916d 100644 --- a/client/src/data/languages/en.js +++ b/client/src/data/languages/en.js @@ -150,6 +150,8 @@ export default { 'LOAD_MORE': 'Load More', 'MY_NOTIFICATIONS': 'My notifications', 'ALL_NOTIFICATIONS': 'All notifications', + 'VERIFY_SUCCESS': 'User verified', + 'VERIFY_FAILED': 'Could not verify', //ACTIVITIES 'ACTIVITY_COMMENT': 'commented ticket', @@ -209,6 +211,8 @@ export default { 'MAINTENANCE_MODE_DESCRIPTION': 'The support system is in maintenance mode, thus unavailable at the moment. We will come back as soon as possible.', 'EMAIL_TEMPLATES_DESCRIPTION': 'Here you can edit the templates of the emails that will be sent to users. Remember that the double brackets curly braces indicate a variable value. For example, \'name\' represents the user\'s name.', 'SYSTEM_PREFERENCES_DESCRIPTION': 'Here you can edit the preferences of the system.', + 'VERIFY_SUCCESS_DESCRIPTION': 'You user has been verified correctly. You can log in now.', + 'VERIFY_FAILED_DESCRIPTION': 'The verification could not be done.', //ERRORS 'EMAIL_OR_PASSWORD': 'Email or password invalid', @@ -232,6 +236,7 @@ export default { 'ERROR_RETRIEVING_ARTICLES': 'An error occurred while trying to retrieve articles.', 'ERROR_LIST': 'Select at least one', 'ERROR_URL': 'Invalid URL', + 'UNVERIFIED_EMAIL': 'Email is not verified yet', //MESSAGES 'SIGNUP_SUCCESS': 'You have registered successfully in our support system.', diff --git a/client/src/reducers/session-reducer.js b/client/src/reducers/session-reducer.js index 92251dce..be4323cc 100644 --- a/client/src/reducers/session-reducer.js +++ b/client/src/reducers/session-reducer.js @@ -9,7 +9,8 @@ class SessionReducer extends Reducer { initDone: false, logged: false, pending: false, - failed: false + failed: false, + verify: null }; } @@ -19,6 +20,7 @@ class SessionReducer extends Reducer { 'LOGIN_FULFILLED': this.onLoginCompleted.bind(this), 'LOGIN_REJECTED': this.onLoginFailed, 'LOGOUT_FULFILLED': this.onLogout, + 'VERIFY': this.onVerify, 'USER_DATA_FULFILLED': this.onUserDataRetrieved, 'CHECK_SESSION_REJECTED': (state) => { return _.extend({}, state, {initDone: true})}, 'SESSION_CHECKED': this.onSessionChecked, @@ -46,8 +48,9 @@ class SessionReducer extends Reducer { }); } - onLoginFailed(state) { + onLoginFailed(state, payload) { return _.extend({}, state, { + failMessage: payload.message, logged: false, pending: false, failed: true @@ -127,6 +130,12 @@ class SessionReducer extends Reducer { userTickets: userData.tickets }); } + + onVerify(state, payload) { + return _.extend({}, state, { + verify: (payload) ? 'success' : 'failed' + }); + } } export default SessionReducer.getInstance(); \ No newline at end of file From a113d547d2bdff22df75339c52a248841fc2533d Mon Sep 17 00:00:00 2001 From: Ivan Diaz Date: Tue, 10 Jan 2017 13:19:36 -0300 Subject: [PATCH 2/5] Ivan - Add verification token return data for backend [skip ci] --- server/controllers/user/get-users.php | 1 + server/controllers/user/get.php | 1 + server/models/User.php | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/server/controllers/user/get-users.php b/server/controllers/user/get-users.php index 2743cdde..eadd6922 100644 --- a/server/controllers/user/get-users.php +++ b/server/controllers/user/get-users.php @@ -28,6 +28,7 @@ class GetUsersController extends Controller { $userListArray[] = [ 'id' => $user->id, 'name' => $user->name, + 'verified' => !$user->verificationToken, 'tickets' => $user->tickets, 'email' => $user->email, 'signupDate' => $user->signupDate diff --git a/server/controllers/user/get.php b/server/controllers/user/get.php index 23aa331e..43f189dd 100644 --- a/server/controllers/user/get.php +++ b/server/controllers/user/get.php @@ -29,6 +29,7 @@ class GetUserController extends Controller { Response::respondSuccess([ 'name' => $user->name, 'email' => $user->email, + 'verified' => !$user->verificationToken, 'tickets' => $parsedTicketList ]); } diff --git a/server/models/User.php b/server/models/User.php index 16ceb81a..3207356e 100644 --- a/server/models/User.php +++ b/server/models/User.php @@ -34,7 +34,8 @@ class User extends DataStore { return [ 'email' => $this->email, 'id' => $this->id, - 'name' => $this->name + 'name' => $this->name, + 'verified' => !$this->verificationToken ]; } } From c248c8d486e5d64619407554658311cf109ec7a0 Mon Sep 17 00:00:00 2001 From: Ivan Diaz Date: Tue, 10 Jan 2017 13:34:16 -0300 Subject: [PATCH 3/5] Ivan - Add verification for admin view [skip ci] --- .../src/app/admin/panel/users/admin-panel-view-user.js | 10 ++++++++++ .../app/admin/panel/users/admin-panel-view-user.scss | 4 ++++ client/src/data/fixtures/user-fixtures.js | 1 + 3 files changed, 15 insertions(+) diff --git a/client/src/app/admin/panel/users/admin-panel-view-user.js b/client/src/app/admin/panel/users/admin-panel-view-user.js index b18060a2..f0be1ac4 100644 --- a/client/src/app/admin/panel/users/admin-panel-view-user.js +++ b/client/src/app/admin/panel/users/admin-panel-view-user.js @@ -11,12 +11,14 @@ import AreYouSure from 'app-components/are-you-sure'; import Header from 'core-components/header'; import Button from 'core-components/button'; import Message from 'core-components/message'; +import InfoTooltip from 'core-components/info-tooltip'; class AdminPanelViewUser extends React.Component { state = { name: '', email: '', + verified: true, tickets: [], invalid: false, loading: true @@ -64,6 +66,7 @@ class AdminPanelViewUser extends React.Component { {i18n('EMAIL')}
{this.state.email} + {(!this.state.verified) ? this.renderNotVerified() : null}
@@ -79,6 +82,12 @@ class AdminPanelViewUser extends React.Component { ); } + renderNotVerified() { + return ( + + ); + } + getTicketListProps() { return { type: 'secondary', @@ -93,6 +102,7 @@ class AdminPanelViewUser extends React.Component { this.setState({ name: result.data.name, email: result.data.email, + verified: result.data.verified, tickets: result.data.tickets, loading: false }); diff --git a/client/src/app/admin/panel/users/admin-panel-view-user.scss b/client/src/app/admin/panel/users/admin-panel-view-user.scss index 98b3f25a..8d289ba2 100644 --- a/client/src/app/admin/panel/users/admin-panel-view-user.scss +++ b/client/src/app/admin/panel/users/admin-panel-view-user.scss @@ -29,4 +29,8 @@ margin-bottom: 20px; text-align: left; } + + &__unverified { + margin-left: 15px; + } } \ No newline at end of file diff --git a/client/src/data/fixtures/user-fixtures.js b/client/src/data/fixtures/user-fixtures.js index 1fb85387..484d7c95 100644 --- a/client/src/data/fixtures/user-fixtures.js +++ b/client/src/data/fixtures/user-fixtures.js @@ -155,6 +155,7 @@ module.exports = [ data: { name: 'Kurt Gödel', email: 'kurt@currycurrylady.hs', + verified: false, tickets: _.times(13).map(() => { return { ticketNumber: '118551', From 1ca57e1b769fe3e8dc341102a1ad9780bc1922ad Mon Sep 17 00:00:00 2001 From: Ivan Diaz Date: Tue, 10 Jan 2017 17:07:49 -0300 Subject: [PATCH 4/5] Ivan - Add deploy on dev 3 changes and fixes [skip ci] --- .../src/app-components/language-selector.js | 2 +- client/src/app/App.js | 4 +- .../admin/panel/dashboard/activity-list.js | 90 ------------------- .../admin/panel/dashboard/activity-list.scss | 0 .../panel/dashboard/admin-panel-activity.js | 2 +- .../admin-panel-system-preferences.js | 4 + client/src/app/main/main-layout-header.js | 1 + client/src/app/main/main-verify-token-page.js | 2 +- client/src/core-components/form-field.js | 4 +- client/src/data/languages/en.js | 1 + server/controllers/system/get-logs.php | 2 +- .../data/mail-templates/user-signup-en.html | 3 +- .../data/mail-templates/user-signup-es.html | 3 +- server/libs/validations/validLanguage.php | 9 +- server/models/Language.php | 2 +- tests/system/edit-settings.rb | 16 ++-- tests/system/get-settings.rb | 2 +- tests/user/get.rb | 1 - 18 files changed, 29 insertions(+), 119 deletions(-) delete mode 100644 client/src/app/admin/panel/dashboard/activity-list.js delete mode 100644 client/src/app/admin/panel/dashboard/activity-list.scss diff --git a/client/src/app-components/language-selector.js b/client/src/app-components/language-selector.js index cacb0d8e..741ce176 100644 --- a/client/src/app-components/language-selector.js +++ b/client/src/app-components/language-selector.js @@ -82,7 +82,7 @@ class LanguageSelector extends React.Component { case 'supported': return this.props.supportedLanguages; case 'allowed': - return this.props.supportedLanguages; + return this.props.allowedLanguages; case 'custom': return this.props.customList; } diff --git a/client/src/app/App.js b/client/src/app/App.js index 23da32fe..d52ea248 100644 --- a/client/src/app/App.js +++ b/client/src/app/App.js @@ -60,11 +60,11 @@ class App extends React.Component { loggedOutStaff: _.includes(props.location.pathname, '/admin/panel') && !props.session.logged }; - if(props.config['maintenance-mode'] && !_.includes(props.location.pathname, '/admin') && !_.includes(props.location.pathname, '/maintenance')) { + if(props.config['maintenance-mode'] === '1' && !_.includes(props.location.pathname, '/admin') && !_.includes(props.location.pathname, '/maintenance')) { browserHistory.push('/maintenance'); } - if(!props.config['maintenance-mode'] && _.includes(props.location.pathname, '/maintenance')) { + if(props.config['maintenance-mode'] === '0' && _.includes(props.location.pathname, '/maintenance')) { browserHistory.push('/'); } diff --git a/client/src/app/admin/panel/dashboard/activity-list.js b/client/src/app/admin/panel/dashboard/activity-list.js deleted file mode 100644 index 9a125793..00000000 --- a/client/src/app/admin/panel/dashboard/activity-list.js +++ /dev/null @@ -1,90 +0,0 @@ -import React from 'react'; - -import API from 'lib-app/api-call'; -import i18n from 'lib-app/i18n'; - -import ActivityRow from 'app-components/activity-row'; -import SubmitButton from 'core-components/submit-button'; - -class ActivityList extends React.Component { - - static propTypes = { - mode: React.PropTypes.oneOf(['staff', 'system']) - }; - - static childContextTypes = { - loading: React.PropTypes.bool - }; - - getChildContext() { - return { - loading: this.state.loading - }; - } - - state = { - activities: [], - page: 1, - limit: false, - loading: false - }; - - componentDidMount() { - this.retrieveNextPage(); - } - - render() { - if (this.props.mode === 'staff') { - return ( -
- {this.state.activities.map(this.renderRow.bind(this))} - {(!this.state.limit) ? this.renderButton() : null} -
- ); - } - else { - return ( -
- {this.state.activities.map(this.renderRow.bind(this))} - {(!this.state.limit) ? this.renderButton() : null} -
- ); - } - } - - renderButton() { - return ( - - {i18n('LOAD_MORE')} - - ); - } - - renderRow(row) { - return ( - - ); - } - - retrieveNextPage() { - this.setState({loading: true}); - - API.call({ - path: '/staff/last-events', - data: { - page: this.state.page - } - }).then(this.onRetrieveSuccess.bind(this)); - } - - onRetrieveSuccess(result) { - this.setState({ - activities: this.state.activities.concat(result.data), - page: this.state.page + 1, - limit: (result.data.length !== 10), - loading: false - }); - } -} - -export default ActivityList; \ No newline at end of file diff --git a/client/src/app/admin/panel/dashboard/activity-list.scss b/client/src/app/admin/panel/dashboard/activity-list.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/client/src/app/admin/panel/dashboard/admin-panel-activity.js b/client/src/app/admin/panel/dashboard/admin-panel-activity.js index 4b6539e6..251462fb 100644 --- a/client/src/app/admin/panel/dashboard/admin-panel-activity.js +++ b/client/src/app/admin/panel/dashboard/admin-panel-activity.js @@ -86,7 +86,7 @@ class AdminPanelActivity extends React.Component { onMenuItemClick(index) { this.setState({ - page: 0, + page: 1, mode: (index === 0) ? 'staff' : 'system', activities: [] }, this.retrieveNextPage.bind(this)); diff --git a/client/src/app/admin/panel/settings/admin-panel-system-preferences.js b/client/src/app/admin/panel/settings/admin-panel-system-preferences.js index dac728dc..11102db2 100644 --- a/client/src/app/admin/panel/settings/admin-panel-system-preferences.js +++ b/client/src/app/admin/panel/settings/admin-panel-system-preferences.js @@ -1,6 +1,8 @@ import React from 'react'; import _ from 'lodash'; +import store from 'app/store'; +import ConfigActions from 'actions/config-actions'; import API from 'lib-app/api-call'; import i18n from 'lib-app/i18n'; import LanguageSelector from 'app-components/language-selector'; @@ -225,6 +227,8 @@ class AdminPanelSystemPreferences extends React.Component { 'supportedLanguages': result.data.supportedLanguages.map(lang => (_.indexOf(languageKeys, lang))) } }); + + store.dispatch(ConfigActions.updateData()); } onRecoverSettingsFail() { diff --git a/client/src/app/main/main-layout-header.js b/client/src/app/main/main-layout-header.js index 3744ab66..dd031535 100644 --- a/client/src/app/main/main-layout-header.js +++ b/client/src/app/main/main-layout-header.js @@ -44,6 +44,7 @@ class MainLayoutHeader extends React.Component { return { className: 'main-layout-header__languages', value: this.props.config.language, + type: 'allowed', onChange: this.changeLanguage.bind(this) }; } diff --git a/client/src/app/main/main-verify-token-page.js b/client/src/app/main/main-verify-token-page.js index 59488b64..8218414d 100644 --- a/client/src/app/main/main-verify-token-page.js +++ b/client/src/app/main/main-verify-token-page.js @@ -11,7 +11,7 @@ class MainVerifyTokenPage extends React.Component { componentDidMount() { API.call({ - path: '/user/verify-token', + path: '/user/verify', data: { token: this.props.params.token, email: this.props.params.email diff --git a/client/src/core-components/form-field.js b/client/src/core-components/form-field.js index cbb8f091..c913e959 100644 --- a/client/src/core-components/form-field.js +++ b/client/src/core-components/form-field.js @@ -149,7 +149,7 @@ class FormField extends React.Component { onChange(nativeEvent) { let event = nativeEvent; - if (this.props.field === 'checkbox') { + if (this.props.field === 'checkbox' && !this.props.decorator) { event = { target: { value: event.target.checked @@ -157,7 +157,7 @@ class FormField extends React.Component { }; } - if (this.props.field === 'select') { + if (this.props.field === 'select' && !this.props.decorator) { event = { target: { value: event.index diff --git a/client/src/data/languages/en.js b/client/src/data/languages/en.js index b70a916d..8e69269c 100644 --- a/client/src/data/languages/en.js +++ b/client/src/data/languages/en.js @@ -237,6 +237,7 @@ export default { 'ERROR_LIST': 'Select at least one', 'ERROR_URL': 'Invalid URL', 'UNVERIFIED_EMAIL': 'Email is not verified yet', + 'ERROR_UPDATING_SETTINGS': 'An error occurred while trying to update settings', //MESSAGES 'SIGNUP_SUCCESS': 'You have registered successfully in our support system.', diff --git a/server/controllers/system/get-logs.php b/server/controllers/system/get-logs.php index 90ffd6b9..fdee9e6c 100644 --- a/server/controllers/system/get-logs.php +++ b/server/controllers/system/get-logs.php @@ -18,7 +18,7 @@ class GetLogsController extends Controller { public function handler() { $page = Controller::request('page'); - $logList = Log::find('LIMIT ? OFFSET ?', [10, 10*($page-1)+1]); + $logList = Log::find('ORDER BY id desc LIMIT ? OFFSET ?', [10, 10*($page-1)+1]); Response::respondSuccess($logList->toArray()); } diff --git a/server/data/mail-templates/user-signup-en.html b/server/data/mail-templates/user-signup-en.html index 66a0219a..d5844f64 100644 --- a/server/data/mail-templates/user-signup-en.html +++ b/server/data/mail-templates/user-signup-en.html @@ -1,5 +1,6 @@
Welcome, {{name}} to our support center, your email is {{to}}, - your token is {{verificationToken}} + you can verify your user using this link + http://dev3.opensupports.com/verify-token/{{to}}/{{verificationToken}}
diff --git a/server/data/mail-templates/user-signup-es.html b/server/data/mail-templates/user-signup-es.html index da8e2c84..7590cafd 100644 --- a/server/data/mail-templates/user-signup-es.html +++ b/server/data/mail-templates/user-signup-es.html @@ -1,5 +1,6 @@
Bienvenido, {{name}} a nuestro centro de soporte, tu email es {{to}}, - tu codigo de verificacion es {{verificationToken}} + podes verificar tu usuatio entrando en este link + http://dev3.opensupports.com/verify-token/{{to}}/{{verificationToken}}
\ No newline at end of file diff --git a/server/libs/validations/validLanguage.php b/server/libs/validations/validLanguage.php index 4578f830..c31058d8 100644 --- a/server/libs/validations/validLanguage.php +++ b/server/libs/validations/validLanguage.php @@ -6,14 +6,7 @@ use Respect\Validation\Rules\AbstractRule; class ValidLanguage extends AbstractRule { - //TODO: Use a list from database instead - private $languages = [ - 'en', - 'es', - 'de' - ]; - public function validate($ticketNumber) { - return in_array($ticketNumber, $this->languages); + return in_array($ticketNumber, \Language::LANGUAGES); } } \ No newline at end of file diff --git a/server/models/Language.php b/server/models/Language.php index c070e5ab..7a44db84 100644 --- a/server/models/Language.php +++ b/server/models/Language.php @@ -8,7 +8,7 @@ class Language extends DataStore { 'es', 'de', 'fr', - 'pr', + 'pt', 'jp', 'ru', 'cn', diff --git a/tests/system/edit-settings.rb b/tests/system/edit-settings.rb index e5df7e69..0b2b77aa 100644 --- a/tests/system/edit-settings.rb +++ b/tests/system/edit-settings.rb @@ -6,19 +6,19 @@ describe'system/edit-settings' do result= request('/system/edit-settings', { "csrf_userid" => $csrf_userid, "csrf_token" => $csrf_token, - "maintenance-mode" => 1, + "maintenance-mode" => false, "time-zone" => -3, "layout" => 'full-width', "allow-attachments" => 1, "max-size" => 2, - "language" => 'es', + "language" => 'en', "no-reply-email" => 'testemail@hotmail.com' }) (result['status']).should.equal('success') row = $database.getRow('setting', 'maintenance-mode', 'name') - (row['value']).should.equal('1') + (row['value']).should.equal('0') row = $database.getRow('setting', 'time-zone', 'name') (row['value']).should.equal('-3') @@ -30,7 +30,7 @@ describe'system/edit-settings' do (row['value']).should.equal('2') row = $database.getRow('setting', 'language', 'name') - (row['value']).should.equal('es') + (row['value']).should.equal('en') row = $database.getRow('setting', 'no-reply-email', 'name') (row['value']).should.equal('testemail@hotmail.com') @@ -44,8 +44,8 @@ describe'system/edit-settings' do result= request('/system/edit-settings', { "csrf_userid" => $csrf_userid, "csrf_token" => $csrf_token, - "supportedLanguages" => '["en", "pr", "jp", "ru"]', - "allowedLanguages" => '["en","pr", "jp", "ru", "de"]' + "supportedLanguages" => '["en", "pt", "jp", "ru"]', + "allowedLanguages" => '["en","pt", "jp", "ru", "de"]' }) (result['status']).should.equal('success') @@ -53,7 +53,7 @@ describe'system/edit-settings' do row = $database.getRow('language', 'en', 'code') (row['supported']).should.equal('1') - row = $database.getRow('language', 'pr', 'code') + row = $database.getRow('language', 'pt', 'code') (row['supported']).should.equal('1') row = $database.getRow('language', 'jp', 'code') @@ -65,7 +65,7 @@ describe'system/edit-settings' do row = $database.getRow('language', 'en', 'code') (row['allowed']).should.equal('1') - row = $database.getRow('language', 'pr', 'code') + row = $database.getRow('language', 'pt', 'code') (row['allowed']).should.equal('1') row = $database.getRow('language', 'jp', 'code') diff --git a/tests/system/get-settings.rb b/tests/system/get-settings.rb index 4a4b6a0a..65a89840 100644 --- a/tests/system/get-settings.rb +++ b/tests/system/get-settings.rb @@ -11,7 +11,7 @@ describe '/system/get-settings' do (result['data']['allowedLanguages'][1]).should.equal('es') (result['data']['allowedLanguages'][2]).should.equal('de') (result['data']['allowedLanguages'][3]).should.equal('fr') - (result['data']['allowedLanguages'][4]).should.equal('pr') + (result['data']['allowedLanguages'][4]).should.equal('pt') (result['data']['allowedLanguages'][5]).should.equal('jp') (result['data']['allowedLanguages'][6]).should.equal('ru') (result['data']['allowedLanguages'][7]).should.equal('cn') diff --git a/tests/user/get.rb b/tests/user/get.rb index aec21e2b..96030a4d 100644 --- a/tests/user/get.rb +++ b/tests/user/get.rb @@ -8,7 +8,6 @@ describe '/user/get' do content: 'A Lannister always pays his debts.', departmentId: 1, language: 'en', - language: 'en', csrf_userid: $csrf_userid, csrf_token: $csrf_token }) From 42c1e81fbc70037386ae5df292360f732c5486ff Mon Sep 17 00:00:00 2001 From: Ivan Diaz Date: Tue, 10 Jan 2017 17:10:28 -0300 Subject: [PATCH 5/5] Ivan - Fix login test --- .../main-home/__tests__/main-home-page-login-widget-test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/app/main/main-home/__tests__/main-home-page-login-widget-test.js b/client/src/app/main/main-home/__tests__/main-home-page-login-widget-test.js index 56089230..ae22410a 100644 --- a/client/src/app/main/main-home/__tests__/main-home-page-login-widget-test.js +++ b/client/src/app/main/main-home/__tests__/main-home-page-login-widget-test.js @@ -91,7 +91,8 @@ describe('Login/Recover Widget', function () { renderComponent({ session: { pending: false, - failed: true + failed: true, + failMessage: 'INVALID_CREDENTIALS' } }); expect(loginForm.props.errors).to.deep.equal({password: 'Invalid password'});