Browse Source

Add ability to add new users for root

ghorsington 5 years ago
parent
commit
353bc0cb11
3 changed files with 66 additions and 21 deletions
  1. 9 2
      controllers/authController.js
  2. 56 1
      public/js/dashboard.js
  3. 1 18
      views/dashboard.handlebars

+ 9 - 2
controllers/authController.js

@@ -31,7 +31,13 @@ authController.verify = async (req, res, next) => {
 };
 
 authController.register = async (req, res, next) => {
-	if (config.enableUserAccounts === false) {
+	const currentUser = await utils.getUser(req);
+
+	if(currentUser && currentUser.username != 'root') {
+		return res.json({ success: false, description: 'Non-root users cannot create more accounts!' });
+	}
+
+	if (config.enableUserAccounts === false && !currentUser) {
 		return res.json({ success: false, description: 'Register is disabled at the moment' });
 	}
 
@@ -68,7 +74,8 @@ authController.register = async (req, res, next) => {
 };
 
 authController.changePassword = async (req, res, next) => {
-	const user = await utils.authorize(req, res);
+	const {user, response} = await utils.authorize(req, res);
+	if(!user) return response;
 
 	let password = req.body.password;
 	if (password === undefined) return res.json({ success: false, description: 'No password provided' });

+ 56 - 1
public/js/dashboard.js

@@ -49,7 +49,8 @@ panel.verifyToken = function(token, reloadOnError){
 
 panel.prepareDashboard = function(){
 	panel.page = document.getElementById('page');
-	document.getElementById('auth').style.display = 'none';
+	
+	if(panel.username != 'root') document.getElementById('itemUserAdd').style.display = 'none';
 	document.getElementById('dashboard').style.display = 'block';
 
 	document.getElementById('itemUploads').addEventListener('click', function(){
@@ -544,6 +545,60 @@ panel.getNewToken = function(){
 
 };
 
+panel.addUser = function(){
+	panel.page.innerHTML = '';
+	var container = document.createElement('div');
+	container.className = "container";
+	container.innerHTML = `
+		<h2 class="subtitle">Add a new user</h2>
+
+		<label class="label">Username</label>
+		<p class="control has-addons">
+			<input id="user" class="input is-expanded" type="text" placeholder="Username">
+		</p>
+		<label class="label">Password</label>
+		<p class="control has-addons">
+			<input id="pass" class="input is-expanded" type="password" placeholder="Password">
+			<a id="sendAddUser" class="button is-primary">Add user</a>
+		</p>
+	`;
+
+	panel.page.appendChild(container);
+
+	document.getElementById('sendAddUser').addEventListener('click', function(){
+		var user = document.getElementById('user').value;
+		var pass = document.getElementById('pass').value;
+
+		if(user === undefined || user === null || user === '')
+			return swal('Error', 'You need to specify a username', 'error');
+		if(pass === undefined || pass === null || pass === '')
+			return swal('Error', 'You need to specify a username', 'error');
+
+		axios.post('/api/register', {
+			username: user,
+			password: pass
+		})
+		.then(function (response) {
+
+			if(response.data.success === false)
+				return swal('Error', response.data.description, 'error');
+
+			swal({
+			title: "Woohoo!",
+			text: 'User created successfully!', 
+			type: "success"
+			}, function(){
+				location.reload();
+			});
+
+		})
+		.catch(function (error) {
+			return swal('An error ocurred', 'There was an error with the request, please check the console for more information.', 'error');
+			console.log(error);
+		});
+	});
+};
+
 panel.changePassword = function(){
 
 	panel.page.innerHTML = '';

+ 1 - 18
views/dashboard.handlebars

@@ -7,24 +7,6 @@
         <script type="text/javascript" src="/js/dashboard.js"></script>
     {{/inline}}
     {{#*inline "body-block"}}
-        <section id='auth' class="hero is-light is-fullheight">
-
-			<div class="hero-body">
-				<div class="container">
-					<h1 class="title">
-						Admin dashboard
-					</h1>
-					<h2 class="subtitle">
-						<p class="control has-addons">
-							<input id='token' class="input is-danger" type="text" placeholder="Your admin token">
-							<a id='tokenSubmit' class="button is-danger is-outlined">Check</a>
-						</p>
-					</h2>
-				</div>
-			</div>
-
-		</section>
-
 		<section id='dashboard' class="section">
 
 			<div id="panel" class="container">
@@ -48,6 +30,7 @@
 							</ul>
 							<p class="menu-label">Administration</p>
 							<ul class="menu-list">
+								<li id="itemUserAdd"><a id="itemTokens" onclick="panel.addUser()">Add user</a></li>
 								<li><a id="itemTokens" onclick="panel.changeToken()">Change your token</a></li>
 								<li><a id="itemPassword" onclick="panel.changePassword()">Change your password</a></li>
 								<li><a id="itemLogout"onclick="panel.logout()">Logout</a></li>