Initial commit: webshare-api

Torznab + fake qBittorrent proxy for Webshare.cz, with Compose/Docker
packaging, MIT license, and tests.
This commit is contained in:
2026-08-07 08:37:10 +02:00
commit 3fcadfe973
19 changed files with 2047 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
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}$/);
});
});