
Security News
/Research
Wallet-Draining npm Package Impersonates Nodemailer to Hijack Crypto Transactions
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
gdpr-guard
Advanced tools
Simple GDPR manager
This library helps you build a GPDR compliant system by providing you easy to manipulate interfaces.
There are a handful of libraries to help you along the way:
gdpr-guard
as efficiently and easily as possible, based on data provided in the DOMUsing ES6-style imports:
import {
//most useful
GdprStorage,
GdprManagerBuilder,
GdprDeserializer,
//helpers
makeGuard,
visitGdpr,
GdprGuardGroup,
GdprManager,
GdprSerializer,
GdprSaviorAdapter,
} from "gdpr-guard"
Using node style require:
const {
//most useful
GdprStorage,
GdprManagerBuilder,
GdprDeserializer,
//helpers
makeGuard,
visitGdpr,
GdprGuardGroup,
GdprManager,
GdprSerializer,
GdprSaviorAdapter,
} = require("gdpr-guard");
Directly from your browser:
const {
//most useful
GdprStorage,
GdprManagerBuilder,
GdprDeserializer,
//helpers
makeGuard,
visitGdpr,
GdprGuardGroup,
GdprManager,
GdprSerializer,
GdprSaviorAdapter,
} = gdprGuard;
The name
used for guards and groups must be unique! This is the identifier/key that binds it.
The wide concept of guard
is that a guard
is an entity that can be toggled to allow/deny some functionalities.
You can check the documentations here
This is an enum-like type that lists the available storage options, these include:
GdprManagerBuilder
provides a nice and easy to write/read way to create a GdprManager
object from the groun up.
For instance you can use it like this:
const manager = GdprManagerBuilder
.make()
.startRequiredGroup(GdprStorage.Cookie, "Functionalities", "Information purely used for the user's experience")
// This is a group that by default uses cookies for storage, every option and the group itself is required
.withEnabledGuard("PHP_SESSID", "Server session identifier")
.startGuard()
.withName("theme")
.withDescription("User's current colors' theme")
.storedIn(GdprStorage.LocalStorage)
.endGuard()
.endGroup()
.startGroup(GdprStorage.Cookie, "Advertisement", "Tracking-based avertisement informations")
.startGroup(GdprStorage.Cookie, "Advertisement : Local", "Sitewide advertisement informations")
// [...]
.endGroup()
.startGroup(GdprStorage.Cookie, "Advertisement : 3rd-party", "3rd-party advertisement informations")
// [...]
.endGroup()
.endGroup()
.build();
console.log(manager.raw()); // inspect useful information
GdprDeserializer
allows you to retrieve a gdpr object from its raw
representation.
import { GdprManagerBuilder, GdprDeserializer } from "gdpr-guard"
// [...]
const manager = GdprManagerBuilder.make()
// [...]
.build();
const raw = manager.raw();
//store in local storage
const raw = //get from local storage
const manager = GdprDeserializer.manager(raw);
if (manager === null) { //failed deserialization
//handle error
return;
}
// here, both managers are equivalent
A GdprManager
manages a list of GdprGuardGroup
. You can :
raw()
)addGroup(guardGroup)
and createGroup(name, description)
)hasGuard(name)
)getGuard(name)
)hasGroup(name)
)getGroup(name)
)isEnabled(name)
)enable()
)disable()
)toggle()
)enableForStorage(gdprStorage)
)disableForStorage(gdprStorage)
)toggleForStorage(gdprStorage)
)A GdprGuardGroup
manages a list of GdprGuard
(which includes raw guards, GdprGuardGroup
and GdprManager
although
one would not recommend to put managers inside managers).
You can:
makeRequired()
)raw()
)hasGuard(name)
)getGuard(name)
)isEnabled(name)
)enable()
)disable()
)toggle()
)enableForStorage(gdprStorage)
)disableForStorage(gdprStorage)
)toggleForStorage(gdprStorage)
)makeGuard
is a function that creates the simplest guard possible, it has the following signature:
declare function makeGuard(name: string, description: string, storage?: GdprStorage, required?: boolean, enabled?: boolean | null): GdprGuard;
A class that implements most of the behavior for the Savior API.
abstract class GdprSaviorAdapter implements GdprSavior {
public abstract restore(shouldUpdate?: boolean): Promise<GdprManager | null>;
public abstract store(manager: GdprManagerRaw): Promise<boolean>;
public abstract updateSharedManager(manager: GdprManager): Promise<void>;
}
This API helps saving and restoring the manager state. It is exposed mainly for library authors as it helps creating various bindings for frameworks.
This is the interface:
interface GdprSavior {
restore(shouldUpdate?: boolean): Promise<GdprManager | null>;
exists(shouldUpdate?: boolean): Promise<boolean>;
restoreOrCreate(factory: GdprManagerFactory): Promise<GdprManager>;
store(manager: GdprManagerRaw): Promise<boolean>;
storeIfNotExists(manager: GdprManagerRaw): Promise<boolean>;
updateSharedManager(manager: GdprManager): Promise<void>;
check(): Promise<void>;
}
This API helps reacting to the user confirming their choices from a GDPR banner.
type GdprManagerEventHandler = () => void;
interface GdprManagerEventHub {
onEnable(guardName: string, callback: GdprManagerEventHandler): this;
onDisable(guardName: string, callback: GdprManagerEventHandler): this;
enable(guardName: string): this;
disable(guardName: string): this;
}
interface GdprManager {
bannerWasShown: boolean;
events: GdprManagerEventHub;
resetAndShowBanner(): void;
closeBanner();
}
The goal is to call Manager#closeBanner
when the user confirm their choices from the banner, which in turn will
trigger the appropriate events (so you can load scripts dynamically for instance).
This API allows you to visit your manager's entire guard tree easily.
interface GdprVisitor {
onManager(manager: GdprManager): void;
onGroup(group: GdprGuardGroup): void;
onGuard(guard: GdprGuard): void;
onEach(guard: GdprGuard): void;
}
declare function visitGdpr(guard: GdprGuard, visitor?: Partial<GdprVisitor>);
This API allows you to decorate the manager instance that is created or restored when using the Savior API.
As such the Savior API has been extended/augmented with the following:
type GdprManagerDecorator = (manager: GdprManager) => GdprManager;
interface GdprSavior {
decorate?: GdprManagerDecorator;
}
abstract class GdprSaviorAdapter implements GdprSavior {
constructor(protected decorator: GdprManagerDecorator|undefined = undefined) {}
public abstract restore(shouldUpdate?: boolean): Promise<GdprManager | null>;
public abstract store(manager: GdprManagerRaw): Promise<boolean>;
public abstract updateSharedManager(manager: GdprManager): Promise<void>;
};
If you need any help, you're more than welcome on my official Discord server dedicated to my open-source projects.
FAQs
Simple GDPR manager
The npm package gdpr-guard receives a total of 2 weekly downloads. As such, gdpr-guard popularity was classified as not popular.
We found that gdpr-guard 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.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.