/
server.js
executable file
·129 lines (105 loc) · 3.26 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
'use strict';
var loopback = require('loopback');
var boot = require('loopback-boot');
var app = module.exports = loopback();
app.use(function(req, res, next) {
res.setHeader('X-Powered-By', 'zoof');
res.removeHeader('Vary');
next();
});
// Passport configurators..
var loopbackPassport = require('loopback-component-passport');
var PassportConfigurator = loopbackPassport.PassportConfigurator;
var passportConfigurator = new PassportConfigurator(app);
// attempt to build the providers/passport config
var config = {};
try {
config = require('../providers.json');
} catch (err) {
console.trace(err);
process.exit(1); // fatal
}
// Set up the /favicon.ico
app.use(loopback.favicon());
// request pre-processing middleware
app.use(loopback.compress());
// -- Add your pre-processing middleware here --
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
// boot scripts mount components like REST API
boot(app, __dirname);
app.use(loopback.cookieParser(app.get('cookieSecret')));
app.use(loopback.session({
secret: app.get('cookieSecret'),
saveUninitialized: true,
resave: true
}));
passportConfigurator.init();
passportConfigurator.setupModels({
userModel: app.models.user,
userIdentityModel: app.models.userIdentity,
userCredentialModel: app.models.userCredential
});
for (var s in config) {
if (config.hasOwnProperty(s)) {
var c = config[s];
c.session = c.session !== false;
passportConfigurator.configureProvider(s, c);
}
}
var ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn;
app.get('/auth/account', ensureLoggedIn('/'), function(req, res, next) {
console.log('Logged in', req.user)
res.redirect('/');
});
app.get('/auth/current', function(req, res, next) {
if (!req.isAuthenticated || !req.isAuthenticated()) {
return res.status(200).json({});
}
//poor man's copy
var ret = JSON.parse(JSON.stringify(req.user));
delete ret.password;
res.status(200).json(ret);
});
/*
app.get('/link/account', ensureLoggedIn('/auth/google'), function(req, res, next) {
res.render('linkedAccounts', {user: req.user});
});
*/
app.get('/auth/logout', function(req, res, next) {
req.logout();
res.redirect('/');
console.log('Logged out', req.user)
});
// -- Mount static files here--
// All static middleware should be registered at the end, as all requests
// passing the static middleware are hitting the file system
// Example:
var path = require('path');
app.use(loopback.static(path.resolve(__dirname, '../client/www')));
// Requests that get this far won't be handled
// by any middleware. Convert them into a 404 error
// that will be handled later down the chain.
app.use(loopback.urlNotFound());
// The ultimate error handler.
app.use(loopback.errorHandler());
app.start = function() {
// start the web server
return app.listen(function() {
app.emit('started');
console.log('Web server listening at: %s', app.get('url'));
app.models.user.create({
email: 'foo@bar.com',
password: '123456',
name: {givenName: 'Joseph', familyName: 'Toblerone'}
});
app.models.Animal.create({
species:'Dog'
})
//console.log(require('util').inspect(app.models.Animal, false, 0));
});
};
// start the server if `$ node server.js`
if (require.main === module) {
app.start();
}