mirror of https://github.com/kern/filepizza
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.2 KiB
JavaScript
59 lines
1.2 KiB
JavaScript
import toppings from './toppings'
|
|
import xkcdPassword from 'xkcd-password'
|
|
|
|
const TOKEN_OPTIONS = {
|
|
numWords: 4,
|
|
minLength: 3,
|
|
maxLength: 20
|
|
}
|
|
|
|
const SHORT_TOKEN_OPTIONS = {
|
|
length: 8,
|
|
chars: '0123456789abcdefghijklmnopqrstuvwxyz'
|
|
}
|
|
|
|
let tokens = {}
|
|
let shortTokens = {}
|
|
|
|
const tokenGenerator = new xkcdPassword()
|
|
tokenGenerator.initWithWordList(toppings)
|
|
|
|
function generateShortToken() {
|
|
var result = '';
|
|
for (var i = SHORT_TOKEN_OPTIONS.length; i > 0; --i)
|
|
result += SHORT_TOKEN_OPTIONS.chars[Math.floor(Math.random() * SHORT_TOKEN_OPTIONS.chars.length)];
|
|
return result;
|
|
}
|
|
|
|
export function create(socket) {
|
|
|
|
return tokenGenerator.generate(TOKEN_OPTIONS).then((parts) => {
|
|
const token = parts.join('/')
|
|
const shortToken = generateShortToken()
|
|
let result = {
|
|
token: token,
|
|
shortToken: shortToken,
|
|
socket: socket
|
|
}
|
|
|
|
tokens[token] = result
|
|
shortTokens[shortToken] = result
|
|
return result
|
|
})
|
|
|
|
}
|
|
|
|
export function find(token) {
|
|
return tokens[token]
|
|
}
|
|
|
|
export function findShort(shortToken) {
|
|
return shortTokens[shortToken.toLowerCase()]
|
|
}
|
|
|
|
export function remove(client) {
|
|
if (client == null) return
|
|
delete tokens[client.token]
|
|
delete shortTokens[client.shortToken]
|
|
}
|