import dedent from 'dedent'; import moment from 'moment-timezone'; import { Observable } from 'rx'; import debugFactory from 'debug'; import emoji from 'node-emoji'; import { frontEndChallengeId, backEndChallengeId, respWebDesignId, frontEndLibsId, jsAlgoDataStructId, dataVisId, apisMicroservicesId, infosecQaId } from '../utils/constantStrings.json'; import certTypes from '../utils/certTypes.json'; import { ifNoUser401, ifNoUserRedirectTo, ifNotVerifiedRedirectToSettings } from '../utils/middleware'; import { observeQuery } from '../utils/rx'; import { prepUniqueDaysByHours, calcCurrentStreak, calcLongestStreak } from '../utils/user-stats'; import supportedLanguages from '../../common/utils/supported-languages'; import { getChallengeInfo, cachedMap } from '../utils/map'; const isSignUpDisabled = !!process.env.DISABLE_SIGNUP; const debug = debugFactory('fcc:boot:user'); const sendNonUserToMap = ifNoUserRedirectTo('/map'); const certIds = { [certTypes.frontEnd]: frontEndChallengeId, [certTypes.backEnd]: backEndChallengeId, [certTypes.respWebDesign]: respWebDesignId, [certTypes.frontEndLibs]: frontEndLibsId, [certTypes.jsAlgoDataStruct]: jsAlgoDataStructId, [certTypes.dataVis]: dataVisId, [certTypes.apisMicroservices]: apisMicroservicesId, [certTypes.infosecQa]: infosecQaId }; const certViews = { [certTypes.frontEnd]: 'certificate/front-end.jade', [certTypes.backEnd]: 'certificate/back-end.jade', [certTypes.fullStack]: 'certificate/full-stack.jade', [certTypes.respWebDesign]: 'certificate/responsive-web-design.jade', [certTypes.frontEndLibs]: 'certificate/front-end-libraries.jade', [certTypes.jsAlgoDataStruct]: 'certificate/javascript-algorithms-and-data-structures.jade', [certTypes.dataVis]: 'certificate/data-visualization.jade', [certTypes.apisMicroservices]: 'certificate/apis-and-microservices.jade', [certTypes.infosecQa]: 'certificate/information-security-and-quality-assurance.jade' }; const certText = { [certTypes.frontEnd]: 'Front End certified', [certTypes.backEnd]: 'Back End Certified', [certTypes.fullStack]: 'Full Stack Certified', [certTypes.respWebDesign]: 'Responsive Web Design Certified', [certTypes.frontEndLibs]: 'Front End Libraries Certified', [certTypes.jsAlgoDataStruct]: 'JavaScript Algorithms and Data Structures Certified', [certTypes.dataVis]: 'Data Visualization Certified', [certTypes.apisMicroservices]: 'APIs and Microservices Certified', [certTypes.infosecQa]: 'Information Security and Quality Assurance Certified' }; const dateFormat = 'MMM DD, YYYY'; function replaceScriptTags(value) { return value .replace(/