Skip to content

Commit

Permalink
fix up formatting; add lots of stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
smithy545 committed Jul 21, 2016
1 parent 71a0da0 commit d67fe1c
Show file tree
Hide file tree
Showing 18 changed files with 336 additions and 73 deletions.
7 changes: 6 additions & 1 deletion app.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ var bodyParser = require('body-parser');
var passport = require('passport');
var mongoose = require('mongoose');
var flash = require('connect-flash');
var mongo_express = require('mongo-express/lib/middleware');

var app = express();

Expand All @@ -25,6 +26,7 @@ app.use(express.static(path.join(__dirname, 'public')));

// DB setup
require('./config/database.js')(mongoose);
var mongo_express_config = require('./config/admin.js');

// Auth setup
require('./config/passport')(passport);
Expand All @@ -38,12 +40,15 @@ app.use('/', require('./routes/index'));
app.use('/profile', require('./routes/profile'));
app.use('/reu', require('./routes/reu'));
app.use('/apps', require('./routes/application'));
app.use('/admin', require('./routes/admin'));
app.use('/db', mongo_express(mongo_express_config));


// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
res.render('404', {});
});

// error handlers
Expand Down
160 changes: 160 additions & 0 deletions config/admin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
'use strict';

var mongo;
var url = require('url');

if (typeof process.env.MONGODB_PORT === 'string') {
var mongoConnection = url.parse(process.env.MONGODB_PORT);
process.env.ME_CONFIG_MONGODB_SERVER = mongoConnection.hostname;
process.env.ME_CONFIG_MONGODB_PORT = mongoConnection.port;
}

// Accesing Bluemix variable to get MongoDB info
if (process.env.VCAP_SERVICES) {
var dbLabel = 'mongodb-2.4';
var env = JSON.parse(process.env.VCAP_SERVICES);
if (env[dbLabel]) {
mongo = env[dbLabel][0].credentials;
}
} else {
mongo = {
db: 'reuapp',
host: 'localhost',
password: '',
port: 27017,
ssl: false,
url: 'mongodb://localhost:27017/reuapp',
username: '',
};
}

