Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
puppetarazzi
Advanced tools
Takes screenshots of your website and annoys you by pointing out your flaws (mixed-content, uncompressed content, 404s, etc)"
v0.2.21
Copyright 2020 Nic Jansma
Licensed under the MIT license
Puppetarazzi uses puppeteer to load your site's pages in a headless Chrome browser in various simulated device resolutions, taking screenshots and capturing HAR files for each page/device combo.
While it's there, it'll do a check-up on your site's content and will annoy you by pointing out any flaws (mixed-content warnings, uncompressed content, 404s, etc).
Puppetarazzi contains a light-weight plugin infrastructure to easily add new checks, and each plugin can be enabled as needed.
analytics
: Verifies that analytics services send beacons for the page hitasset-compression
: Verifies that specific types of content are compressed with
the required methodbasic
: Basic page validation (the response is 200 OK with content)caching
: Verifies that on a soft reload, all content is served from the disk
cache, and that Cache-Control
headers existhar
: Writes HAR files for each page loadhsts
: Verifies HTTP Strict Transport Security is enabledicons
: Validates that rel='icon'
, rel='apple-touch-icon'
and
msapplication-TileImage
icons existimg-alt
: Verifies all <img>
have alt=
attributesmeta
: Verifies the specified <meta>
tags existmixed-content
: Verifies there are no Mixed-Content warningsno-404s
: Verifies there are no 404sno-redirects
: Verifies there weren't any redirects on the pageopengraph
: Verifies pages have OpenGraph (and other) structured contentpwa
: Verifies some of the Progressive Web App requirementsrel-canonical
: Verifies tag existsrel-search
: Verifies tag existsrss
: Verifies RSS <link rel='alternate'>
tags exist and the URL worksschema
: Verifies schema.org types existscreenshots
: Takes screenshots for each page and devicetao
: Verifies all assets have Timing-Allow-Origin
setVia npm:
npm install --global puppetarazzi
puppetarazzi [config.json]
Example configuration below:
{
"name": "my-site",
"root": "https://my-site.com",
"verbose": true,
"junit": "junit.xml",
"postLoadSleep": 2000,
"reloadAll": false,
"plugins": {
"basic": {},
"analytics": {
"require": [
{ "name": "google", "match": "google-analytics\\.com\\/.*\\/?collect.*" },
{ "name": "mPulse", "match": ".*akstat\\.io\\/*" }
]
},
"asset-compression": {
"types": ["text/javascript", "text/css"],
"encoding": ["gzip", "br"],
"exclude": []
},
"caching": {
"exclude": [
"google-analytics\\.com\/collect",
"c\\.go-mpulse\\.net\\/api\\/config\\.json",
"\\.akstat\\.io\\/",
],
"page": true
},
"har": {
"output": "saved"
},
"hsts": {},
"icons": {
"required": [
{ "rel": "apple-touch-icon", "sizes": null },
{ "rel": "apple-touch-icon", "sizes": "72x72" },
{ "rel": "apple-touch-icon", "sizes": "114x114" },
{ "rel": "apple-touch-icon", "sizes": "144x144" },
{ "rel": "icon", "sizes": "16x16" },
{ "rel": "icon", "sizes": "32x32" },
{ "rel": "icon", "sizes": "48x48" },
{ "rel": "icon", "sizes": "64x64" },
{ "rel": "icon", "sizes": "96x96" }
],
"tile": true
},
"img-alt": {
"exclude": [
"something\\.com",
],
},
"meta": {
"required": [
{ "name": "msapplication-TileColor"},
{ "http-equiv": "Content-Type"},
{ "name": "robots", "content": "index,follow" },
{ "name": "description" },
{ "name": "viewport", "content": "width=device-width, initial-scale=1.0" }
]
},
"mixed-content": {
"warnings": true
},
"no-404s": {},
"no-redirects": {
"exclude": [
"something\\.com",
],
},
"opengraph": {
"testImage": true,
"twitter": true
},
"pwa": {
"sw": true
},
"rel-canonical": {
"https": true
},
"rel-search" : {},
"rss": {
"test": true
},
"schema": {
"require": [
"http://schema.org/WebPage",
"http://schema.org/Organization",
"http://schema.org/Article"
]
},
"screenshots": {
"output": "saved",
"atf": true,
"full": true
},
"tao": {
"exclude": []
}
},
"pages": [
{ "name": "home", "path": "/", "reload": true },
{ "name": "blog", "path": "/blog/" }
],
"devices": [
{ "name": "desktop-1920", "width": 1920, "height": 1080 },
{ "name": "desktop-1440", "width": 1440, "height": 900 },
{ "name": "desktop-1280", "width": 1280, "height": 800 },
{ "name": "desktop-1024", "width": 1024, "height": 768 },
{ "name": "ipad", "width": 768, "height": 1024 },
{ "name": "ipad-pro", "width": 1024, "height": 1366 },
{ "name": "iphone", "width": 375, "height": 667 },
{ "name": "iphone-plus", "width": 414, "height": 736 },
{ "name": "iphone-x", "width": 375, "height": 812 },
{ "name": "iphone-5", "width": 320, "height": 568 },
{ "name": "galaxy-s5", "width": 360, "height": 640 },
{ "name": "nexus-5x", "width": 412, "height": 732 },
{ "name": "galaxy-s8", "width": 360, "height": 740 },
{ "name": "galaxy-note-5", "width": 480, "height": 853 },
{ "name": "galaxy-tab-10", "width": 800, "height": 1280 },
{ "name": "kindle-fire-hdx", "width": 800, "height": 1280 }
],
// if launching from a Docker container
"puppeteerOptions": {
"args": [
"--no-sandbox",
"--disable-setuid-sandbox"
]
}
}
Each plugin (in plugins/*.js
) has documentation on its options.
Global options:
name
- Site nameroot
- Root URLverbose
- Whether or not to log verbose messages (default: false)junit
- jUnit XML file location (optional)postLoadSleep
- How many milliseconds to delay after load before running checks (optional)reloadAll
- Whether or not to trigger a reload of each page. Some plugins
require this for their checks, e.g. asset-compression
(default: false)plugins
- Each enabled plugin should be listed with its optionspages
- A list of name
, path
and reload
(optional) pairsdevices
- A list of name
, width
and height
pairspuppeteerOptions
- Options to pass to puppeteer.launch()
meta
: Fix page-specific overrides when additional non-overwritten pages followmeta
: Added page-specific overridespuppeteerOptions
as a config JSON option for arguments to pass to puppeteer.launch()
no-redirects
, img-alt
: Fixes for exclude
if not specifiedno-redirects
: Adds exclude
optionimg-alt
: Fixes exclude
optionasset-compression
: Ignore data:
URIsasset-compression
: Allow exclude
img-alt
, tao
, icons
, caching
: Minor bug fixespostLoadSleep
is configured, sleep for the reload toohar
: Another fix for clearing old entrieshar
: Was never clearing old entrieshar
: Upgraded to latest chrome-har
package to fix invalid har filesimg-alt
: Has exclude
optionschema
: Fix for page-specific overrides not updating the global configasset-compression
: Fix for missing Content-Typebasic
: Allow for a 304 responsecaching
: Allow for 304 on the page navigateno-redirects
addedopengraph
: Log failure if foundtao
: Don't fail if no TAO on same domain as navigatepuppetarazzi
: Navigate to about:blank in between pagestao
, caching
: Skip data:
URIasset-compression
: Bug fixesimg-alt
: Share the missing URLs on failurerss
: Share failure messageschema
: Allow per-page configtao
: Skip destination pagebasic
, hsts
, icons
, img-alt
, meta
, rel-search
, rss
, tao
asset-compression
: Match Content-Types with ";' in themcaching
: Report separately on page vs asset compression (optional)caching
: Report on Cache-Control
headersopengraph
: Only run testImage
if the URL existspwa
: Option to disable ServiceWorker detectionFAQs
Takes screenshots of your website and annoys you by pointing out your flaws (mixed-content, uncompressed content, 404s, etc)"
We found that puppetarazzi demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers 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
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.