@strongnguyen/oidc-provider
Version:
OAuth 2.0 Authorization Server implementation for Node.js with OpenID Connect
30 lines (24 loc) • 962 B
JavaScript
const { generate, normalize } = require('../../helpers/user_codes');
const instance = require('../../helpers/weak_cache');
module.exports = async function deviceAuthorizationResponse(ctx, next) {
const { charset, mask, deviceInfo } = instance(ctx.oidc.provider).configuration('features.deviceFlow');
const userCode = generate(charset, mask);
const dc = new ctx.oidc.provider.DeviceCode({
client: ctx.oidc.client,
deviceInfo: deviceInfo(ctx),
params: ctx.oidc.params.toPlainObject(),
userCode: normalize(userCode),
});
ctx.oidc.entity('DeviceCode', dc);
ctx.body = {
device_code: await dc.save(),
user_code: userCode,
verification_uri: ctx.oidc.urlFor('code_verification'),
verification_uri_complete: ctx.oidc.urlFor('code_verification', {
query: { user_code: userCode },
}),
expires_in: dc.expiration,
};
await next();
ctx.oidc.provider.emit('device_authorization.success', ctx, ctx.body);
};