This commit is contained in:
Smigz 2025-04-06 06:07:02 -04:00
parent e89fb616e7
commit b1c295d2ac
12 changed files with 2783 additions and 55 deletions

View file

@ -0,0 +1,13 @@
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
},
extends: ["eslint:recommended", "prettier"],
parserOptions: {
ecmaVersion: "latest",
sourceType: "module",
},
};

View file

@ -0,0 +1,4 @@
{
"tabWidth": 4,
"singleQuote": true
}

File diff suppressed because it is too large Load diff

View file

@ -11,6 +11,7 @@
"description": "", "description": "",
"dependencies": { "dependencies": {
"@prisma/client": "^6.5.0", "@prisma/client": "^6.5.0",
"bcrypt": "^5.1.1",
"ejs": "^3.1.10", "ejs": "^3.1.10",
"express": "^5.1.0", "express": "^5.1.0",
"express-session": "^1.18.1", "express-session": "^1.18.1",
@ -18,6 +19,12 @@
"passport": "^0.7.0" "passport": "^0.7.0"
}, },
"devDependencies": { "devDependencies": {
"prisma": "^6.5.0" "css-loader": "^7.1.2",
"html-webpack-plugin": "^5.6.3",
"prisma": "^6.5.0",
"style-loader": "^4.0.0",
"template-ejs-loader": "^0.9.4",
"webpack": "^5.98.0",
"webpack-cli": "^6.0.1"
} }
} }

View file

@ -0,0 +1,14 @@
console.log('form stuff');
const usernameCheck = async (username) => {
let res = await fetch(`/auth/username?username=${username}`);
return await res.json();
};
const input = document.querySelector("input[name='username']");
input.addEventListener('input', async (e) => {
let input = e.target.value;
let test = await usernameCheck(input);
test.results ? console.log('user exists') : console.log('user doesnt');
});

View file

@ -1,19 +1,53 @@
const db = require("../models/auth") const { Auth } = require('../models/auth');
const bcrypt = require('bcrypt');
const db = new Auth();
const loginGet = (req, res, next) => { const loginGet = (req, res, next) => {
res.send("Login Route") res.send('Login Route');
} };
const registerGet = (req, res) => { const registerGet = (req, res) => {
res.render("register") res.render('register');
} };
const registerPost = async (req, res, next) => { const registerPost = async (req, res, next) => {
const { username, email, password, "password-confirmation": passwordConfirmation } = req.body; const { username, email, password } = req.body;
await db.createUser({ username: username, password: password, email: email }) try {
const hashedPassword = bcrypt.hash(password);
const result = await db.createUser({
username: username,
password: hashedPassword,
email: email,
});
if (result.error) {
console.log(result.error);
} else {
console.log(result.message);
}
} catch (e) {
console.error(e);
next(e);
}
res.redirect("/") res.redirect('/');
} };
module.exports = { loginGet, registerPost, registerGet } const findByUsername = async (req, res, next) => {
const { username } = req.query;
try {
if (username && username.length > 0) {
const exists = (await db.getUserByUsername(username))
? true
: false;
const data = { results: exists };
res.json(data);
}
} catch (e) {
res.json({ error: e });
}
};
module.exports = { findByUsername, loginGet, registerPost, registerGet };

View file

@ -1,8 +1,9 @@
const db = require("../models/auth") // const db = require("../models/auth");
const indexGet = async (req, res) => { const indexGet = async (req, res) => {
const data = await db.allUsers() // const data = await db.allUsers()
console.dir(data) // console.dir(data)
res.render("main") res.render("main");
} };
module.exports = { indexGet };
module.exports = { indexGet }

View file

@ -1,23 +1,25 @@
const express = require("express"); const express = require('express');
const session = require("express-session") const session = require('express-session');
const passport = require("passport") const passport = require('passport');
const path = require("node:path"); const path = require('node:path');
const port = process.env.APP_PORT || 3000; const port = process.env.APP_PORT || 3000;
const app = express(); const app = express();
const authRouter = require("./routes/authRouter") const assetsPath = path.join(path.dirname(__dirname), 'public');
const indexRouter = require("./routes/indexRouter") app.use(express.static(assetsPath));
app.set("views", path.join(__dirname, "views")); const authRouter = require('./routes/authRouter');
app.set("view engine", "ejs"); const indexRouter = require('./routes/indexRouter');
app.use(express.urlencoded({ extended: false }))
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.urlencoded({ extended: false }));
app.use("/", indexRouter); app.use('/', indexRouter);
app.use("/auth", authRouter); app.use('/auth', authRouter);
app.listen(port, () => { app.listen(port, () => {
console.log(`App listening on ${port}`); console.log(`App listening on ${port}`);
}); });

View file

@ -1,7 +1,46 @@
const { PrismaClient } = require("@prisma/client"); const { PrismaClient, Prisma } = require("@prisma/client");
// const { Prisma } = require("prisma"); // const { Prisma } = require("prisma");
const primsa = new PrismaClient() class Auth {
constructor() {
this.primsa = new PrismaClient();
}
async createUser(user) {
try {
await this.primsa.user.create({
data: {
username: user.username,
email: user?.email,
password: user.password,
},
});
return { message: "user created" };
} catch (e) {
if (e instanceof Prisma.PrismaClientKnownRequestError) {
if (e.code === "P2002") {
console.log("User must use a unique username");
return { error: "must use unique username" };
}
}
}
}
async allUsers() {
return await this.primsa.user.findMany();
}
async getUserByUsername(username) {
try {
return await this.primsa.user.findUnique({
where: {
username: username,
},
});
} catch (e) {
return { error: e };
}
}
}
// async function main() { // async function main() {
// const allUsers = await primsa.user.findMany() // const allUsers = await primsa.user.findMany()
@ -18,18 +57,5 @@ const primsa = new PrismaClient()
// process.exit(1) // process.exit(1)
// }) // })
async function createUser(user) { module.exports = { Auth };
await primsa.user.create({
data: {
username: user.username,
email: user?.email,
password: user.password
}
})
}
async function allUsers() {
return await primsa.user.findMany()
}
module.exports = { createUser, allUsers }

View file

@ -1,11 +1,12 @@
const { Router } = require("express"); const { Router } = require('express');
const authController = require("../controllers/authController") const authController = require('../controllers/authController');
const authRouter = Router(); const authRouter = Router();
authRouter.get("/login", authController.loginGet) authRouter.get('/login', authController.loginGet);
authRouter.get("/register", authController.registerGet) authRouter.get('/register', authController.registerGet);
authRouter.post("/register", authController.registerPost) authRouter.post('/register', authController.registerPost);
authRouter.get('/username', authController.findByUsername);
module.exports = authRouter;
module.exports = authRouter;

View file

@ -19,6 +19,7 @@
<input type="email" name="email" id="email"> <input type="email" name="email" id="email">
<button type="submit">Submit</button> <button type="submit">Submit</button>
</form> </form>
<script src="/js/form.js"></script>
</body> </body>
</html> </html>

View file

@ -0,0 +1,29 @@
const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist'),
clean: true,
},
plugins: [
new HtmlWebpackPlugin({
template: './src/views/main.ejs',
}),
],
module: {
rules: [
{
test: /\.css$/i,
use: ['style-loader', 'css-loader'],
},
{
test: /\.ejs$/i,
use: ['html-loader', 'template-ejs-loader'],
},
],
},
};