kutt/server/passport.js

72 lines
1.8 KiB
JavaScript
Raw Permalink Normal View History

2024-08-11 18:41:03 +03:30
const { Strategy: LocalAPIKeyStrategy } = require("passport-localapikey-update");
const { Strategy: JwtStrategy, ExtractJwt } = require("passport-jwt");
const { Strategy: LocalStrategy } = require("passport-local");
const passport = require("passport");
const bcrypt = require("bcryptjs");
2024-08-11 18:41:03 +03:30
const query = require("./queries");
const env = require("./env");
2018-02-13 16:04:29 +03:30
const jwtOptions = {
2024-08-21 21:22:59 +03:30
jwtFromRequest: req => req.cookies?.token,
2020-01-30 18:51:52 +03:30
secretOrKey: env.JWT_SECRET
2018-02-13 16:04:29 +03:30
};
passport.use(
new JwtStrategy(jwtOptions, async (payload, done) => {
try {
// 'sub' used to be the email address
// this check makes sure to invalidate old JWTs where the sub is still the email address
if (typeof payload.sub === "string" || !payload.sub) {
return done(null, false);
}
const user = await query.user.find({ id: payload.sub });
2018-02-13 16:04:29 +03:30
if (!user) return done(null, false);
2024-09-12 17:38:00 +03:30
return done(null, user, payload);
2018-02-13 16:04:29 +03:30
} catch (err) {
return done(err);
}
})
);
const localOptions = {
usernameField: "email"
2018-02-13 16:04:29 +03:30
};
passport.use(
new LocalStrategy(localOptions, async (email, password, done) => {
2018-02-13 16:04:29 +03:30
try {
2020-01-30 18:51:52 +03:30
const user = await query.user.find({ email });
2018-02-13 16:04:29 +03:30
if (!user) {
return done(null, false);
}
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
return done(null, false);
}
return done(null, user);
} catch (err) {
return done(err);
}
})
);
const localAPIKeyOptions = {
apiKeyField: "apikey",
apiKeyHeader: "x-api-key"
};
2018-02-13 16:04:29 +03:30
passport.use(
new LocalAPIKeyStrategy(localAPIKeyOptions, async (apikey, done) => {
2018-02-13 16:04:29 +03:30
try {
2020-01-30 18:51:52 +03:30
const user = await query.user.find({ apikey });
2018-02-13 16:04:29 +03:30
if (!user) {
return done(null, false);
}
return done(null, user);
} catch (err) {
return done(err);
}
})
);