use ESM, add server setup, cleanup
Change-Id: Iafac35c2082523ae98c31017d9bad5c4d6e18ef3
diff --git a/client/src/pages/loginDialog.jsx b/client/src/pages/loginDialog.jsx
index 93f9f59..4e15ae1 100644
--- a/client/src/pages/loginDialog.jsx
+++ b/client/src/pages/loginDialog.jsx
@@ -105,7 +105,7 @@
submitted: true,
loading: true
})
- authManager.authenticate()
+ authManager.authenticate('admin', 'admin')
/*fetch('/api/localLogin?username=none&password=none', {
header: { "Content-Type": "application/json" },
method: "POST",
diff --git a/client/src/pages/serverSetup.jsx b/client/src/pages/serverSetup.jsx
new file mode 100644
index 0000000..70f9342
--- /dev/null
+++ b/client/src/pages/serverSetup.jsx
@@ -0,0 +1,85 @@
+import React, { useState } from 'react';
+import { useHistory } from "react-router-dom";
+
+import { Box, Container, Fab, Card, CardContent, Typography, Input } from '@material-ui/core';
+import GroupAddRounded from '@material-ui/icons/GroupAddRounded';
+import { makeStyles } from '@material-ui/core/styles';
+import authManager from '../AuthManager'
+
+const useStyles = makeStyles((theme) => ({
+ root: {
+ '& > *': {
+ margin: theme.spacing(1),
+ },
+ },
+ extendedIcon: {
+ marginRight: theme.spacing(1),
+ },
+ wizardCard: {
+ borderRadius: 8,
+ maxWidth: 360,
+ margin: "16px auto"
+ }, textField: {
+ margin: theme.spacing(1),
+ }
+}))
+
+export default function ServerSetup(props) {
+ const classes = useStyles()
+ const history = useHistory();
+ const [password, setPassword] = useState('');
+ const [passwordRepeat, setPasswordRepeat] = useState('');
+
+ const isValid = () => password && password === passwordRepeat
+
+ const handleSubmit = async e => {
+ e.preventDefault()
+ if (!isValid())
+ return
+ if (await authManager.setup(password)) {
+ history.replace('/')
+ }
+ }
+
+ return (
+ <Container className='message-list'>
+ <Card className={classes.wizardCard}>
+ <CardContent component="form" onSubmit={handleSubmit}>
+ <Typography gutterBottom variant="h5" component="h2">
+ Jami Web Node setup
+ </Typography>
+ <Typography variant="body2" color="textSecondary" component="p">
+ Welcome to the Jami web node setup.<br/>
+ Let's start by creating a new administrator account to control access to the server configuration.
+ </Typography>
+
+ <Typography variant='body1'></Typography>
+ <div><Input className={classes.textField} value="admin" name="username" autoComplete="username" disabled /></div>
+ <div><Input
+ className={classes.textField}
+ value={password}
+ onChange={e => setPassword(e.target.value)}
+ name="password"
+ type='password'
+ placeholder="New password"
+ autoComplete="new-password" />
+ </div>
+ <div><Input
+ className={classes.textField}
+ value={passwordRepeat}
+ onChange={e => setPasswordRepeat(e.target.value)}
+ name="password"
+ error={!!passwordRepeat && !isValid()}
+ type='password'
+ placeholder="Repeat password"
+ autoComplete="new-password" /></div>
+ <Box style={{ textAlign: 'center', marginTop: 16 }}>
+ <Fab variant='extended' color='primary' type='submit' disabled={!isValid()}>
+ <GroupAddRounded className={classes.extendedIcon} />
+ Create admin account
+ </Fab>
+ </Box>
+ </CardContent>
+ </Card>
+ </Container>)
+}