Torznab + fake qBittorrent proxy for Webshare.cz, with Compose/Docker packaging, MIT license, and tests.
36 lines
1.1 KiB
JavaScript
36 lines
1.1 KiB
JavaScript
const { passwordDigest } = require('../src/md5crypt');
|
|
|
|
describe('passwordDigest', () => {
|
|
it('returns a 40-char hex string', () => {
|
|
expect(passwordDigest('password', 'salt')).toMatch(/^[0-9a-f]{40}$/);
|
|
});
|
|
|
|
it('is deterministic', () => {
|
|
expect(passwordDigest('mypass', 'mysalt')).toBe(passwordDigest('mypass', 'mysalt'));
|
|
});
|
|
|
|
it('differs for different passwords', () => {
|
|
expect(passwordDigest('pass1', 'salt')).not.toBe(passwordDigest('pass2', 'salt'));
|
|
});
|
|
|
|
it('differs for different salts', () => {
|
|
expect(passwordDigest('pass', 'salt1')).not.toBe(passwordDigest('pass', 'salt2'));
|
|
});
|
|
|
|
it('strips $1$ prefix from salt', () => {
|
|
expect(passwordDigest('pass', '$1$salt')).toBe(passwordDigest('pass', 'salt'));
|
|
});
|
|
|
|
it('truncates salt to 8 characters', () => {
|
|
expect(passwordDigest('pass', 'salt1234extra')).toBe(passwordDigest('pass', 'salt1234'));
|
|
});
|
|
|
|
it('handles empty password', () => {
|
|
expect(passwordDigest('', 'salt')).toMatch(/^[0-9a-f]{40}$/);
|
|
});
|
|
|
|
it('handles empty salt', () => {
|
|
expect(passwordDigest('pass', '')).toMatch(/^[0-9a-f]{40}$/);
|
|
});
|
|
});
|