Skip to content

Commit 1fa7a4f

Browse files
Merge pull request #2 from metabase/comments-and-formatting
formatting
2 parents 0548c9e + 932d0fb commit 1fa7a4f

File tree

1 file changed

+80
-58
lines changed

1 file changed

+80
-58
lines changed

index.js

+80-58
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
'use strict'
1+
"use strict";
22

3-
const METABASE_SITE_URL = process.env.METABASE_SITE_URL || "http://localhost:3000";
3+
const METABASE_SITE_URL =
4+
process.env.METABASE_SITE_URL || "http://localhost:3000";
45
const METABASE_JWT_SHARED_SECRET =
56
process.env.METABASE_JWT_SHARED_SECRET ||
67
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
@@ -9,80 +10,94 @@ const mods = 'logo=false&top_nav=false&search=false&new_button=false&side_nav=fa
910
* Module dependencies.
1011
*/
1112

12-
const express = require('express')
13-
const hash = require('pbkdf2-password')()
14-
const path = require('path');
15-
const session = require('express-session');
13+
const express = require("express");
14+
const hash = require("pbkdf2-password")();
15+
const path = require("path");
16+
const session = require("express-session");
1617
const jwt = require("jsonwebtoken");
1718
const url = require("url");
1819

19-
var app = module.exports = express();
20+
var app = (module.exports = express());
2021

2122
// config
2223

23-
app.set('view engine', 'ejs');
24-
app.set('views', path.join(__dirname, 'views'));
24+
app.set("view engine", "ejs");
25+
app.set("views", path.join(__dirname, "views"));
2526

2627
// middleware
2728

28-
app.use(express.urlencoded({ extended: false }))
29-
app.use(session({
30-
resave: false, // don't save session if unmodified
31-
saveUninitialized: false, // don't create session until something stored
32-
secret: 'shhhh, very secret'
33-
}));
29+
app.use(express.urlencoded({ extended: false }));
30+
app.use(
31+
session({
32+
resave: false, // don't save session if unmodified
33+
saveUninitialized: false, // don't create session until something stored
34+
secret: "shhhh, very secret",
35+
})
36+
);
3437

3538
// Session-persisted message middleware
3639

