Skip to content

Commit

Permalink
Set proper error codes in response; fix 404 handling in deck landing
Browse files Browse the repository at this point in the history
  • Loading branch information
kprist committed Dec 11, 2018
1 parent 79bf759 commit 35ecbab
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 29 deletions.
26 changes: 16 additions & 10 deletions actions/loadDeck.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,16 +102,6 @@ export default function loadDeck(context, payload, done) {

payload.params.jwt = context.getStore(UserProfileStore).getState().jwt;

let permissionsPromise;
//if user is not logged in, only allow view mode and reset permissions, else load this user's permissions on the selected root deck
if (!payload.params.jwt){
if (!payload.query.interestedUser) //NOTE should not be changed in the special case: Link from email for deck owner to add new editor
payloadCustom.params.mode = 'view';
permissionsPromise = context.executeAction(resetPermissions, payloadCustom);
} else {
permissionsPromise = context.executeAction(loadPermissions, payloadCustom);
}

context.dispatch('UPDATE_DECK_PAGE_CONTENT', payloadCustom);
pageTitle = pageTitle + ' | ' + payloadCustom.params.stype + ' | ' + payloadCustom.params.sid + ' | ' + payloadCustom.params.mode;
if((currentState.selector.id === payloadCustom.params.id) && (currentState.selector.spath === payloadCustom.params.spath)){
Expand All @@ -131,6 +121,12 @@ export default function loadDeck(context, payload, done) {

// load translation stuff
context.executeAction(loadNodeTranslations, payload.params, (err, results) => {
if (err) {
// log the error and return!!!
log.error(context, {filepath: __filename, message: err.message});
return done(err);
}

//load all required actions in parallel
async.parallel([
(callback) => {
Expand All @@ -141,6 +137,16 @@ export default function loadDeck(context, payload, done) {
}, callback);
},
(callback) => {
let permissionsPromise;
//if user is not logged in, only allow view mode and reset permissions, else load this user's permissions on the selected root deck
if (!payload.params.jwt){
if (!payload.query.interestedUser) //NOTE should not be changed in the special case: Link from email for deck owner to add new editor
payloadCustom.params.mode = 'view';
permissionsPromise = context.executeAction(resetPermissions, payloadCustom);
} else {
permissionsPromise = context.executeAction(loadPermissions, payloadCustom);
}

permissionsPromise.then(() => {
let permissions = context.getStore(PermissionsStore).getState().permissions;
//special handling for special case: Link from email for deck owner to add new editor
Expand Down
2 changes: 1 addition & 1 deletion actions/loadLegacy.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export default function loadLegacy(context, payload, done) {
context.executeAction(serviceUnavailable, payload, done);
//context.dispatch('LOAD_FEATURED_FAILURE', err);
} else {
done({'statusCode':'301','redirectURL': '/deck/' + res.new_id});
done({'statusCode': 301,'redirectURL': '/deck/' + res.new_id});
}
});
}
4 changes: 2 additions & 2 deletions actions/translation/loadNodeTranslations.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ export default function loadNodeTranslations(context, payload, done) {

context.service.read('decktree.nodetranslation', payload, {timeout: 20 * 1000}, (err, res) => {
if (err) {
log.error(context, {filepath: __filename});
context.executeAction(serviceUnavailable, payload, done);
log.error(context, {filepath: __filename, message: err.message});
done(err);
} else {
context.dispatch('LOAD_TRANSLATIONS_SUCCESS', res);
done();
Expand Down
24 changes: 17 additions & 7 deletions configs/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import loadImportFile from '../actions/loadImportFile';
import loadPresentation from '../actions/loadPresentation';
import loadAddDeck from '../actions/loadAddDeck';
import notFoundError from '../actions/error/notFoundError';
import serviceUnavailable from '../actions/error/serviceUnavailable';
import loadResetPassword from '../actions/loadResetPassword';
import async from 'async';
import { chooseAction } from '../actions/user/userprofile/chooseAction';
Expand Down Expand Up @@ -381,7 +382,16 @@ export default {
handler: require('../components/Deck/DeckLandingPage'),
page: 'decklandingpage',
action: (context, payload, done) => {
context.executeAction(loadDeck, payload, done);
context.executeAction(loadDeck, payload, (err) => {
if (err) {
if (err.statusCode === 404) {
return context.executeAction(notFoundError, payload, done);
} else {
return context.executeAction(serviceUnavailable, payload, done);
}
}
done();
});
}
},

Expand All @@ -397,12 +407,12 @@ export default {
},
(callback) => {
context.executeAction(loadDeckStats, {deckId: payload.params.id}, callback);
},
}],
(err, result) => {
if(err) console.log(err);
if(err)console.log(err);
done();
}
]);
);

}
},
Expand Down Expand Up @@ -448,7 +458,7 @@ export default {
];
urlParts = urlParts.filter((u) => !!u);

done({statusCode: '301', redirectURL: urlParts.join('/')});
done({statusCode: 301, redirectURL: urlParts.join('/')});
},
},
legacydeck: {
Expand Down Expand Up @@ -735,7 +745,7 @@ export default {
];
urlParts = urlParts.filter((u) => !!u);

done({statusCode: '301', redirectURL: urlParts.join('/')});
done({statusCode: 301, redirectURL: urlParts.join('/')});
},
},
neo4jguide: {
Expand All @@ -760,7 +770,7 @@ export default {
];
urlParts = urlParts.filter((u) => !!u);

done({statusCode: '301', redirectURL: urlParts.join('/')});
done({statusCode: 301, redirectURL: urlParts.join('/')});
},
},
importfile: {
Expand Down
13 changes: 6 additions & 7 deletions server/handleServerRendering.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,26 +120,25 @@ export default function handleServerRendering(req, res, next){
reqId: req.reqId
}, (err) => {
if (err) {
if (err.statusCode && err.statusCode === '301') {
//console.log('REDIRECTING to '+ JSON.stringify(err));
if (err.statusCode === 301) {
res.redirect(301, err.redirectURL);
}else
if (err.statusCode && err.statusCode === '404') {
} else if (err.statusCode) {
// render page and also set status to the error code
let html = renderApp(req, res, context);
debug('Sending markup');
res.type('html');
res.status(err.statusCode);
log.error({Id: res.reqId, URL: req.url, StatusCode: res.statusCode, StatusMessage: res.statusMessage, Message: 'Sending response'});
res.write('<!DOCTYPE html>' + html);
res.end();
return;
}else{
} else {
// TODO render page even though there was an error ????
let html = renderApp(req, res, context);
debug('Sending markup');
res.type('html');
res.write('<!DOCTYPE html>' + html);
log.error({Id: res.reqId, URL: req.url, StatusCode: res.statusCode, StatusMessage: res.statusMessage, Message: 'Sending response'});
res.end();
return;
}

} else {
Expand Down
3 changes: 1 addition & 2 deletions services/decktree.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ export default {
}).then((res) => {
callback(null, {translations: res, selector: selector, language: args.language});
}).catch((err) => {
console.log(err);
callback(null, {translations: [], selector: selector, language: args.language});
callback(err);
});
}

Expand Down

0 comments on commit 35ecbab

Please sign in to comment.