import util from 'node:util'
import crypto from 'node:crypto'
import passportJWT from 'passport-jwt'

const randomBytes = util.promisify(crypto.randomBytes)

export function sanitizeCommitUser (user) {
  // let wlist = new RegExp('[^a-zA-Z0-9-_.\',& ' + appdata.regex.cjk + appdata.regex.arabic + ']', 'g')
  // return {
  //   name: _.chain(user.name).replace(wlist, '').trim().value(),
  //   email: appconfig.git.showUserEmail ? user.email : appconfig.git.serverEmail
  // }
}

/**
 * Generate a random token
 *
 * @param {any} length
 * @returns
 */
export async function generateToken (length) {
  return (await randomBytes(length)).toString('hex')
}

export const extractJWT = passportJWT.ExtractJwt.fromExtractors([
  passportJWT.ExtractJwt.fromAuthHeaderAsBearerToken(),
  (req) => {
    let token = null
    if (req && req.cookies) {
      token = req.cookies['jwt']
    }
    // Force uploads to use Auth headers
    if (req.path.toLowerCase() === '/u') {
      return null
    }
    return token
  }
])