module.exports = {
mongodb: {
server: process.env.ME_CONFIG_MONGODB_SERVER || mongo.host,
port: process.env.ME_CONFIG_MONGODB_PORT || mongo.port,

//ssl: connect to the server using secure SSL
ssl: process.env.ME_CONFIG_MONGODB_SSL || mongo.ssl,

//sslValidate: validate mongod server certificate against CA
sslValidate: process.env.ME_CONFIG_MONGODB_SSLVALIDATE || true,

//sslCA: array of valid CA certificates
sslCA: [],

//autoReconnect: automatically reconnect if connection is lost
autoReconnect: true,

//poolSize: size of connection pool (number of connections to use)
poolSize: 4,

//set admin to true if you want to turn on admin features
//if admin is true, the auth list below will be ignored
//if admin is true, you will need to enter an admin username/password below (if it is needed)
admin: process.env.ME_CONFIG_MONGODB_ENABLE_ADMIN ? process.env.ME_CONFIG_MONGODB_ENABLE_ADMIN.toLowerCase() === 'true' : false,

// >>>> If you are using regular accounts, fill out auth details in the section below
// >>>> If you have admin auth, leave this section empty and skip to the next section
auth: [
/*
* Add the name, username, and password of the databases you want to connect to
* Add as many databases as you want!
*/
{
database: process.env.ME_CONFIG_MONGODB_AUTH_DATABASE || mongo.db,
username: process.env.ME_CONFIG_MONGODB_AUTH_USERNAME || mongo.username,
password: process.env.ME_CONFIG_MONGODB_AUTH_PASSWORD || mongo.password,
},
],

// >>>> If you are using an admin mongodb account, or no admin account exists, fill out section below
// >>>> Using an admin account allows you to view and edit all databases, and view stats

//leave username and password empty if no admin account exists
adminUsername: process.env.ME_CONFIG_MONGODB_ADMINUSERNAME || '',
adminPassword: process.env.ME_CONFIG_MONGODB_ADMINPASSWORD || '',

//whitelist: hide all databases except the ones in this list (empty list for no whitelist)
whitelist: [],

//blacklist: hide databases listed in the blacklist (empty list for no blacklist)
blacklist: [],
},

site: {
// baseUrl: the URL that mongo express will be located at - Remember to add the forward slash at the start and end!
baseUrl: process.env.ME_CONFIG_SITE_BASEURL || '/',
cookieKeyName: 'mongo-express',
cookieSecret: process.env.ME_CONFIG_SITE_COOKIESECRET || 'cookiesecret',
host: process.env.VCAP_APP_HOST || 'localhost',
port: process.env.VCAP_APP_PORT || 8081,
requestSizeLimit: process.env.ME_CONFIG_REQUEST_SIZE || '50mb',
sessionSecret: process.env.ME_CONFIG_SITE_SESSIONSECRET || 'sessionsecret',
sslCert: process.env.ME_CONFIG_SITE_SSL_CRT_PATH || '',
sslEnabled: process.env.ME_CONFIG_SITE_SSL_ENABLED || false,
sslKey: process.env.ME_CONFIG_SITE_SSL_KEY_PATH || '',
},

//set useBasicAuth to true if you want to authehticate mongo-express loggins
//if admin is false, the basicAuthInfo list below will be ignored
//this will be true unless ME_CONFIG_BASICAUTH_USERNAME is set and is the empty string
useBasicAuth: process.env.ME_CONFIG_BASICAUTH_USERNAME !== '',

basicAuth: {
username: process.env.ME_CONFIG_BASICAUTH_USERNAME || 'admin',
password: process.env.ME_CONFIG_BASICAUTH_PASSWORD || 'pass',
},

options: {
// Display startup text on console
console: true,

//documentsPerPage: how many documents you want to see at once in collection view
documentsPerPage: 10,

//editorTheme: Name of the theme you want to use for displaying documents
//See http://codemirror.net/demo/theme.html for all examples
editorTheme: process.env.ME_CONFIG_OPTIONS_EDITORTHEME || 'rubyblue',

// Maximum size of a single property & single row
// Reduces the risk of sending a huge amount of data when viewing collections
maxPropSize: (100 * 1000), // default 100KB
maxRowSize: (1000 * 1000), // default 1MB

//The options below aren't being used yet

//cmdType: the type of command line you want mongo express to run
//values: eval, subprocess
// eval - uses db.eval. commands block, so only use this if you have to
// subprocess - spawns a mongo command line as a subprocess and pipes output to mongo express
cmdType: 'eval',

//subprocessTimeout: number of seconds of non-interaction before a subprocess is shut down
subprocessTimeout: 300,

//readOnly: if readOnly is true, components of writing are not visible.
readOnly: false,

//collapsibleJSON: if set to true, jsons will be displayed collapsible
collapsibleJSON: true,

//collapsibleJSONDefaultUnfold: if collapsibleJSON is set to `true`, this defines default level
// to which JSONs are displayed unfolded; use number or "all" to unfold all levels
collapsibleJSONDefaultUnfold: 1,
},

// Specify the default keyname that should be picked from a document to display in collections list.
// Keynames can be specified for every database and collection.
// If no keyname is specified, it defaults to '_id', which is a mandatory field.
// For Example :
// defaultKeyNames{
// "world_db":{ //Database Name
// "continent":"cont_name", // collection:field
// "country":"country_name",
// "city":"name"
// }
// }
defaultKeyNames: {

},
};
6 changes: 2 additions & 4 deletions models/application.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
var mongoose = require('mongoose');

var appSchema = mongoose.Schema({
name: String,
location: String,
school: String,
professors: [String],
reuId: String,
status: String,
name: String,
});

module.exports = mongoose.model('Application', appSchema);
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"express": "~4.13.4",
"express-session": "^1.14.0",
"jade": "~1.11.0",
"mongo-express": "^0.30.59",
"mongoose": "^4.5.3",
"morgan": "~1.7.0",
"passport": "^0.3.2",
Expand Down
12 changes: 10 additions & 2 deletions public/stylesheets/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,14 @@ a {
padding: 10px;
}

