UNPKG

@strongnguyen/oidc-provider

Version:

OAuth 2.0 Authorization Server implementation for Node.js with OpenID Connect

30 lines (24 loc) 962 B
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); };