Skip to content

Commit 8e8aebc

Browse files
authored
Merge pull request #32 from ciatph/dev
v1.0.8
2 parents 14ccf84 + ef28343 commit 8e8aebc

12 files changed

Lines changed: 46 additions & 60 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

client/src/App.js

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,10 @@ function App (props) {
1616
<Routes>
1717
{routes.filter(route => route.component)
1818
.map(({ path, isProtected, component: Component }, idx) => {
19-
const SettledRoute = () => {
20-
if (isProtected) {
21-
return <PrivateRoute
22-
Component={Component}
23-
isProtected={isProtected}
24-
idx={idx}
25-
{...props}
26-
/>
27-
} else {
28-
return <PublicRoute
29-
Component={Component}
30-
idx={idx}
31-
path={path}
32-
{...props}
33-
/>
34-
}
35-
}
36-
37-
return <Route
38-
key={idx}
39-
path={path}
40-
element={SettledRoute()}
41-
/>
19+
const FinalRoute = (isProtected)
20+
? <PrivateRoute idx={idx} Component={Component} {...props} />
21+
: <PublicRoute idx={idx} Component={Component} path={path} {...props} />
22+
return <Route key={idx} path={path} element={FinalRoute} />
4223
})}
4324
</Routes>
4425
</Router>

client/src/components/dashboard/index.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ function Dashboard ({ currentUser, users, loadstatus, onBtnClick, onBtnEditClick
5959
}
6060
</span>
6161
</div>
62-
<Box>
62+
<Box sx={styles.buttons}>
6363
<Button
6464
variant='contained'
6565
size='small'
@@ -68,7 +68,6 @@ function Dashboard ({ currentUser, users, loadstatus, onBtnClick, onBtnEditClick
6868
>Delete</Button>
6969

7070
<Button
71-
sx={styles.buttons}
7271
variant='contained'
7372
size='small'
7473
disabled={loadstatus.isLoading}

client/src/components/dashboard/styles.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ const styles = {
55
cardcontent: {
66
width: '100%',
77
display: 'flex',
8+
flexDirection: {
9+
xs: 'column',
10+
sm: 'row'
11+
},
812
justifyContent: 'space-between',
913
'& span': {
1014
fontSize: '14px'
@@ -13,8 +17,10 @@ const styles = {
1317
buttons: {
1418
display: 'flex',
1519
flexDirection: 'column',
16-
marginTop: (theme) => theme.spacing(1),
17-
width: '100%'
20+
gap: (theme) => theme.spacing(1),
21+
'& button': {
22+
width: '100%'
23+
}
1824
}
1925
}
2026

client/src/containers/routes/privateroute/index.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,19 @@ import { Navigate } from 'react-router-dom'
33

44
// Redirect protected routes to /login if no user auth data is available
55
// Display the protected routes if user auth data is available
6-
function PrivateRoute ({ Component, isProtected, idx, ...props }) {
6+
function PrivateRoute ({ Component, idx, ...props }) {
77
if (!props.currentUser) {
8-
return <Navigate
9-
key={idx}
8+
return <Navigate key={idx}
109
to={{
1110
pathname: '/login',
1211
state: { from: props.location }
1312
}} />
14-
} else {
15-
return <Component {...props} />
1613
}
14+
return <Component {...props} />
1715
}
1816

1917
PrivateRoute.propTypes = {
2018
Component: PropTypes.elementType,
21-
isProtected: PropTypes.bool,
2219
idx: PropTypes.number,
2320
currentUser: PropTypes.object,
2421
location: PropTypes.object

client/src/containers/routes/publicroute/index.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,15 @@ import { Navigate } from 'react-router-dom'
66
function PublicRoute ({ Component, idx, path, ...props }) {
77
if (props.currentUser) {
88
if (['/login'].includes(path)) {
9-
return <Navigate
10-
key={idx}
9+
return <Navigate key={idx}
1110
to={{
1211
pathname: '/dashboard',
1312
state: { from: props.location }
1413
}} />
15-
} else {
16-
return <Component {...props} />
1714
}
18-
} else {
1915
return <Component {...props} />
2016
}
17+
return <Component {...props} />
2118
}
2219

2320
PublicRoute.propTypes = {

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, () => {

0 commit comments

Comments
 (0)