mirror of
https://gitea.smigz.com/smiggiddy/odin-codeprojects.git
synced 2025-04-18 15:31:17 -04:00
done
This commit is contained in:
parent
e89fb616e7
commit
b1c295d2ac
12 changed files with 2783 additions and 55 deletions
13
file-uploader/.eslintrc.js
Normal file
13
file-uploader/.eslintrc.js
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
module.exports = {
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
es2021: true,
|
||||||
|
node: true,
|
||||||
|
},
|
||||||
|
extends: ["eslint:recommended", "prettier"],
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: "latest",
|
||||||
|
sourceType: "module",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
4
file-uploader/.prettierrc
Normal file
4
file-uploader/.prettierrc
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"tabWidth": 4,
|
||||||
|
"singleQuote": true
|
||||||
|
}
|
2598
file-uploader/package-lock.json
generated
2598
file-uploader/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
14
file-uploader/public/js/form.js
Normal file
14
file-uploader/public/js/form.js
Normal 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');
|
||||||
|
});
|
|
@ -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 };
|
||||||
|
|
|
@ -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 }
|
|
|
@ -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}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -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 }
|
|
|
@ -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;
|
|
|
@ -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>
|
||||||
|
|
29
file-uploader/webpack.config.js
Normal file
29
file-uploader/webpack.config.js
Normal 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'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
Loading…
Add table
Reference in a new issue