{"version":3,"sources":["jsdelivr-header.js","/npm/hapi-route-acl@1.0.3/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACJA,IAAI,KAAO,QAAQ,QACf,KAAO,QAAQ,QACf,EAAI,QAAQ,UAIZ,UAAY,CAChB,WAAuB,gBAEvB,QAAQ,SAAW,SAAU,EAAQ,EAAS,GACxC,EAAE,YAAY,EAAQ,iBACxB,EAAK,IAAI,MAAM,wCACL,EAAE,WAAW,EAAQ,kBAG/B,UAAU,gBAAkB,EAAQ,gBACpC,EAAO,IAAI,aAAc,UAAU,gBACnC,KAJA,EAAK,IAAI,MAAM,oDAMnB,EAEA,QAAQ,SAAS,WAAa,CAC5B,IAAK,QAAQ,mBAGf,UAAU,eAAiB,SAAS,EAAS,GAC3C,GAAK,EAAE,QAAQ,EAAQ,MAAM,SAAS,QAAQ,UAAU,aAiBtD,OAAO,EAAM,WAfb,IAAI,EAAsB,EAAQ,MAAM,SAAS,QAAQ,UAAU,YAAY,YAE/E,GAAK,EAAE,QAAQ,GAUb,OAAO,EAAM,WATb,UAAU,gBAAgB,EAAQ,KAAK,aAAa,SAAS,EAAO,GAElE,OADoB,UAAU,iBAAiB,EAAqB,GAE3D,EAAM,WAEN,EAAM,KAAK,aAAa,iBAEnC,GAON,EAEA,UAAU,iBAAmB,SAAS,EAAqB,GACrD,EAAE,SAAS,KACb,EAAsB,CAAC,IAGzB,IAAI,EAAgB,CAAC,EAwBrB,OAtBA,EAAE,QAAQ,GAAqB,SAAS,GACtC,KAAK,OAAO,EAAE,SAAS,GAAqB,+BAE5C,IAAI,EAAQ,EAAmB,MAAM,KAErC,KAAK,OAAwB,IAAjB,EAAM,OAAc,uEAEhC,IAAI,EAAY,EAAM,GAClB,EAAO,EAAM,GAEb,EAAE,YAAY,EAAgB,KAAe,EAAE,YAAY,EAAgB,GAAW,IACxF,EAAc,IAAsB,EAEpC,EAAc,GAAsB,EAAgB,GAAW,EAEnE,IAEoB,EAAE,OAAO,GAAe,SAAS,EAAQ,GAE3D,OADA,EAAS,GAAU,CAErB,GAGF","file":"/npm/hapi-route-acl@1.0.3/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/hapi-route-acl@1.0.3/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// Load modules\n\nvar Boom = require('boom');\nvar Hoek = require('hoek');\nvar _ = require('lodash');\n\n// Declare internals\n\nvar internals = {};\ninternals.pluginName = 'hapiRouteAcl';\n\nexports.register = function (server, options, next) {\n  if (_.isUndefined(options.permissionsFunc)) {\n    next(new Error('options.permissionsFunc is required'));\n  } else if (!_.isFunction(options.permissionsFunc)) {\n    next(new Error('options.permissionsFunc must be a valid function'));\n  } else {\n    internals.permissionsFunc = options.permissionsFunc;\n    server.ext('onPostAuth', internals.implementation);\n    next();\n  }\n};\n\nexports.register.attributes = {\n  pkg: require('./package.json')\n};\n\ninternals.implementation = function(request, reply) {\n  if (!_.isEmpty(request.route.settings.plugins[internals.pluginName])) {\n\n    var requiredPermissions = request.route.settings.plugins[internals.pluginName].permissions;\n\n    if (!_.isEmpty(requiredPermissions)) {\n      internals.permissionsFunc(request.auth.credentials, function(error, userPermissions) {\n        var hasPermission = internals.checkPermissions(requiredPermissions, userPermissions);\n        if (hasPermission) {\n          return reply.continue();\n        } else {\n          return reply(Boom.unauthorized('Access denied'));\n        }\n      });\n    } else {\n      return reply.continue();\n    }\n  } else {\n    return reply.continue();\n  }\n};\n\ninternals.checkPermissions = function(requiredPermissions, userPermissions) {\n  if (_.isString(requiredPermissions)) {\n    requiredPermissions = [requiredPermissions];\n  }\n\n  var permissionMap = {};\n\n  _.forEach(requiredPermissions, function(requiredPermission) {\n    Hoek.assert(_.isString(requiredPermission), 'permission must be a string');\n\n    var parts = requiredPermission.split(':');\n\n    Hoek.assert(parts.length === 2, 'permission must be formatted: [routeName]:[read|create|edit|delete]');\n\n    var routeName = parts[0];\n    var crud = parts[1];\n\n    if (_.isUndefined(userPermissions[routeName]) || _.isUndefined(userPermissions[routeName][crud])) {\n      permissionMap[requiredPermission] = false;\n    } else {\n      permissionMap[requiredPermission] = userPermissions[routeName][crud];\n    }\n  });\n\n  var hasPermission = _.reduce(permissionMap, function(result, permission) {\n    result = result && permission;\n    return result;\n  });\n\n  return hasPermission;\n};\n"]}