@@ -2,8 +2,7 @@ module.exports = `/*
22* This rule been automatically generated by auth0-authz-extension
33* Updated by <%= userName %>, <%= updateTime() %>
44 */
5- function (user, context, callback) {
6- var _ = require('lodash');
5+ async function (user, context, callback) {
76 var EXTENSION_URL = "<%= extensionUrl %>";
87
98 var audience = '';
@@ -17,35 +16,6 @@ function (user, context, callback) {
1716 return callback(new UnauthorizedError('no_end_users'));
1817 }
1918
20- getPolicy(user, context, function(err, res, data) {
21- if (err) {
22- console.log('Error from Authorization Extension:', err);
23- return callback(new UnauthorizedError('Authorization Extension: ' + err.message));
24- }
25-
26- if (res.statusCode !== 200) {
27- console.log('Error from Authorization Extension:', res.body || res.statusCode);
28- return callback(
29- new UnauthorizedError('Authorization Extension: ' + ((res.body && (res.body.message || res.body) || res.statusCode)))
30- );
31- }
32-
33- // Update the user object.<% if (config.groupsInToken && !config.groupsPassthrough) { %>
34- user.groups = data.groups;<% } %><% if (config.groupsInToken && config.groupsPassthrough) { %>
35- user.groups = mergeRecords(user.groups, data.groups);<% } %><% if (config.rolesInToken && !config.rolesPassthrough) { %>
36- user.roles = data.roles;<% } %><% if (config.rolesInToken && config.rolesPassthrough) { %>
37- user.roles = mergeRecords(user.roles, data.roles);<% } %><% if (config.permissionsInToken && !config.permissionsPassthrough) { %>
38- user.permissions = data.permissions;<% } %><% if (config.permissionsInToken && config.permissionsPassthrough) { %>
39- user.permissions = mergeRecords(user.permissions, data.permissions);<% } %>
40- <% if (config.persistGroups || config.persistRoles || config.persistPermissions) { %>
41- // Store this in the user profile (app_metadata).
42- saveToMetadata(user, data.groups, data.roles, data.permissions, function(err) {
43- return callback(err, user, context);
44- });
45- <% } else { %>
46- return callback(null, user, context);
47- <% } %> });
48-
4919 // Convert groups to array
5020 function parseGroups(data) {
5121 if (typeof data === 'string') {
@@ -56,22 +26,27 @@ function (user, context, callback) {
5626 }
5727
5828 // Get the policy for the user.
59- function getPolicy(user, context, cb) {
60- request.post({
61- url: EXTENSION_URL + "/api/users/" + user.user_id + "/policy/" + context.clientID,
62- headers: {
63- "x-api-key": configuration.AUTHZ_EXT_API_KEY
64- },
65- json: {
66- connectionName: context.connection || user.identities[0].connection,
67- groups: parseGroups(user.groups)
68- },
69- timeout: 5000
70- }, cb);
29+ function getPolicy(user, context) {
30+ return new Promise((resolve, reject) => {
31+ request.post({
32+ url: EXTENSION_URL + "/api/users/" + user.user_id + "/policy/" + context.clientID,
33+ headers: {
34+ "x-api-key": configuration.AUTHZ_EXT_API_KEY
35+ },
36+ json: {
37+ connectionName: context.connection || user.identities[0].connection,
38+ groups: parseGroups(user.groups)
39+ },
40+ timeout: 5000
41+ }, (err, res, data) => {
42+ if (err) return reject(err);
43+ resolve({ res, data });
44+ });
45+ });
7146 }<% if (config.persistGroups || config.persistRoles || config.persistPermissions) { %>
7247
7348 // Store authorization data in the user profile so we can query it later.
74- function saveToMetadata(user, groups, roles, permissions, cb ) {
49+ async function saveToMetadata(user, groups, roles, permissions) {
7550 user.app_metadata = user.app_metadata || {};
7651 user.app_metadata.authorization = {<% if (config.persistGroups && !config.groupsPassthrough) { %>
7752 groups: groups,<% } %><% if (config.persistGroups && config.groupsPassthrough) { %>
@@ -82,24 +57,46 @@ function (user, context, callback) {
8257 permissions: mergeRecords(user.permissions, permissions)<% } %>
8358 };
8459
85- auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
86- .then(function() {
87- cb();
88- })
89- .catch(function(err){
90- cb(err);
91- });
60+ await auth0.users.updateAppMetadata(user.user_id, user.app_metadata);
9261 }<% } %><% if (config.groupsPassthrough || config.rolesPassthrough || config.permissionsPassthrough) { %>
9362
9463 // Merge the IdP records with the records of the extension.
9564 function mergeRecords(idpRecords, extensionRecords) {
96- idpRecords = idpRecords || [ ];
97- extensionRecords = extensionRecords || [ ];
65+ idpRecords = idpRecords || [];
66+ extensionRecords = extensionRecords || [];
9867
9968 if (!Array.isArray(idpRecords)) {
10069 idpRecords = idpRecords.replace(/,/g, ' ').replace(/\\s+/g, ' ').split(' ');
10170 }
10271
103- return _.uniq(_.union( idpRecords, extensionRecords)) ;
72+ return [...new Set([... idpRecords, ... extensionRecords])] ;
10473 }<% } %>
74+
75+ try {
76+ const { res, data } = await getPolicy(user, context);
77+
78+ if (res.statusCode !== 200) {
79+ console.log('Error from Authorization Extension:', res.body || res.statusCode);
80+ return callback(
81+ new UnauthorizedError('Authorization Extension: ' + ((res.body && (res.body.message || res.body)) || res.statusCode))
82+ );
83+ }
84+
85+ // Update the user object.<% if (config.groupsInToken && !config.groupsPassthrough) { %>
86+ user.groups = data.groups;<% } %><% if (config.groupsInToken && config.groupsPassthrough) { %>
87+ user.groups = mergeRecords(user.groups, data.groups);<% } %><% if (config.rolesInToken && !config.rolesPassthrough) { %>
88+ user.roles = data.roles;<% } %><% if (config.rolesInToken && config.rolesPassthrough) { %>
89+ user.roles = mergeRecords(user.roles, data.roles);<% } %><% if (config.permissionsInToken && !config.permissionsPassthrough) { %>
90+ user.permissions = data.permissions;<% } %><% if (config.permissionsInToken && config.permissionsPassthrough) { %>
91+ user.permissions = mergeRecords(user.permissions, data.permissions);<% } %>
92+
93+ <% if (config.persistGroups || config.persistRoles || config.persistPermissions) { %>
94+ await saveToMetadata(user, data.groups, data.roles, data.permissions);
95+ <% } %>
96+
97+ return callback(null, user, context);
98+ } catch (err) {
99+ console.log('Error from Authorization Extension:', err);
100+ return callback(new UnauthorizedError('Authorization Extension: ' + err.message));
101+ }
105102}` ;
0 commit comments