mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-06 03:20:13 +08:00
* put new registered social login user to session data * ask to choose username * simplify checkUsername functions
89 lines
1.9 KiB
JavaScript
89 lines
1.9 KiB
JavaScript
import jwt from 'jsonwebtoken'
|
|
import bcrypt from 'bcrypt'
|
|
import config from '../config.js'
|
|
import User from '../models/user.js'
|
|
|
|
export function hashPassword(password) {
|
|
return bcrypt.hash(password, 10)
|
|
}
|
|
|
|
export async function createTestUser() {
|
|
let user = await User.findOne({ username: 'alex' })
|
|
if (!user) {
|
|
user = new User({
|
|
username: 'alex',
|
|
email: 'alex@example.com',
|
|
})
|
|
user.hashedPassword = await hashPassword('123456')
|
|
await user.save()
|
|
}
|
|
}
|
|
|
|
export function genJWT(payload) {
|
|
return new Promise((resolve, reject) => {
|
|
jwt.sign(
|
|
payload,
|
|
config.jwtSecret,
|
|
{ expiresIn: config.containerExpiry },
|
|
(err, token) => {
|
|
if (err) {
|
|
reject(err)
|
|
} else {
|
|
resolve(token)
|
|
}
|
|
}
|
|
)
|
|
})
|
|
}
|
|
|
|
export function verifyJWT(token) {
|
|
return new Promise((resolve, reject) => {
|
|
jwt.verify(token, config.jwtSecret, (err, decoded) => {
|
|
if (err) {
|
|
reject(err)
|
|
} else {
|
|
resolve(decoded)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
export function isValidUsername(username) {
|
|
// Define a regular expression pattern for a valid Linux username.
|
|
const usernamePattern = /^[a-z][a-z0-9_-]*$/
|
|
|
|
// Test the username against the pattern.
|
|
if (!usernamePattern.test(username)) return false
|
|
|
|
// check if the username is between 1 and 32 characters
|
|
if (username.length < 4 || username.length > 32) {
|
|
return false
|
|
}
|
|
|
|
const reservedWords = [
|
|
'root',
|
|
'admin',
|
|
'administrator',
|
|
'sysadmin',
|
|
'system',
|
|
'daemon',
|
|
'bin',
|
|
'nobody',
|
|
'nogroup',
|
|
'guest',
|
|
'user',
|
|
]
|
|
if (reservedWords.includes(username)) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
export function isValidEmail(email) {
|
|
// Define a regular expression pattern for a valid email address.
|
|
const emailPattern = /^[\w-.+]+@([\w][\w-]*\.)+[\w-]{2,}$/
|
|
|
|
// Test the email against the pattern.
|
|
return emailPattern.test(email)
|
|
}
|