Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .firebaserc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"projects": {
"default": "parallel-cf800",
"default": "parallel-beta-31dc4",
"prod": "parallel-cf800",
"beta": "parallel-beta-31dc4"
}
Expand Down
40 changes: 40 additions & 0 deletions .github/workflows/beta.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Deploy Beta

on:
workflow_dispatch:
pull_request:
types: [edited]

jobs:
deploy-beta:
name: Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Use Node.js version from .nvmrc
uses: actions/setup-node@v4
with:
node-version-file: .nvmrc

- name: Write service account
run: |
mkdir private
echo "$BETA_FIREBASE_SERVICE_ACCOUNT" > ./private/service-account.json
echo '${{ secrets.BETA_FIREBASE_SERVICE_ACCOUNT }}' > gcloud.json
env:
BETA_FIREBASE_SERVICE_ACCOUNT: ${{ secrets.BETA_FIREBASE_SERVICE_ACCOUNT }}
shell: bash

- name: Install
run: |
npm install
shell: bash

- name: Deploy
env:
GOOGLE_APPLICATION_CREDENTIALS: gcloud.json
run: |
npm run deploy
shell: bash
17 changes: 15 additions & 2 deletions functions/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@


const firebase = require('firebase-admin');
const serviceAccount = require('./build/service-account.json');
firebase.initializeApp({
credential: firebase.credential.cert(require('./build/service-account.json')),
databaseURL: `https://parallel-cf800.firebaseio.com`,
credential: firebase.credential.cert(serviceAccount),
databaseURL: `https://${serviceAccount.project_id}.firebaseio.com`,
});

const fs = require('fs');
Expand Down Expand Up @@ -87,6 +88,16 @@ function letterOrder(a, b) {
return a < b ? -1 : a > b ? 1 : 0;
}

const firebaseClientConfig = serviceAccount.project_id === 'parallel-cf800' ? {
apiKey: "AIzaSyCrQ_PdH-05lcNWETGvGfiwO3MBXk_WeVU",
projectId: "parallel-cf800",
authDomain: "parallel-cf800.firebaseapp.com",
} : {
apiKey: "AIzaSyDk4_ME-Uy1D3Yjg94Af7Gzhg3I1xNYWp8",
projectId: "parallel-beta-31dc4",
authDomain: "parallel-beta-31dc4.firebaseapp.com",
};

// -----------------------------------------------------------------------------
// Set up Express App

