From e7ca40b5ab953bf49668eda0a8ff3d1386b7ad79 Mon Sep 17 00:00:00 2001 From: Danny Avila <110412045+danny-avila@users.noreply.github.com> Date: Sat, 7 Oct 2023 11:16:06 -0400 Subject: [PATCH] =?UTF-8?q?feat:=20bun=20api=20support=20=F0=9F=A5=9F=20(#?= =?UTF-8?q?1021)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: update bun lockfile * feat: backend api bun support, jose used in bun runtime * fix: add missing await for signPayload call --- api/models/Session.js | 14 ++++----- api/models/User.js | 15 +++++---- api/package.json | 4 ++- api/server/controllers/AuthController.js | 11 +++++-- api/server/index.js | 8 +++-- api/server/services/signPayload.js | 36 +++++++++++++++++++++ api/server/utils/removePorts.js | 2 +- api/strategies/index.js | 2 ++ api/strategies/joseStrategy.js | 38 +++++++++++++++++++++++ bun.lockb | Bin 754676 -> 754809 bytes package-lock.json | 27 +++++++++++----- 11 files changed, 128 insertions(+), 29 deletions(-) create mode 100644 api/server/services/signPayload.js create mode 100644 api/strategies/joseStrategy.js diff --git a/api/models/Session.js b/api/models/Session.js index 697fa6634..d93ac526c 100644 --- a/api/models/Session.js +++ b/api/models/Session.js @@ -1,6 +1,6 @@ const mongoose = require('mongoose'); const crypto = require('crypto'); -const jwt = require('jsonwebtoken'); +const signPayload = require('../server/services/signPayload'); const { REFRESH_TOKEN_EXPIRY } = process.env ?? {}; const expires = eval(REFRESH_TOKEN_EXPIRY) ?? 1000 * 60 * 60 * 24 * 7; @@ -31,13 +31,11 @@ sessionSchema.methods.generateRefreshToken = async function () { this.expiration = new Date(expiresIn); } - const refreshToken = jwt.sign( - { - id: this.user, - }, - process.env.JWT_REFRESH_SECRET, - { expiresIn: Math.floor((expiresIn - Date.now()) / 1000) }, - ); + const refreshToken = await signPayload({ + payload: { id: this.user }, + secret: process.env.JWT_REFRESH_SECRET, + expirationTime: Math.floor((expiresIn - Date.now()) / 1000), + }); const hash = crypto.createHash('sha256'); this.refreshTokenHash = hash.update(refreshToken).digest('hex'); diff --git a/api/models/User.js b/api/models/User.js index b3d2fecde..5e18fbae0 100644 --- a/api/models/User.js +++ b/api/models/User.js @@ -1,6 +1,6 @@ const mongoose = require('mongoose'); const bcrypt = require('bcryptjs'); -const jwt = require('jsonwebtoken'); +const signPayload = require('../server/services/signPayload'); const userSchema = require('./schema/userSchema.js'); const { SESSION_EXPIRY } = process.env ?? {}; const expires = eval(SESSION_EXPIRY) ?? 1000 * 60 * 15; @@ -21,18 +21,17 @@ userSchema.methods.toJSON = function () { }; }; -userSchema.methods.generateToken = function () { - const token = jwt.sign( - { +userSchema.methods.generateToken = async function () { + return await signPayload({ + payload: { id: this._id, username: this.username, provider: this.provider, email: this.email, }, - process.env.JWT_SECRET, - { expiresIn: expires / 1000 }, - ); - return token; + secret: process.env.JWT_SECRET, + expirationTime: expires / 1000, + }); }; userSchema.methods.comparePassword = function (candidatePassword, callback) { diff --git a/api/package.json b/api/package.json index 99793e13c..f01b8c55c 100644 --- a/api/package.json +++ b/api/package.json @@ -39,6 +39,7 @@ "googleapis": "^118.0.0", "handlebars": "^4.7.7", "html": "^1.0.0", + "jose": "^4.15.2", "js-yaml": "^4.1.0", "jsonwebtoken": "^9.0.0", "keyv": "^4.5.3", @@ -52,6 +53,7 @@ "openai-chat-tokens": "^0.2.8", "openid-client": "^5.4.2", "passport": "^0.6.0", + "passport-custom": "^1.1.1", "passport-discord": "^0.1.4", "passport-facebook": "^3.0.0", "passport-github2": "^0.1.12", @@ -59,7 +61,7 @@ "passport-jwt": "^4.0.1", "passport-local": "^1.0.0", "pino": "^8.12.1", - "sharp": "^0.32.5", + "sharp": "^0.32.6", "tiktoken": "^1.0.10", "ua-parser-js": "^1.0.36", "winston": "^3.10.0", diff --git a/api/server/controllers/AuthController.js b/api/server/controllers/AuthController.js index 361c3464b..240fff465 100644 --- a/api/server/controllers/AuthController.js +++ b/api/server/controllers/AuthController.js @@ -4,6 +4,7 @@ const { resetPassword, setAuthTokens, } = require('../services/AuthService'); +const jose = require('jose'); const jwt = require('jsonwebtoken'); const Session = require('../../models/Session'); const User = require('../../models/User'); @@ -76,7 +77,13 @@ const refreshController = async (req, res) => { } try { - const payload = jwt.verify(refreshToken, process.env.JWT_REFRESH_SECRET); + let payload; + if (typeof Bun !== 'undefined') { + const secret = new TextEncoder().encode(process.env.JWT_REFRESH_SECRET); + ({ payload } = await jose.jwtVerify(refreshToken, secret)); + } else { + payload = jwt.verify(refreshToken, process.env.JWT_REFRESH_SECRET); + } const userId = payload.id; const user = await User.findOne({ _id: userId }); if (!user) { @@ -99,7 +106,7 @@ const refreshController = async (req, res) => { const token = await setAuthTokens(userId, res, session._id); const userObj = user.toJSON(); res.status(200).send({ token, user: userObj }); - } else if (payload.exp > Date.now() / 1000) { + } else if (payload.exp < Date.now() / 1000) { res.status(403).redirect('/login'); } else { res.status(401).send('Refresh token expired or not found for this user'); diff --git a/api/server/index.js b/api/server/index.js index 7975f406b..4a0ed9f6e 100644 --- a/api/server/index.js +++ b/api/server/index.js @@ -12,7 +12,7 @@ const { PORT, HOST, ALLOW_SOCIAL_LOGIN } = process.env ?? {}; const port = Number(PORT) || 3080; const host = HOST || 'localhost'; const projectPath = path.join(__dirname, '..', '..', 'client'); -const { jwtLogin, passportLogin } = require('../strategies'); +const { jwtLogin, joseLogin, passportLogin } = require('../strategies'); const startServer = async () => { await connectDb(); @@ -39,7 +39,11 @@ const startServer = async () => { // OAUTH app.use(passport.initialize()); - passport.use(await jwtLogin()); + if (typeof Bun !== 'undefined') { + passport.use('jwt', await joseLogin()); + } else { + passport.use(await jwtLogin()); + } passport.use(passportLogin()); if (ALLOW_SOCIAL_LOGIN?.toLowerCase() === 'true') { diff --git a/api/server/services/signPayload.js b/api/server/services/signPayload.js new file mode 100644 index 000000000..4bd680a53 --- /dev/null +++ b/api/server/services/signPayload.js @@ -0,0 +1,36 @@ +const jose = require('jose'); +const jwt = require('jsonwebtoken'); + +/** + * Signs a given payload using either the `jose` library (for Bun runtime) or `jsonwebtoken`. + * + * @async + * @function + * @param {Object} options - The options for signing the payload. + * @param {Object} options.payload - The payload to be signed. + * @param {string} options.secret - The secret key used for signing. + * @param {number} options.expirationTime - The expiration time in seconds. + * @returns {Promise} Returns a promise that resolves to the signed JWT. + * @throws {Error} Throws an error if there's an issue during signing. + * + * @example + * const signedPayload = await signPayload({ + * payload: { userId: 123 }, + * secret: 'my-secret-key', + * expirationTime: 3600 + * }); + */ +async function signPayload({ payload, secret, expirationTime }) { + if (typeof Bun !== 'undefined') { + // this code will only run when the file is run with Bun + const encodedSecret = new TextEncoder().encode(secret); + return await new jose.SignJWT(payload) + .setProtectedHeader({ alg: 'HS256' }) + .setExpirationTime(expirationTime + 's') + .sign(encodedSecret); + } + + return jwt.sign(payload, secret, { expiresIn: expirationTime }); +} + +module.exports = signPayload; diff --git a/api/server/utils/removePorts.js b/api/server/utils/removePorts.js index db3e5e1db..375ff1cc7 100644 --- a/api/server/utils/removePorts.js +++ b/api/server/utils/removePorts.js @@ -1 +1 @@ -module.exports = (req) => req.ip.replace(/:\d+[^:]*$/, ''); +module.exports = (req) => req?.ip?.replace(/:\d+[^:]*$/, ''); diff --git a/api/strategies/index.js b/api/strategies/index.js index 1c49c2b1c..1b1f8192a 100644 --- a/api/strategies/index.js +++ b/api/strategies/index.js @@ -2,6 +2,7 @@ const passportLogin = require('./localStrategy'); const googleLogin = require('./googleStrategy'); const githubLogin = require('./githubStrategy'); const discordLogin = require('./discordStrategy'); +const joseLogin = require('./joseStrategy'); const jwtLogin = require('./jwtStrategy'); const facebookLogin = require('./facebookStrategy'); const setupOpenId = require('./openidStrategy'); @@ -11,6 +12,7 @@ module.exports = { googleLogin, githubLogin, discordLogin, + joseLogin, jwtLogin, facebookLogin, setupOpenId, diff --git a/api/strategies/joseStrategy.js b/api/strategies/joseStrategy.js new file mode 100644 index 000000000..6e1f79796 --- /dev/null +++ b/api/strategies/joseStrategy.js @@ -0,0 +1,38 @@ +const jose = require('jose'); +const passportCustom = require('passport-custom'); +const CustomStrategy = passportCustom.Strategy; +const User = require('../models/User'); + +const joseLogin = async () => + new CustomStrategy(async (req, done) => { + const authHeader = req.headers.authorization; + + if (!authHeader || !authHeader.startsWith('Bearer ')) { + return done(null, false, { message: 'No auth token' }); + } + + const token = authHeader.split(' ')[1]; + + try { + const secret = new TextEncoder().encode(process.env.JWT_SECRET); + const { payload } = await jose.jwtVerify(token, secret); + + const user = await User.findById(payload.id); + if (user) { + done(null, user); + } else { + console.log('JoseJwtStrategy => no user found'); + done(null, false, { message: 'No user found' }); + } + } catch (err) { + if (err?.code === 'ERR_JWT_EXPIRED') { + console.error('JoseJwtStrategy => token expired'); + } else { + console.error('JoseJwtStrategy => error'); + console.error(err); + } + done(null, false, { message: 'Invalid token' }); + } + }); + +module.exports = joseLogin; diff --git a/bun.lockb b/bun.lockb index 66e3a260642b09ccd6578bcc13be160032ff6c4c..25e95fde8ba63e2a9c7f83780bf7e1fc29e93f50 100755 GIT binary patch delta 59825 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 YxH(X?ryVBE5lW2Lv@@4Y(ex1i6L&koqW}N^ delta 81059 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 0.10.0" + } + }, "node_modules/passport-discord": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/passport-discord/-/passport-discord-0.1.4.tgz", @@ -21093,9 +21106,9 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/sharp": { - "version": "0.32.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.5.tgz", - "integrity": "sha512-0dap3iysgDkNaPOaOL4X/0akdu0ma62GcdC2NBQ+93eqpePdDdr2/LM0sFdDSMmN7yS+odyZtPsb7tx/cYBKnQ==", + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", "hasInstallScript": true, "dependencies": { "color": "^4.2.3",