| const { sign, verify } = require("jsonwebtoken"); |
| const { compare, hash, genSalt } = require("bcryptjs"); |
| const { NotAuthError } = require("./errors"); |
|
|
| const KEY = "supersecret"; |
|
|
| async function generatePasswordHash(password) { |
| const password_hash = await hash(password, await genSalt(10)); |
| return password_hash; |
| } |
|
|
| function createJSONToken(id) { |
| return sign({ id }, KEY, { noTimestamp: true }); |
| } |
|
|
| function validateJSONToken(token) { |
| return verify(token, KEY); |
| } |
|
|
| function isValidPassword(password, storedPassword) { |
| return compare(password, storedPassword); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| function checkAuthMiddleware(req, res, next) { |
| if (req.method === "OPTIONS") { |
| return next(); |
| } |
| let authToken = req.cookies["auth-token"]; |
| if (!authToken) { |
| return res.status(401).json({ message: "Not authenticated", description: "Auth token not found" }); |
| } |
| try { |
| const validatedToken = validateJSONToken(authToken); |
| req.userId = validatedToken.id; |
| req.isAuthenticated = true; |
| } catch (error) { |
| console.log("NOT AUTH. TOKEN INVALID."); |
| return res.status(401).json({ message: "Not authenticated", description: "Invalid auth token" }); |
| } |
| next(); |
| } |
|
|
| exports.createJSONToken = createJSONToken; |
| exports.validateJSONToken = validateJSONToken; |
| exports.isValidPassword = isValidPassword; |
| exports.checkAuth = checkAuthMiddleware; |
| exports.generatePasswordHash = generatePasswordHash; |
|
|