Files
apollo/packages/test-e2e-composition/apollo-server/connectors/users.js
T
2019-12-01 02:50:02 +01:00

80 lines
1.7 KiB
JavaScript

const shortid = require('shortid')
const users = [
{
id: '__bot',
email: 'bot@bot.com',
password: 'bot',
nickname: 'The Bot',
tokens: []
}
]
exports.register = (input, context) => {
if (users.find(u => u.email === input.email)) {
throw new Error('Email already used')
}
return new Promise((resolve) => {
setTimeout(() => {
users.push({
id: shortid(),
email: input.email,
password: input.password,
nickname: input.nickname,
tokens: [],
})
resolve(true)
}, 100)
})
}
exports.login = ({ email, password }, context) => {
const user = users.find(
u => u.email === email && u.password === password
)
if (!user) throw new Error('User not found')
const token = {
id: shortid(),
userId: user.id,
expiration: Date.now() + 24 * 3600 * 1000,
}
user.tokens.push(token)
return {
user,
token,
}
}
exports.logout = (context) => {
if (context.userId && context.token) {
const user = exports.getOne(context.userId)
if (user) {
const index = user.tokens.findIndex(t => t.id === context.token.id)
if (index !== -1) user.tokens.splice(index, 1)
}
}
return true
}
exports.getOne = (id, context) => {
return users.find(u => u.id === id)
}
exports.validateToken = (token) => {
const user = exports.getOne(token.userId)
if (user) {
const storedToken = user.tokens.find(t => t.id === token.id)
if (storedToken) {
return storedToken.expiration === token.expiration && storedToken.expiration > Date.now()
}
}
return false
}
exports.current = (context) => {
if (!context.userId) throw new Error('Unauthorized')
return exports.getOne(context.userId, context)
}