fix(i18n): redirect based on Referer header (#40512)
Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
This commit is contained in:
committed by
Mrugesh Mohapatra
parent
a3b1b52cdd
commit
77c46dba2c
@@ -16,6 +16,7 @@ import { ifUserRedirectTo, ifNoUserRedirectTo } from '../utils/middleware';
|
||||
import { wrapHandledError } from '../utils/create-handled-error.js';
|
||||
import { removeCookies } from '../utils/getSetAccessToken';
|
||||
import { decodeEmail } from '../../common/utils';
|
||||
import { getParamsFromReq } from '../utils/get-return-to';
|
||||
|
||||
const isSignUpDisabled = !!process.env.DISABLE_SIGNUP;
|
||||
if (isSignUpDisabled) {
|
||||
@@ -56,7 +57,8 @@ module.exports = function enableAuthentication(app) {
|
||||
);
|
||||
} else {
|
||||
api.get('/signin', ifUserRedirect, (req, res, next) => {
|
||||
const state = jwt.sign({ returnTo: req.query.returnTo }, jwtSecret);
|
||||
const { returnTo, origin, pathPrefix } = getParamsFromReq(req);
|
||||
const state = jwt.sign({ returnTo, origin, pathPrefix }, jwtSecret);
|
||||
return passport.authenticate('auth0-login', { state })(req, res, next);
|
||||
});
|
||||
|
||||
|
@@ -12,12 +12,15 @@ import { ObjectID } from 'mongodb';
|
||||
import isNumeric from 'validator/lib/isNumeric';
|
||||
import isURL from 'validator/lib/isURL';
|
||||
|
||||
import { homeLocation } from '../../../config/env';
|
||||
|
||||
import { ifNoUserSend } from '../utils/middleware';
|
||||
import { dasherize } from '../../../utils/slugs';
|
||||
import { fixCompletedChallengeItem } from '../../common/utils';
|
||||
import { getChallenges } from '../utils/get-curriculum';
|
||||
import {
|
||||
getParamsFromReq,
|
||||
getRedirectBase,
|
||||
normalizeParams
|
||||
} from '../utils/get-return-to';
|
||||
|
||||
const log = debug('fcc:boot:challenges');
|
||||
|
||||
@@ -29,7 +32,9 @@ export default async function bootChallenge(app, done) {
|
||||
await getChallenges()
|
||||
);
|
||||
const redirectToCurrentChallenge = createRedirectToCurrentChallenge(
|
||||
challengeUrlResolver
|
||||
challengeUrlResolver,
|
||||
normalizeParams,
|
||||
getParamsFromReq
|
||||
);
|
||||
|
||||
api.post(
|
||||
@@ -59,7 +64,6 @@ export default async function bootChallenge(app, done) {
|
||||
app.use(router);
|
||||
done();
|
||||
}
|
||||
const learnURL = `${homeLocation}/learn`;
|
||||
|
||||
const jsProjects = [
|
||||
'aaa48de84e1ecc7c742e1124',
|
||||
@@ -327,15 +331,22 @@ function backendChallengeCompleted(req, res, next) {
|
||||
.subscribe(() => {}, next);
|
||||
}
|
||||
|
||||
// TODO: extend tests to cover www.freecodecamp.org/language and
|
||||
// chinese.freecodecamp.org
|
||||
export function createRedirectToCurrentChallenge(
|
||||
challengeUrlResolver,
|
||||
{ _homeLocation = homeLocation, _learnUrl = learnURL } = {}
|
||||
normalizeParams,
|
||||
getParamsFromReq
|
||||
) {
|
||||
return async function redirectToCurrentChallenge(req, res, next) {
|
||||
const { user } = req;
|
||||
const { origin, pathPrefix } = normalizeParams(getParamsFromReq(req));
|
||||
|
||||
const redirectBase = getRedirectBase(origin, pathPrefix);
|
||||
if (!user) {
|
||||
return res.redirect(_learnUrl);
|
||||
return res.redirect(redirectBase + '/learn');
|
||||
}
|
||||
|
||||
const challengeId = user && user.currentChallengeId;
|
||||
const challengeUrl = await challengeUrlResolver(challengeId).catch(next);
|
||||
if (challengeUrl === '/learn') {
|
||||
@@ -346,6 +357,6 @@ export function createRedirectToCurrentChallenge(
|
||||
db may not be properly seeded.
|
||||
`);
|
||||
}
|
||||
return res.redirect(`${_homeLocation}${challengeUrl}`);
|
||||
return res.redirect(`${redirectBase}${challengeUrl}`);
|
||||
};
|
||||
}
|
||||
|
Reference in New Issue
Block a user