
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
@yaacl/hapi
Advanced tools
Provides a plugin for hapi to integrate yaacl on route and/or handler level.
Install yarn add @yaacl/core @yaacl/hapi @yaacl/memory-adapter
or use @yaacl/mongoose-adapter
instead.
import { Privileges } from '@yaacl/core';
import { MemoryAdapter } from '@yaacl/memory-adapter';
import * as Hapi from 'hapi';
import { forbidden } from 'boom';
// ...setup server
// normally these would come from the session for example.
const exampleIdentities = [
{
getSecurityId: () => 'user-1',
},
{
getSecurityId: () => 'user-2',
},
];
// register plugin on server
await server.register({
plugin,
options: {
adapter: new MemoryAdapter(),
securityIdentityResolver: request => {
// return one or an array of SecurityIdentity objects
// which you can generate from request data.
return exampleIdentities;
},
},
});
// setting privileges on a route activates acl
// for the path/method of the route.
const securedRoute = server.route({
path: '/secured',
method: 'get',
options: {
plugins: {
yaacl: {
privileges: Privileges.READ,
},
},
},
handler: () => 'Seems like you have access to this site!',
});
// instead of using the path/method as identity,
// you can define groups.
const adminRoutes = [
{
path: '/admin/list',
method: 'get',
options: {
plugins: {
yaacl: {
group: 'admins',
privileges: Privileges.READ,
},
},
},
handler: () => 'Seems like you have access to this site!',
},
{
path: '/admin/delete',
method: 'get',
options: {
plugins: {
yaacl: {
group: 'admins',
privileges: Privileges.READ | Privileges.REMOVE,
},
},
},
handler: request => {
// for more fine grained checks, you have access to yaacl inside of handlers too!
const granted = await request.server.plugins.yaacl.api.isGranted(
exampleIdentities[0],
someOtherObjectIdentity,
Privileges.REMOVE,
);
if (granted) {
// you also have access to the actual resolved securityIdentity and objectIdentity
// through request.plugins.yaacl!
const { securityIdentity, objectIdentity } = request.plugins.yaacl;
return `Deleted ${objectIdentity.getSecurityId()} by ${objectIdentity.getObjectId()}`;
}
throw forbidden();
},
},
];
// add the routes of course!
server.route([...adminRoutes, securedRoute]);
// to set privileges for routes, use the plugin helper to turn a route into an object identity.
await server.plugins.yaacl.api.grant(
exampleIdentities[0],
server.plugins.yaacl.getRouteIdentity(securedRoute),
);
For a more detailed documentation please visit our Wiki.
FAQs
YAACL integration for hapi
We found that @yaacl/hapi demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.