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.
filepizza/src/db.js

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]
}