parent
c40b7ff7d4
commit
617998e22b
2 changed files with 87 additions and 0 deletions
@ -0,0 +1,83 @@ |
|||||||
|
import passport from 'passport'; |
||||||
|
import { Strategy as LocalStrategy } from 'passport-local'; |
||||||
|
|
||||||
|
import { dbQuery, sub } from './lib/accessModule'; |
||||||
|
import { stdout } from './lib/shell'; |
||||||
|
|
||||||
|
passport.use( |
||||||
|
'login', |
||||||
|
new LocalStrategy((username, password, done) => { |
||||||
|
stdout(`Attempting passport local strategy [login] for user [${username}]`); |
||||||
|
|
||||||
|
let rows: [ |
||||||
|
userUuid: string, |
||||||
|
userName: string, |
||||||
|
userPasswordHash: string, |
||||||
|
userSalt: string, |
||||||
|
userAlgorithm: string, |
||||||
|
userHashCount: string, |
||||||
|
][]; |
||||||
|
|
||||||
|
try { |
||||||
|
rows = dbQuery( |
||||||
|
`SELECT
|
||||||
|
user_uuid, |
||||||
|
user_name, |
||||||
|
user_password_hash, |
||||||
|
user_salt, |
||||||
|
user_algorithm, |
||||||
|
user_hash_count |
||||||
|
FROM users |
||||||
|
WHERE user_algorithm != 'DELETED' |
||||||
|
AND user_name = '${username}' |
||||||
|
LIMIT 1;`,
|
||||||
|
).stdout; |
||||||
|
} catch (queryError) { |
||||||
|
return done(queryError); |
||||||
|
} |
||||||
|
|
||||||
|
if (!rows.length) { |
||||||
|
return done(null, false); |
||||||
|
} |
||||||
|
|
||||||
|
const { |
||||||
|
0: [userUuid, , userPasswordHash, userSalt, userAlgorithm, userHashCount], |
||||||
|
} = rows; |
||||||
|
|
||||||
|
let encryptResult: { |
||||||
|
user_password_hash: string; |
||||||
|
user_salt: string; |
||||||
|
user_hash_count: number; |
||||||
|
user_algorithm: string; |
||||||
|
}; |
||||||
|
|
||||||
|
try { |
||||||
|
encryptResult = sub('encrypt_password', { |
||||||
|
subModuleName: 'Account', |
||||||
|
subParams: { |
||||||
|
algorithm: userAlgorithm, |
||||||
|
hash_count: userHashCount, |
||||||
|
password, |
||||||
|
salt: userSalt, |
||||||
|
}, |
||||||
|
}).stdout; |
||||||
|
} catch (subError) { |
||||||
|
return done(subError); |
||||||
|
} |
||||||
|
|
||||||
|
const { user_password_hash: inputPasswordHash } = encryptResult; |
||||||
|
|
||||||
|
if (inputPasswordHash !== userPasswordHash) { |
||||||
|
return done(null, false); |
||||||
|
} |
||||||
|
|
||||||
|
const user: User = { |
||||||
|
name: username, |
||||||
|
uuid: userUuid, |
||||||
|
}; |
||||||
|
|
||||||
|
return done(null, user); |
||||||
|
}), |
||||||
|
); |
||||||
|
|
||||||
|
export default passport; |
@ -0,0 +1,4 @@ |
|||||||
|
interface User extends Express.User { |
||||||
|
name: string; |
||||||
|
uuid: string; |
||||||
|
} |
Loading…
Reference in new issue