a.topbar-name {
float: right;
ul.reu-info {
list-style: none;
}

ul.sb-select {
width: 100%;
}

ul.sb-select li{
width: 100%;
}
15 changes: 15 additions & 0 deletions routes/admin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
var express = require('express');
var mongo_express = require('mongo-express/lib/middleware');
var mongo_express_config = require('../config/admin.js');

var User = require('../models/user');
var Application = require('../models/application');
var REU = require('../models/reu');

var admin = express.Router();

admin.use('/', function(req, res, next) {
res.redirect('/db');
});

module.exports = admin;
32 changes: 31 additions & 1 deletion routes/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ var express = require('express');

var User = require('../models/user');
var Application = require('../models/application');
var REU = require('../models/reu');

var apps = express.Router();

apps.get('/', function(req, res) {
//console.log(req.user);
var ctx = {
user: req.user,
tb_highlighted: 'apps',
Expand All @@ -24,4 +24,34 @@ apps.get('/', function(req, res) {
});
});

apps.post('/apply', function(req, res) {
var id = req.body.reu;
User.findById(req.user._id, function(err, user) {
if(err) throw err;
REU.findById(id, function(err, reu) {
if(err) throw err;
Application.find({reuId: id}, function(err, apps) {
if(err) throw err;

var app;
if(apps.length > 0) {
app = apps[0];
} else {
ctx.flash = { type: 'success', message: 'New application created!'};
app = new Application({
reuId: id,
status: "unsubmitted",
name: reu.name,
});
app.save();
user.applications.push(app._id);
user.save();
}

res.redirect('/apps');
});
});
});
});

module.exports = apps;
3 changes: 2 additions & 1 deletion routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ router.get('/home', function(req, res) {
User.findById(req.user._id, function(err, user) {
if(err) throw err;
Application.find({
'_id': { $in: user.applications }
'_id': { $in: user.applications },
'status': { $ne : "unsubmitted" },
}, function(err, apps) {
if(err) throw err;
ctx.applications = apps;
Expand Down
1 change: 1 addition & 0 deletions routes/profile.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ profile.post('/edit', function(req, res) {
}

user.save();
ctx.user = user;
ctx.flash = { type: 'success', message: "Profile updated successfully!" };
res.render('profile/edit', ctx);
});
Expand Down
24 changes: 17 additions & 7 deletions routes/reu.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,16 @@ reu.get('/', function(req, res) {
user: req.user,
tb_highlighted: 'reu',
};
res.render('reu/search', ctx);

REU.find({}, function(err, reus) {
if(err) {
console.log(err);
ctx.results = [];
return res.render('reu/search', ctx);
}
ctx.results = reus;
return res.render('reu/search', ctx);
});
});

reu.post('/search', function(req, res) {
Expand All @@ -19,13 +28,14 @@ reu.post('/search', function(req, res) {
tb_highlighted: 'reu',
};

var searchRXP = new RegExp(req.body.reu_search_info);
var searchRXP = new RegExp(req.body.reu_search_info, 'i');

REU.find({
name: searchRXP,
school: searchRXP,
location: searchRXP,
professors: searchRXP
REU.find({ $or:[
{'name': searchRXP},
{'school': searchRXP},
{'location': searchRXP},
{'professors': searchRXP}
]
}, function(err, reus) {
if(err) {
console.log(err);
Expand Down
1 change: 1 addition & 0 deletions views/404.jade
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
p 404 bitches
27 changes: 22 additions & 5 deletions views/application/view.jade
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,33 @@ extends ../layout
block title
title Applications

block sidemenu
- if(applications.length !== 0) {
nav.sb-nav.navbar.navbar-light
span.sb-header Applications
ul.nav.navbar-nav.sb-select
- var i = 0
each app in applications
- i++
li
a(href="#app#{i}") #{app.name}
- }
block content
ul.application-list
- if(applications.length == 0) {
p You have no current applications
a(href="/reu") Click here to search for new Research Experience opportunites
- } else {
ul.application-list
- var i = 0
each app in applications
- if(app.status != "unsubmitted"){
li
p= app
- i++
- if(typeof(active) !== 'undefined' && active === app._id) {
div.content-container(id="app#{i}")
p= app.name
- } else if(typeof(active) === 'undefined' && i === 1) {
div.content-container(id="app#{i}")
p= app.name
- } else {
div.content-container(id="app#{i}" hidden)
p= app.name
- }
- }
Loading

0 comments on commit d67fe1c

Please sign in to comment.