Skip to content

Commit ef28343

Browse files
committed
Improve cors and server error handling, #31
1 parent c6c5fb2 commit ef28343

7 files changed

Lines changed: 28 additions & 22 deletions

File tree

client/.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@
2121
npm-debug.log*
2222
yarn-debug.log*
2323
yarn-error.log*
24-
.firebase
24+
.firebase
25+
firebase.config.dev.js
26+
firebase.config.prod.js

server/.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
ALLOWED_ORIGINS=http://localhost,http://mywebsite.com,http://yourwebsite.com
1+
ALLOWED_ORIGINS=http://localhost,http://localhost:3000,http://mywebsite.com,http://yourwebsite.com
22
FIREBASE_SERVICE_ACC=YOUR-FIREBASE-PROJ-SERVICE-ACCOUNT-JSON-CREDENTIALS-ONE-LINER-NO-SPACES
33
FIREBASE_PRIVATE_KEY=PRIVATE-KEY-FROM-FIREBASE-SERVICE-ACCOUNT-JSON-WITH-DOUBLE-QUOTES
44
EMAIL_WHITELIST=[email protected]

server/.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
node_modules/
2+
src/public/
23
.env
4+
.env.dev
5+
.env.prod
36
.vscode
4-
src/public/

server/src/controllers/user.js

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,8 @@ const {
66
listusers
77
} = require('../classes/user')
88

9-
const { EMAIL_WHITELIST } = require('../utils/constants')
10-
11-
module.exports.createUser = async (req, res) => {
9+
module.exports.createUser = async (req, res, next) => {
1210
const { email, displayname, account_level, emailverified, disabled } = req.body
13-
1411
if (!email || !displayname || !account_level) {
1512
return res.status(500).send('Missing parameter/s.')
1613
}
@@ -22,12 +19,12 @@ module.exports.createUser = async (req, res) => {
2219

2320
return res.status(200).json(user)
2421
} catch (err) {
25-
return res.status(500).send(err.message)
22+
next(new Error(err))
2623
}
2724
}
2825

2926
// Update a user's information by email or UID
30-
module.exports.updateUser = async (req, res) => {
27+
module.exports.updateUser = async (req, res, next) => {
3128
const { uid } = req.body
3229

3330
if (!uid) {
@@ -38,12 +35,12 @@ module.exports.updateUser = async (req, res) => {
3835
const user = await updateuser(req.body)
3936
return res.status(200).json(user)
4037
} catch (err) {
41-
return res.status(500).send(err.message)
38+
next(new Error(err))
4239
}
4340
}
4441

4542
// Delete a user by UID
46-
module.exports.deleteUser = async (req, res) => {
43+
module.exports.deleteUser = async (req, res, next) => {
4744
const { uid } = req.params
4845

4946
if (!uid) {
@@ -56,12 +53,12 @@ module.exports.deleteUser = async (req, res) => {
5653
message: `User ${uid} deleted.`
5754
})
5855
} catch (err) {
59-
return res.status(500).send(err.message)
56+
next(new Error(err))
6057
}
6158
}
6259

6360
// Get user information by user's email or UID
64-
module.exports.getUser = async (req, res) => {
61+
module.exports.getUser = async (req, res, next) => {
6562
const { uid, email } = req.query
6663

6764
if (!uid && !email) {
@@ -72,16 +69,16 @@ module.exports.getUser = async (req, res) => {
7269
const user = await getuser({ uid, email })
7370
return res.status(200).json(user)
7471
} catch (err) {
75-
return res.status(500).send(err.message)
72+
next(new Error(err))
7673
}
7774
}
7875

7976
// List all users
80-
module.exports.listUsers = async (req, res) => {
77+
module.exports.listUsers = async (req, res, next) => {
8178
try {
8279
const users = await listusers()
8380
return res.status(200).json(users)
8481
} catch (err) {
85-
return res.status(500).send(err.message)
82+
next(new Error(err))
8683
}
8784
}

server/src/index.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,22 @@ const app = express()
66
const PORT = process.env.PORT || 3001
77

88
const controllers = require('./controllers')
9-
const { whitelist } = require('./utils/whitelist-cors')
9+
const { corsOptions } = require('./utils/whitelist-cors')
1010

1111
app.use(express.json())
1212
app.use(express.urlencoded({ extended: false }))
1313
app.use(cookieParser())
1414
app.use(express.static(path.resolve(__dirname, 'public')))
15-
app.use(cors({
16-
origin: whitelist
17-
}))
15+
app.use(cors(corsOptions))
1816

1917
app.use('/api', controllers)
2018

2119
app.get('*', (req, res) => {
22-
res.sendFile(path.resolve(__dirname, 'public', 'index.html'))
20+
return res.sendFile(path.resolve(__dirname, 'public', 'index.html'))
21+
})
22+
23+
app.use((err, req, res, next) => {
24+
res.status(500).send(err.message)
2325
})
2426

2527
app.listen(PORT, () => {

server/src/utils/templates/header.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ password: 123456789
1919

2020
- [firebase-auth-users](https://github.com/ciatph/firebase-users-admin) (GitHub repo)
2121
- [Firebase Authentication](https://firebase.google.com/docs/auth)
22-
- [Firebase Admin](https://firebase.google.com/docs/admin/setup)
22+
- Firebase Admin SDK
23+
- [set-up](https://firebase.google.com/docs/admin/setup)
24+
- [manage users](https://firebase.google.com/docs/auth/admin/manage-users)

server/src/utils/whitelist-cors.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const corsOptions = {
1010
callback(new Error('Not allowed by CORS.'))
1111
}
1212
},
13+
methods: ['GET', 'PUT', 'POST', 'DELETE', 'HEAD', 'PATCH'],
1314
optionsSuccessStatus: 200
1415
}
1516

0 commit comments

Comments
 (0)