diff --git a/app/soapbox/build_config.js b/app/soapbox/build_config.js index 1d057163f..7e0419619 100644 --- a/app/soapbox/build_config.js +++ b/app/soapbox/build_config.js @@ -4,7 +4,7 @@ * @module soapbox/build_config */ -const { trim } = require('lodash'); +const { trim, trimEnd } = require('lodash'); const { NODE_ENV, @@ -15,7 +15,7 @@ const { const sanitizeURL = url => { try { - return new URL(url).toString(); + return trimEnd(new URL(url).toString(), '/'); } catch { return ''; } diff --git a/app/soapbox/features/auth_login/components/login_form.js b/app/soapbox/features/auth_login/components/login_form.js index d9933f6d0..1465cd687 100644 --- a/app/soapbox/features/auth_login/components/login_form.js +++ b/app/soapbox/features/auth_login/components/login_form.js @@ -3,18 +3,30 @@ import { connect } from 'react-redux'; import { injectIntl, FormattedMessage, defineMessages } from 'react-intl'; import { Link } from 'react-router-dom'; import ImmutablePureComponent from 'react-immutable-pure-component'; +import { getFeatures } from 'soapbox/utils/features'; +import { getBaseURL } from 'soapbox/utils/state'; const messages = defineMessages({ username: { id: 'login.fields.username_placeholder', defaultMessage: 'Username' }, password: { id: 'login.fields.password_placeholder', defaultMessage: 'Password' }, }); -export default @connect() +const mapStateToProps = state => { + const instance = state.get('instance'); + const features = getFeatures(instance); + + return { + baseURL: getBaseURL(state), + hasResetPasswordAPI: features.resetPasswordAPI, + }; +}; + +export default @connect(mapStateToProps) @injectIntl class LoginForm extends ImmutablePureComponent { render() { - const { intl, isLoading, handleSubmit } = this.props; + const { intl, isLoading, handleSubmit, baseURL, hasResetPasswordAPI } = this.props; return (