mirror of
https://github.com/navidrome/navidrome.git
synced 2026-10-11 11:57:12 +02:00
15 lines
492 B
JavaScript
15 lines
492 B
JavaScript
|
|
const API_KEY_PREFIX = 'nds_'
|
||
|
|
const ALPHABET =
|
||
|
|
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
|
||
|
|
const KEY_LENGTH = 22
|
||
|
|
|
||
|
|
// Bytes >= 248 are dropped so every character is equally likely (248 = 4 * 62).
|
||
|
|
export const generateApiKey = () => {
|
||
|
|
let key = ''
|
||
|
|
while (key.length < KEY_LENGTH) {
|
||
|
|
for (const b of window.crypto.getRandomValues(new Uint8Array(32))) {
|
||
|
|
if (b < 248 && key.length < KEY_LENGTH) key += ALPHABET[b % 62]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return API_KEY_PREFIX + key
|
||
|
|
}
|