Expand All @@ -107,6 +118,8 @@ app.use((req, res, next) => {
res.locals.levelNamesWithAges = LEVEL_NAMES_WITH_AGES;
res.locals.path = req.path.replace(/\/$/, '');
res.locals.scoreClass = scoreClass;
res.locals.firebaseClientConfig = firebaseClientConfig;
res.locals.isBeta = serviceAccount.project_id.includes('beta');

if (req.user && req.user.showWelcomeMsg && !req.query.latest && !req.path.includes('/api')) {
userDB.doc(req.user.uid) // async
Expand Down
7 changes: 7 additions & 0 deletions functions/views/_layout.pug
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,15 @@ html
if user
script!= 'window.USER_ID = "' + user.uid + '";'

script!= 'window.FIREBASE_CONFIG = ' + JSON.stringify(firebaseClientConfig) + ';'

body
#vue
if isBeta
.beta
div You are on our Beta Testing Site!
div The information & events on this page are for testing purposes and should not be followed.
a(href="https://parallel.org.uk") Click here to return to the production site.
.headerWrapper
.header
if !sidebarDisabled
Expand Down
9 changes: 5 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@
},
"scripts": {
"start": "grunt build && npm run serve",
"serve": "grunt concurrent & GOOGLE_APPLICATION_CREDENTIALS=private/service-account.json firebase serve --project prod",
"export-users": "cross-env GOOGLE_APPLICATION_CREDENTIALS=private/service-account.json firebase auth:export ./private/tmp-users.json --format=json --project prod",
"deploy": "grunt && GOOGLE_APPLICATION_CREDENTIALS=private/service-account.json firebase deploy --project prod",
"serve:old": "grunt concurrent & GOOGLE_APPLICATION_CREDENTIALS=private/service-account.json firebase serve --project beta",
"serve": "grunt concurrent & GOOGLE_APPLICATION_CREDENTIALS=private/service-account.json firebase serve --project $(node scripts/get-project-alias.js)",
"export-users": "cross-env GOOGLE_APPLICATION_CREDENTIALS=private/service-account.json firebase auth:export ./private/tmp-users.json --format=json --project $(node scripts/get-project-alias.js)",
"deploy": "grunt && GOOGLE_APPLICATION_CREDENTIALS=private/service-account.json firebase deploy --project $(node scripts/get-project-alias.js)",
"convert-teachers": "node scripts/convert-teachers.js",
"convert-students": "node scripts/convert-students.js",
"get-users": "node scripts/get-users.js",
Expand All @@ -20,7 +21,7 @@
"get-tts-results": "node scripts/get-tts-results.js",
"update-results": "node scripts/update-results.js",
"set-points": "node scripts/set-points.js",
"start-marsh": "grunt build && concurrently \"grunt concurrent\" \"GOOGLE_APPLICATION_CREDENTIALS=private/service-account.json firebase serve --project prod\""
"start-marsh": "grunt build && concurrently \"grunt concurrent\" \"GOOGLE_APPLICATION_CREDENTIALS=private/service-account.json firebase serve --project $(node scripts/get-project-alias.js)\""
},
"devDependencies": {
"@babel/core": "^7.15.0",
Expand Down
2 changes: 1 addition & 1 deletion scripts/change-email.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const to = 'lalanthi026@googlemail.com'

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: "https://parallel-cf800.firebaseio.com",
databaseURL: require('./utils/firebase-config').databaseURL,
});

const run = () =>
Expand Down
2 changes: 1 addition & 1 deletion scripts/convert-students.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const STUDENTS = [

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: 'https://parallel-cf800.firebaseio.com'
databaseURL: require('./utils/firebase-config').databaseURL
});

const file = path.join(__dirname, `../private/tmp-users.json`);
Expand Down
2 changes: 1 addition & 1 deletion scripts/convert-teachers.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const TEACHERS = [

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: 'https://parallel-cf800.firebaseio.com'
databaseURL: require('./utils/firebase-config').databaseURL
});

const file = path.join(__dirname, `../private/tmp-users.json`);
Expand Down
2 changes: 1 addition & 1 deletion scripts/delete-accounts.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const USERS = [

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: 'https://parallel-cf800.firebaseio.com'
databaseURL: require('./utils/firebase-config').databaseURL
});

async function deleteAccount(email) {
Expand Down
2 changes: 2 additions & 0 deletions scripts/get-project-alias.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
const { projectAlias } = require('./utils/firebase-config');
process.stdout.write(projectAlias);
2 changes: 1 addition & 1 deletion scripts/privacy-approve.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ const dryRun = true; // when true, will just log what it will write, but not sav

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: 'https://parallel-cf800.firebaseio.com'
databaseURL: require('./utils/firebase-config').databaseURL
});

const userDb = fb.firestore().collection('users');
Expand Down
2 changes: 1 addition & 1 deletion scripts/privacy-y8webinar.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ const dryRun = true; // when true, will just log what it will write, but not sav

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: 'https://parallel-cf800.firebaseio.com'
databaseURL: require('./utils/firebase-config').databaseURL
});

const userDb = fb.firestore().collection('users');
Expand Down
2 changes: 1 addition & 1 deletion scripts/recover-account.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const makePassword = () => {

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: "https://parallel-cf800.firebaseio.com",
databaseURL: require('./utils/firebase-config').databaseURL,
});

const updateUserPassword = (email) =>
Expand Down
2 changes: 1 addition & 1 deletion scripts/set-account-level.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const isEuclidAdmin = true;

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: "https://parallel-cf800.firebaseio.com",
databaseURL: require('./utils/firebase-config').databaseURL,
});

