diff --git a/Tomoe/build/core/config.js b/Tomoe/build/core/config.js
index 4c83953..d90b9de 100644
--- a/Tomoe/build/core/config.js
+++ b/Tomoe/build/core/config.js
@@ -1,12 +1,12 @@
import crypto from 'crypto';
import fs from 'fs';
-
+import packageDetail from '../../package.json';
import { Definitions } from '../templates';
const TOMOE_CONFIG_PATH = `./${Definitions.configName}`
-export class Config{
+export class Config {
constructor(params = {}){
this.hackathon = params.hackathon || '';
this.beta = params.beta || false;
@@ -17,10 +17,11 @@ export class Config{
this.server = params.server || this.database;
this.apiVersion = params.apiVersion || Definitions.apiVersion;
this.userTypes = params.userTypes || Definitions.userTypes;
- this.hackerStatuses = params.hackerStatuses || Definitions.defaultHackerStatuses;
- this.volunteerStatuses = params.hackerStatuses || Definitions.defaultVolunteerStatuses;
+ this.hackerStatuses = params.hackerStatuses || Definitions.hackerStatuses;
+ this.volunteerStatuses = params.hackerStatuses || Definitions.volunteerStatuses;
this.build = params.build || ((fs.existsSync('../.hackmerced')) ? Definitions.build.default : Definitions.build.import)
- this.adminPermissions = params.adminPermissions || Definitions.defaultAdminPermissions;
+ this.adminPermissions = params.adminPermissions || Definitions.adminPermissions;
+ this.version = packageDetail.version;
}
get(){
@@ -36,7 +37,9 @@ export class Config{
userTypes: this.userTypes,
hackerStatuses: this.hackerStatuses,
volunteerStatuses: this.volunteerStatuses,
- adminPermissions: this.adminPermissions
+ adminPermissions: this.adminPermissions,
+ build: this.build,
+ version: this.version,
}
}
@@ -55,6 +58,11 @@ export class Config{
})
}
+
+ static current(){
+ return require(`../.${TOMOE_CONFIG_PATH}`).Tomoe;
+ }
+
delete(){
fs.unlink(TOMOE_CONFIG_PATH);
}
diff --git a/Tomoe/build/core/generator.js b/Tomoe/build/core/generator.js
index 58b7537..f313201 100644
--- a/Tomoe/build/core/generator.js
+++ b/Tomoe/build/core/generator.js
@@ -89,7 +89,7 @@ const stage = {
term('\nLearn how to create local ENV files at: https://github.com/HackMerced/HackMerced/tree/master/Tomoe#local-environmnet-variables-in-development'.red);
term('\n');
- process.exit();
+ process.exit(1);
}
stage.next();
diff --git a/Tomoe/build/templates/tomoe.template.js b/Tomoe/build/templates/tomoe.template.js
index 10d42c6..af05375 100644
--- a/Tomoe/build/templates/tomoe.template.js
+++ b/Tomoe/build/templates/tomoe.template.js
@@ -15,7 +15,7 @@ const standardDBCollections = [
'hacker', // hacker users
'volunteer', // volunteer users
'oauth', // oauth keys information
- 'meta' // meta Tomoe information
+ 'meta', // meta Tomoe information
]
const dbCollections = {
@@ -32,7 +32,7 @@ export const Definitions = {
server: serverNames[process.env.NODE_ENV],
userTypes:['admin', 'hacker', 'volunteer'],
apiVersion: '2.0',
- defaultHackerStatuses:[
+ hackerStatuses:[
'registered',
'applied',
'accepted',
@@ -41,12 +41,12 @@ export const Definitions = {
'attending',
'inactive'
],
- defaultVolunteerStatuses: [
+ volunteerStatuses: [
"applied",
"denied",
"approved",
],
- defaultAdminPermissions: [
+ adminPermissions: [
'read',
'read+write', // read + write
'admin' // super admin (controls group settings)
diff --git a/Tomoe/build/update/index.js b/Tomoe/build/update/index.js
new file mode 100644
index 0000000..d930b6f
--- /dev/null
+++ b/Tomoe/build/update/index.js
@@ -0,0 +1,11 @@
+const fs = require('fs'),
+ ENV_PATH = '.env';
+
+// support for local .env files
+
+if(fs.existsSync(ENV_PATH)){
+ require('dotenv').config({path: ENV_PATH})
+}
+
+require('babel-core/register');
+require('./updater.js')
diff --git a/Tomoe/build/update/updater.js b/Tomoe/build/update/updater.js
new file mode 100644
index 0000000..2a56ca1
--- /dev/null
+++ b/Tomoe/build/update/updater.js
@@ -0,0 +1,48 @@
+/*
+ This code will upgrade the Tomoe.config.js and Arangodb without destroying the database/your updates
+*/
+import packageDetail from '../../package.json';
+import { Config } from '../core/config';
+import { Definitions } from '../templates/tomoe.template';
+import { Database } from 'arangojs';
+import { createCollections } from '../util'
+
+
+const term = console.log; // easier to type
+
+export function updateConfig() {
+ term(`Updating tomoe.config.js`);
+
+ let config = new Config(Config.current());
+
+ for(let option in Definitions) {
+ if(!config[option]) {
+ config[option] = Definitions[option];
+ }
+ }
+
+ config.save();
+}
+
+export function updateCollections() {
+ global.db = new Database({
+ url: process.env.DB_URI,
+ });
+
+ db.useDatabase(Definitions.server);
+
+ createCollections().then(() => {
+
+ }).catch(err => {
+ term(err);
+ })
+}
+
+export function TomoeUpdate() {
+ term(`Upgrading Tomoe to version ${packageDetail.version}`);
+
+ updateConfig();
+ updateCollections();
+}
+
+TomoeUpdate();
diff --git a/Tomoe/build/util/check-version.js b/Tomoe/build/util/check-version.js
new file mode 100644
index 0000000..dfc304a
--- /dev/null
+++ b/Tomoe/build/util/check-version.js
@@ -0,0 +1,19 @@
+const packageDetail = require('../../package.json');
+const colors = require('colors');
+const LATEST_MAJOR_RELEASE = 20.2;
+
+function checkVersion(resolve) {
+ if(parseFloat(packageDetail.version.replace('.', '')) < LATEST_MAJOR_RELEASE) {
+ console.log(colors.red('\n\You are running a deprecated version of Tomoe!\nPlease delete your "tomoe.config.js" file and run the following:\n\n'),colors.green(' yarn setup'))
+ process.exit(1);
+ }
+
+ if(TOMOE_CONFIG.version === packageDetail.version) {
+ return resolve();
+ }
+
+ console.log(colors.red('\n\Version mismatch in Tomoe instances, please run:\n'),colors.green(' yarn renew'))
+ process.exit(1);
+}
+
+module.exports = checkVersion;
diff --git a/Tomoe/package.json b/Tomoe/package.json
index c7026e8..c73440f 100755
--- a/Tomoe/package.json
+++ b/Tomoe/package.json
@@ -1,6 +1,6 @@
{
"name": "Tomoe",
- "version": "2.0.0",
+ "version": "2.0.2",
"description": "Centralized API user platform for Hackathons",
"main": "production.js",
"scripts": {
@@ -8,6 +8,7 @@
"compile": "node ./src/app/build/scripts/compile",
"setup": "npm run generate",
"generate": "node ./build/core",
+ "renew": "node ./build/update",
"build": "npm run clean && cross-env NODE_ENV=production npm run compile",
"start": "node ./build/imports && cross-env NODE_ENV=development node ./src/app/build/scripts/start",
"api": "node ./src/server/index.js",
diff --git a/Tomoe/readme.md b/Tomoe/readme.md
index b274595..f5badc6 100755
--- a/Tomoe/readme.md
+++ b/Tomoe/readme.md
@@ -51,7 +51,7 @@ Access the server and gui locally at:
http://localhost:4925
```
-### Local environmnet variables in development
+### Local environment variables in development
If you do not want to setup environmental variables globally, Tomoe allows you to locally set environmental variables by creating file called `.env` in the root directory of Tomoe
```terminal
@@ -68,6 +68,14 @@ NODE_ENV={Either DEVELOPMENT or PRODUCTIOn}
[⬆ back to top](#table-of-contents)
+### Updating
+In the case of updating to a newer version of Tomoe, please run the following commands after pulling a new repo:
+
+```
+yarn # installs all new pacakges
+yarn renew # updates your tomoe.config.js and databases
+```
+
# Documentation
## Shortcuts
[**Hacker Object**](#the-hacker-object)
diff --git a/Tomoe/src/server/index.js b/Tomoe/src/server/index.js
index 96cd5f0..1f6b5fd 100644
--- a/Tomoe/src/server/index.js
+++ b/Tomoe/src/server/index.js
@@ -1,6 +1,7 @@
const fs = require('fs'),
ENV_PATH = './.env';
const colors = require('colors');
+const checkVersion = require('../../build/util/check-version.js');
// support for local .env files
if(!fs.existsSync(ENV_PATH)){
@@ -11,10 +12,11 @@ if(!fs.existsSync(ENV_PATH)){
if(fs.existsSync('./tomoe.config.js')){
global.TOMOE_CONFIG = require('../../tomoe.config.js').Tomoe;
- require( 'babel-core/register' );
- require('./src/database.js')
- require('./src/server.js');
-
+ checkVersion(function(){
+ require( 'babel-core/register' );
+ require('./src/database.js')
+ require('./src/server.js');
+ })
} else {
console.log(colors.red('\n\nWe cannot find your tomoe.config.js file!'));
console.log(colors.grey('Please install Tomoe before turning on the server by entering the following command:'));