37-
app.use(function(req, res, next){
40+
app.use(function (req, res, next) {
3841
var err = req.session.error;
3942
var msg = req.session.success;
4043
delete req.session.error;
4144
delete req.session.success;
42-
res.locals.message = '';
43-
if (err) res.locals.message = '<p class="msg error">' + err + '</p>';
44-
if (msg) res.locals.message = '<p class="msg success">' + msg + '</p>';
45+
res.locals.message = "";
46+
if (err) res.locals.message = '<p class="msg error">' + err + "</p>";
47+
if (msg) res.locals.message = '<p class="msg success">' + msg + "</p>";
4548
next();
4649
});
4750

4851
// dummy database
4952

5053
var users = [
51-
{ firstName: 'Rene', lastName: 'Mueller', email: '[email protected]', accountId: 28, accountName: 'Customer-Acme' },
52-
{ firstName: 'Cecilia', lastName: 'Stark', email: '[email protected]', accountId: 132, accountName: 'Customer-Fake'}
54+
{
55+
firstName: "Rene",
56+
lastName: "Mueller",
57+
58+
accountId: 28,
59+
accountName: "Customer-Acme",
60+
},
61+
{
62+
firstName: "Cecilia",
63+
lastName: "Stark",
64+
65+
accountId: 132,
66+
accountName: "Customer-Fake",
67+
},
5368
];
5469

5570
// when you create a user, generate a salt
5671
// and hash the password ('foobar' is the pass here)
5772

58-
hash({ password: 'foobar' }, function (err, pass, salt, hash) {
73+
hash({ password: "foobar" }, function (err, pass, salt, hash) {
5974
if (err) throw err;
6075
// store the salt & hash in the "db"
6176
users.forEach((element) => {
62-
element.salt = salt;
63-
element.hash = hash;
64-
});
77+
element.salt = salt;
78+
element.hash = hash;
79+
});
6580
});
6681

6782
function findUserbyEmail(email) {
68-
var u = users.find(u => u.email === email);
83+
var u = users.find((u) => u.email === email);
6984
return u;
7085
}
7186

7287
// Authenticate using our plain-object database of doom!
7388

7489
function authenticate(email, pass, fn) {
75-
if (!module.parent) console.log('authenticating %s:%s', email, pass);
90+
if (!module.parent) console.log("authenticating %s:%s", email, pass);
7691
var user = findUserbyEmail(email);
7792
// query the db for the given email
78-
if (!user) return fn(null, null)
93+
if (!user) return fn(null, null);
7994
// apply the same algorithm to the POSTed password, applying
8095
// the hash against the pass / salt, if there is a match we
8196
// found the user
8297
hash({ password: pass, salt: user.salt }, function (err, pass, salt, hash) {
8398
if (err) return fn(err);
84-
if (hash === user.hash) return fn(null, user)
85-
fn(null, null)
99+
if (hash === user.hash) return fn(null, user);
100+
fn(null, null);
86101
});
87102
}
88103

@@ -91,12 +106,12 @@ function restrict(req, res, next) {
91106
next();
92107
} else {
93108
req.session.returnTo = req.originalUrl;
94-
req.session.error = 'Access denied!';
95-
res.redirect('/login');
109+
req.session.error = "Access denied!";
110+
res.redirect("/login");
96111
}
97112
}
98113

99-
const signUserToken = user =>
114+
const signUserToken = (user) =>
100115
jwt.sign(
101116
{
102117
email: user.email,
@@ -109,52 +124,59 @@ const signUserToken = user =>
109124
METABASE_JWT_SHARED_SECRET
110125
);
111126

112-
app.get('/', function(req, res){
113-
res.redirect('/analytics');
127+
app.get("/", function (req, res) {
128+
res.redirect("/analytics");
114129
});
115130

116-
app.get('/analytics', restrict, function(req, res){
117-
// replace ID "1" with the ID number in the path of your dashboard in Metabase.
118-
const METABASE_DASHBOARD_PATH = "/dashboard/1"
131+
app.get("/analytics", restrict, function (req, res) {
132+
// replace ID "1" with the ID number in the path of your dashboard in Metabase.
133+
const METABASE_DASHBOARD_PATH = "/dashboard/1";
119134
var iframeUrl = `/sso/metabase?return_to=${METABASE_DASHBOARD_PATH}`;
120-
res.send(`<iframe src="${iframeUrl}" frameborder="0" width="1280" height="1000" allowtransparency></iframe>`);
135+
res.send(
136+
`<iframe src="${iframeUrl}" frameborder="0" width="1280" height="1000" allowtransparency></iframe>`
137+
);
121138
});
122139

123-
app.get('/logout', function(req, res){
140+
app.get("/logout", function (req, res) {
124141
// destroy the user's session to log them out
125142
// will be re-created next request
126-
req.session.destroy(function(){
127-
res.redirect('/');
143+
req.session.destroy(function () {
144+
res.redirect("/");
128145
});
129146
});
130147

131-
app.get('/login', function(req, res){
132-
res.render('login');
148+
app.get("/login", function (req, res) {
149+
res.render("login");
133150
});
134151

135-
app.post('/login', function (req, res, next) {
136-
authenticate(req.body.email, req.body.password, function(err, user){
137-
if (err) return next(err)
152+
app.post("/login", function (req, res, next) {
153+
authenticate(req.body.email, req.body.password, function (err, user) {
154+
if (err) return next(err);
138155
if (user) {
139156
// Regenerate session when signing in
140157
// to prevent fixation
141158
var returnTo = req.session.returnTo;
142-
req.session.regenerate(function(){
159+
req.session.regenerate(function () {
143160
// Store the user's primary key
144161
// in the session store to be retrieved,
145162
// or in this case the entire user object
146163
req.session.user = user;
147-
req.session.success = 'Authenticated as ' + user.firstName + '' + user.lastName
148-
+ ' click to <a href="/logout">logout</a>. '
149-
+ ' click to access <a href="/analytics">analytics</a>';
150-
res.redirect(returnTo || '/');
164+
req.session.success =
165+
"Authenticated as " +
166+
user.firstName +
167+
"" +
168+
user.lastName +
169+
' click to <a href="/logout">logout</a>. ' +
170+
' click to access <a href="/analytics">analytics</a>';
171+
res.redirect(returnTo || "/");
151172
delete req.session.returnTo;
152173
});
153174
} else {
154-
req.session.error = 'Authentication failed, please check your '
155-
+ ' email and password.'
156-
+ ' (use "[email protected]" or "[email protected]" and password "foobar")';
157-
res.redirect('/login');
175+
req.session.error =
176+
"Authentication failed, please check your " +
177+
" email and password." +
178+
' (use "[email protected]" or "[email protected]" and password "foobar")';
179+
res.redirect("/login");
158180
}
159181
});
160182
});
@@ -165,8 +187,8 @@ app.get("/sso/metabase", restrict, (req, res) => {
165187
pathname: `${METABASE_SITE_URL}/auth/sso`,
166188
query: {
167189
jwt: signUserToken(req.session.user),
168-
return_to: `${req.query.return_to || '/'}?${mods}`
169-
}
190+
return_to: `${req.query.return_to || "/"}?${mods}`,
191+
},
170192
})
171193
);
172194
});

0 commit comments

Comments
 (0)