state.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. const config = require('./config');
  2. const layout = require('./layout');
  3. const assets = require('../common/assets');
  4. const getTranslator = require('./locale');
  5. const { getFxaConfig } = require('./fxa');
  6. const fs = require('fs');
  7. const path = require('path');
  8. module.exports = async function(req) {
  9. const locale = (() => {
  10. if (config.custom_locale != '' && fs.existsSync(path.join(__dirname,'../public/locales',config.custom_locale))) {
  11. return config.custom_locale;
  12. }
  13. else {
  14. return req.language || 'en-US';
  15. }
  16. })();
  17. let authConfig = null;
  18. let robots = 'none';
  19. if (req.route && req.route.path === '/') {
  20. robots = 'all';
  21. }
  22. if (config.fxa_client_id) {
  23. try {
  24. authConfig = await getFxaConfig();
  25. authConfig.client_id = config.fxa_client_id;
  26. } catch (e) {
  27. // continue without accounts
  28. }
  29. }
  30. const prefs = {};
  31. if (config.survey_url) {
  32. prefs.surveyUrl = config.survey_url;
  33. }
  34. const baseUrl = config.deriveBaseUrl(req);
  35. const uiAssets = {
  36. android_chrome_192px: assets.get('android-chrome-192x192.png'),
  37. android_chrome_512px: assets.get('android-chrome-512x512.png'),
  38. apple_touch_icon: assets.get('apple-touch-icon.png'),
  39. favicon_16px: assets.get('favicon-16x16.png'),
  40. favicon_32px: assets.get('favicon-32x32.png'),
  41. icon: assets.get('icon.svg'),
  42. safari_pinned_tab: assets.get('safari-pinned-tab.svg'),
  43. facebook: baseUrl + '/' + assets.get('send-fb.jpg'),
  44. twitter: baseUrl + '/' + assets.get('send-twitter.jpg'),
  45. wordmark: assets.get('wordmark.svg') + '#logo',
  46. custom_css: ''
  47. };
  48. Object.keys(uiAssets).forEach(index => {
  49. if (config.ui_custom_assets[index] !== '')
  50. uiAssets[index] = config.ui_custom_assets[index];
  51. });
  52. return {
  53. archive: {
  54. numFiles: 0
  55. },
  56. locale,
  57. capabilities: { account: false },
  58. translate: getTranslator(locale),
  59. title: config.custom_title,
  60. description: config.custom_description,
  61. baseUrl,
  62. ui: {
  63. colors: {
  64. primary: config.ui_color_primary,
  65. accent: config.ui_color_accent
  66. },
  67. assets: uiAssets
  68. },
  69. storage: {
  70. files: []
  71. },
  72. fileInfo: {},
  73. cspNonce: req.cspNonce,
  74. user: { avatar: assets.get('user.svg'), loggedIn: false },
  75. robots,
  76. authConfig,
  77. prefs,
  78. layout
  79. };
  80. };