stackpress
Version:
Incept is a content management framework.
39 lines (38 loc) • 1.23 kB
JavaScript
import { toResponse } from '../../sql/helpers.js';
import { authorize, unauthorized } from '../helpers.js';
export default async function APIToken(req, res, ctx) {
if (res.body || (res.code && res.code !== 200)) {
return;
}
const authorization = authorize(req, res);
if (!authorization) {
return;
}
const { id, secret } = authorization;
const code = req.data('code');
if (!code || !secret) {
return unauthorized(res);
}
const session = await ctx.resolve('session-detail', { id: code });
const data = session.results;
if (!data || data.applicationId !== id) {
return unauthorized(res);
}
else if (data.expires && data.expires.getTime() < Date.now()) {
return unauthorized(res);
}
res.fromStatusResponse(toResponse({
token_type: 'Bearer',
access_token: data.id,
access_secret: data.secret,
expires_in: data.expires
? Math.floor((data.expires.getTime() - Date.now()) / 1000)
: 0,
user: {
id: data.profile.id,
name: data.profile.name,
image: data.profile.image,
created: data.profile.created
}
}));
}