diff --git a/client/src/App.js b/client/src/App.js index 48f5661..2d8312d 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -54,8 +54,9 @@ import state from "./applicationState"; import EditHostelDetails from "./components/editHostelDetails"; import SendMessageToStudent from "./components/sendMessageToStudents"; import CustomNavbar from "./components/common/customNavbar"; -import AdminViewTransaction from "./components/adminViewTransaction" +import AdminViewTransaction from "./components/adminViewTransaction"; import GlobalStyle from "./globalStyles"; +import CreateStaffUserAccountByAdmin from "./components/adminCreateUserAccount"; /** imports of page components ends here */ @@ -80,7 +81,6 @@ const App = (props) => { const [authenticated, setAuthenticated] = useRecoilState(state.authState); const [currentUser, setCurrentUser] = useRecoilState(state.currentUserState); - useEffect(() => { if (!currentUser) { //load the stuffs from the store if it exists @@ -128,7 +128,6 @@ const App = (props) => { /> )} /> - { exact path="/confirm_transaction" /> - {/* student route starts here*/} { exact path="/confirm_transaction" /> - { {...props} authorizedRole={["student"]} /> - { authorizedRole={["student"]} exact /> - { authorizedRole={["student"]} {...props} /> - { authorizedRole={["student"]} {...props} /> - {/* students route ends here*/} - {/* { component={AdminViewTransaction} authenticated={authenticated} currentUser={currentUser} - authorizedRole={["super-admin"]} + authorizedRole={["super-admin", "admin"]} {...props} /> - + + - { currentUser={currentUser} {...props} /> */} - { authorizedRole={["super-admin"]} {...props} /> - { authorizedRole={["super-admin"]} {...props} /> - { authorizedRole={["super-admin"]} {...props} /> - {/* Admin routes ends here */} diff --git a/client/src/components/adminCreateUserAccount.js b/client/src/components/adminCreateUserAccount.js new file mode 100644 index 0000000..695734e --- /dev/null +++ b/client/src/components/adminCreateUserAccount.js @@ -0,0 +1,175 @@ +import React, { useState, useEffect } from "react"; +import { useMutation } from "@apollo/client"; +import { CreateStaffUserAccountByAdmin } from "../graphql/mutation"; +import styled from "styled-components"; + +const AdminCreateUserAccountStyles = styled.div` + .title { + + } +`; + +const AdminCreateUserAccount = () => { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [role, setRole] = useState("0"); + const [name, setName] = useState(""); + const [submitted, setSubmitted] = useState(false); + const [errors, setErrors] = useState(null); + const [createAccount, createAccountResult] = useMutation( + CreateStaffUserAccountByAdmin + ); + + useEffect(() => { + if (createAccountResult.error) { + setErrors(createAccountResult.error); + setSubmitted(!submitted); + } + if (createAccountResult.data) { + window.alert("Account created successfully"); + setRole("0"); + setName(""); + setSubmitted(!submitted); + setPassword(""); + setEmail(""); + setErrors(null); + } + }, [createAccountResult.data, createAccountResult.error]); + + const onInputChange = (e) => { + const value = e.target.value; + const name = e.target.name; + switch (name) { + case "name": + setName(value); + break; + case "email": + setEmail(value); + break; + case "password": + setPassword(value); + break; + case "role": + if (value !== "0") { + setRole(value); + } + break; + } + }; + + const createUserAccountFunction = async (e) => { + e.preventDefault(); + //gather the variables here and + if (!name) { + window.alert("name of the account owner is required"); + return; + } + if (!email) { + window.alert("email of the account owner is required"); + return; + } + if (!password) { + window.alert("password of the account owner is required"); + return; + } + if (!role) { + window.alert("the account owner role is a required field"); + return; + } + const confirmThings = window.confirm( + `You are about creating an account with the following details \n Name: ${name} \n Email: ${email} \n Password: ${password} \n Staff Role: ${role}` + ); + if (!confirmThings) return; + try { + setSubmitted(!submitted); + await createAccount({ + variables: { + email, + password, + name, + role, + }, + }); + } catch (error) {} + }; + return ( + +
+
+
+

Create Staff User Account

+
+
+ {errors &&

{errors.message}

} +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+
+
+
+ ); +}; + +export default AdminCreateUserAccount; diff --git a/client/src/components/navbar.js b/client/src/components/navbar.js index 0c47f80..b8ea0a6 100644 --- a/client/src/components/navbar.js +++ b/client/src/components/navbar.js @@ -281,6 +281,29 @@ const Navbar = ({ authenticated, currentUser }) => { Transactions + +
  • + + +
    + + Create Staff Account + +
    +
  • )} diff --git a/client/src/graphql/mutation.js b/client/src/graphql/mutation.js index aa8ce6d..f05f3c1 100644 --- a/client/src/graphql/mutation.js +++ b/client/src/graphql/mutation.js @@ -355,7 +355,23 @@ const ConfirmStudentTransaction = gql` } `; -// +//createStaffUserAccountByAdmin + +const CreateStaffUserAccountByAdmin = gql` + mutation createStaffUserAccountByAdmin( + $email: String! + $name: String! + $password: String! + $role: String! + ) { + createStaffUserAccountByAdmin( + email: $email + name: $name + password: $password + role: $role + ) + } +`; export { SendSMSToStudents, @@ -386,4 +402,5 @@ export { PlaceStudentInHoldBedSpace, DashStudentFreeRoom, SimulateRemitaTransaction, + CreateStaffUserAccountByAdmin, }; diff --git a/server/logs/app.log b/server/logs/app.log index f76bfc8..0849a98 100644 --- a/server/logs/app.log +++ b/server/logs/app.log @@ -616,3 +616,18 @@ {"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 07:01:15 GMT+0000 (Coordinated Universal Time)","process":{"pid":8342,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":434036736,"heapTotal":340709376,"heapUsed":289302704,"external":20574047,"arrayBuffers":18506828}},"os":{"loadavg":[4.36,4.17,3.42],"uptime":338819},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} {"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 07:06:54 GMT+0000 (Coordinated Universal Time)","process":{"pid":11411,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":424353792,"heapTotal":324194304,"heapUsed":275903216,"external":20573992,"arrayBuffers":18506773}},"os":{"loadavg":[4.03,3.73,3.41],"uptime":339158},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} {"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 07:07:03 GMT+0000 (Coordinated Universal Time)","process":{"pid":12036,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":424951808,"heapTotal":324718592,"heapUsed":275955584,"external":20573781,"arrayBuffers":18506562}},"os":{"loadavg":[3.8,3.68,3.4],"uptime":339167},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 08:53:19 GMT+0000 (Coordinated Universal Time)","process":{"pid":14841,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":572805120,"heapTotal":408756224,"heapUsed":308634968,"external":20571978,"arrayBuffers":18504759}},"os":{"loadavg":[3.17,2.97,2.92],"uptime":345542},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 08:55:29 GMT+0000 (Coordinated Universal Time)","process":{"pid":22975,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":436723712,"heapTotal":343068672,"heapUsed":289874192,"external":20574031,"arrayBuffers":18506812}},"os":{"loadavg":[3.32,3.13,2.99],"uptime":345673},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 08:55:52 GMT+0000 (Coordinated Universal Time)","process":{"pid":25163,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":438394880,"heapTotal":343330816,"heapUsed":289727408,"external":20573781,"arrayBuffers":18506562}},"os":{"loadavg":[3.72,3.26,3.04],"uptime":345696},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 08:55:59 GMT+0000 (Coordinated Universal Time)","process":{"pid":25614,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":437350400,"heapTotal":343068672,"heapUsed":289792032,"external":20573781,"arrayBuffers":18506562}},"os":{"loadavg":[3.58,3.24,3.03],"uptime":345703},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 08:56:11 GMT+0000 (Coordinated Universal Time)","process":{"pid":26098,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":437673984,"heapTotal":343330816,"heapUsed":290025160,"external":20573781,"arrayBuffers":18506562}},"os":{"loadavg":[3.63,3.26,3.04],"uptime":345715},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 08:56:31 GMT+0000 (Coordinated Universal Time)","process":{"pid":28892,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":367616000,"heapTotal":340447232,"heapUsed":289527048,"external":20574047,"arrayBuffers":18506828}},"os":{"loadavg":[3.45,3.25,3.04],"uptime":345735},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 09:01:14 GMT+0000 (Coordinated Universal Time)","process":{"pid":29350,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":437944320,"heapTotal":342806528,"heapUsed":289828800,"external":20573781,"arrayBuffers":18506562}},"os":{"loadavg":[2.84,3.14,3.06],"uptime":346018},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 09:03:09 GMT+0000 (Coordinated Universal Time)","process":{"pid":31377,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":437563392,"heapTotal":342544384,"heapUsed":290002664,"external":20574079,"arrayBuffers":18506860}},"os":{"loadavg":[3.62,3.26,3.1],"uptime":346132},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 09:06:40 GMT+0000 (Coordinated Universal Time)","process":{"pid":16676,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":548052992,"heapTotal":400302080,"heapUsed":358409376,"external":20583105,"arrayBuffers":18515254}},"os":{"loadavg":[4.86,4.19,3.53],"uptime":346343},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 09:08:45 GMT+0000 (Coordinated Universal Time)","process":{"pid":17730,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":437272576,"heapTotal":344903680,"heapUsed":289805592,"external":20573781,"arrayBuffers":18506562}},"os":{"loadavg":[2.92,3.69,3.43],"uptime":346468},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 09:09:42 GMT+0000 (Coordinated Universal Time)","process":{"pid":18338,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":438161408,"heapTotal":342020096,"heapUsed":289825520,"external":20574047,"arrayBuffers":18506828}},"os":{"loadavg":[2.81,3.48,3.37],"uptime":346525},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 09:14:31 GMT+0000 (Coordinated Universal Time)","process":{"pid":19226,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":433889280,"heapTotal":340709376,"heapUsed":289268336,"external":20574099,"arrayBuffers":18506880}},"os":{"loadavg":[2.32,2.89,3.16],"uptime":346814},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 09:38:23 GMT+0000 (Coordinated Universal Time)","process":{"pid":20907,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":436699136,"heapTotal":342544384,"heapUsed":289337288,"external":20573781,"arrayBuffers":18506562}},"os":{"loadavg":[2.96,3.24,3.3],"uptime":348247},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 09:38:56 GMT+0000 (Coordinated Universal Time)","process":{"pid":21556,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":436080640,"heapTotal":342282240,"heapUsed":289599792,"external":20573781,"arrayBuffers":18506562}},"os":{"loadavg":[2.96,3.23,3.3],"uptime":348279},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} +{"error":{"code":"EADDRINUSE","errno":"EADDRINUSE","syscall":"listen","address":"::","port":8000},"level":"error","message":"uncaughtException: listen EADDRINUSE: address already in use :::8000\nError: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stack":"Error: listen EADDRINUSE: address already in use :::8000\n at Server.setupListenHandle [as _listen2] (net.js:1316:16)\n at listenInCluster (net.js:1364:12)\n at Server.listen (net.js:1450:7)\n at StartUp (/usr/app/src/index.js:111:14)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","exception":true,"date":"Sat Mar 27 2021 09:40:07 GMT+0000 (Coordinated Universal Time)","process":{"pid":25573,"uid":0,"gid":0,"cwd":"/usr/app","execPath":"/usr/local/bin/node","version":"v12.20.1","argv":["node","/usr/app/src/index.js"],"memoryUsage":{"rss":436047872,"heapTotal":341495808,"heapUsed":289685552,"external":20573781,"arrayBuffers":18506562}},"os":{"loadavg":[3.34,3.29,3.31],"uptime":348351},"trace":[{"column":16,"file":"net.js","function":"Server.setupListenHandle [as _listen2]","line":1316,"method":"setupListenHandle [as _listen2]","native":false},{"column":12,"file":"net.js","function":"listenInCluster","line":1364,"method":null,"native":false},{"column":7,"file":"net.js","function":"Server.listen","line":1450,"method":"listen","native":false},{"column":14,"file":"/usr/app/src/index.js","function":"StartUp","line":111,"method":null,"native":false},{"column":5,"file":"internal/process/task_queues.js","function":"processTicksAndRejections","line":97,"method":null,"native":false}]} diff --git a/server/src/resolvers/user.js b/server/src/resolvers/user.js index 1a3e46a..8a00a8f 100644 --- a/server/src/resolvers/user.js +++ b/server/src/resolvers/user.js @@ -1,4 +1,14 @@ import methods from "../methods"; +import { combineResolvers } from "graphql-resolvers"; +import { + isAuthenticated, + isAdmin, + isSuperAdmin, + isStudent, +} from "./authorization"; +import _ from "lodash"; +import bcrypt from "bcrypt"; +const saltRounds = 10; export default { Query: { @@ -37,6 +47,34 @@ export default { await newUser.save(); return newUser; }, + createStaffUserAccountByAdmin: combineResolvers( + isAuthenticated, + isSuperAdmin, + async (parent, { email, password, role, name }, { fastConn }) => { + //find if we have an account with that email + const findAccount = await fastConn.models.User.findOne({ + email: email.toLowerCase(), + }); + + if (findAccount) { + throw new Error( + `An account with email: ${email} already exists. Please use another email address` + ); + } + const hash = await bcrypt.hash(password, saltRounds); + await fastConn.models.User.create([ + { + email: email.toLowerCase(), + password: hash, + userType: "staff", + accessLevel: role, + name: name, + active: true, + }, + ]); + return true; + } + ), }, LoginUserResult: { __resolveType(obj) { diff --git a/server/src/schema/user.js b/server/src/schema/user.js index 9f66dd4..b6f2270 100644 --- a/server/src/schema/user.js +++ b/server/src/schema/user.js @@ -14,6 +14,12 @@ export default gql` extend type Mutation { createUser(username: String): User + createStaffUserAccountByAdmin( + email: String! + password: String! + name: String! + role: String! + ): Boolean } union LoginUserResult = User | Error