const setAdmin = () => {
Expand Down
2 changes: 1 addition & 1 deletion scripts/switch-data.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const TO_EMAIL = "jmanyoma20@gmail.com";

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: "https://parallel-cf800.firebaseio.com",
databaseURL: require('./utils/firebase-config').databaseURL,
});

const getAnswerCount = (data) =>
Expand Down
2 changes: 1 addition & 1 deletion scripts/temp-update-levels/fix-levels-run.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const limit = promiseLimit(400);

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: 'https://parallel-cf800.firebaseio.com'
databaseURL: require('../utils/firebase-config').databaseURL
});

const userDb = fb.firestore().collection('users');
Expand Down
2 changes: 1 addition & 1 deletion scripts/update-euclid-data.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const dryRun = true; // when true, will just log what it will write, but not sav

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: 'https://parallel-cf800.firebaseio.com'
databaseURL: require('./utils/firebase-config').databaseURL
});
const userDb = fb.firestore().collection('users');

Expand Down
2 changes: 1 addition & 1 deletion scripts/update-results.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const ADD_POINTS = 2;

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: 'https://parallel-cf800.firebaseio.com'
databaseURL: require('./utils/firebase-config').databaseURL
});
const userDb = fb.firestore().collection('users');

Expand Down
2 changes: 1 addition & 1 deletion scripts/utils/downloadUsers.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const serviceAccount = require('../../private/service-account.json');

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: 'https://parallel-cf800.firebaseio.com'
databaseURL: require('./firebase-config').databaseURL
});

const cacheFilePath = path.join(__dirname, `../../private/cache-users.json`);
Expand Down
15 changes: 15 additions & 0 deletions scripts/utils/firebase-config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const path = require('path');
const serviceAccount = require(path.join(__dirname, '../../private/service-account.json'));

const PROJECT_ALIASES = {
'parallel-beta-31dc4': 'beta',
'parallel-cf800': 'prod',
};

const projectId = serviceAccount.project_id;
const databaseURL = `https://${projectId}.firebaseio.com`;
const projectAlias = PROJECT_ALIASES[projectId] || projectId;

console.error('\n\n\n\n\nRunning with Firebase project:', projectId, '(', projectAlias, ')\n\n\n');

module.exports = { projectId, databaseURL, projectAlias };
2 changes: 1 addition & 1 deletion scripts/yearly-updates/delete-old-users.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const serviceAccount = require("../../private/service-account.json");

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: "https://parallel-cf800.firebaseio.com",
databaseURL: require('../utils/firebase-config').databaseURL,
});

const keysToRemove = [
Expand Down
2 changes: 1 addition & 1 deletion scripts/yearly-updates/update-users-upload.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const limit = promiseLimit(400);

fb.initializeApp({
credential: fb.credential.cert(serviceAccount),
databaseURL: 'https://parallel-cf800.firebaseio.com'
databaseURL: require('../utils/firebase-config').databaseURL
});

const userDb = fb.firestore().collection('users');
Expand Down
6 changes: 1 addition & 5 deletions static/scripts/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,7 @@ document.addEventListener("wheel", function(event){
});

document.addEventListener('DOMContentLoaded', function() {
firebase.initializeApp({
apiKey: "AIzaSyCrQ_PdH-05lcNWETGvGfiwO3MBXk_WeVU",
projectId: "parallel-cf800",
authDomain: "parallel-cf800.firebaseapp.com",
});
firebase.initializeApp(window.FIREBASE_CONFIG);

const user = getUser();
const challenge = window.PARALLELOGRAM ? getChallenge() : null;
Expand Down
11 changes: 11 additions & 0 deletions static/styles/layout.less
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,17 @@ html {
line-height: 1.8;
}

.beta {
background-color: orange;
margin: 0px -1rem;
text-align: center;

a {
color: blue;
text-decoration: underline;
}
}

#logo {
background: url('/images/logo.png');
background-size: cover;
Expand Down