Compare commits
21 Commits
i18n-testi
...
add-beauti
Author | SHA1 | Date | |
---|---|---|---|
c7937a241a | |||
543099e914 | |||
869833c79b | |||
271cee8bca | |||
3e63b62881 | |||
d01b88520a | |||
4c44a3c510 | |||
81a0fd91c2 | |||
0183c0f4f5 | |||
491d2f9eb0 | |||
2a96893aca | |||
635152fbb1 | |||
e18870916a | |||
ecc215531e | |||
af9ea5c286 | |||
69125a052f | |||
dd35fd643a | |||
38d5f9254f | |||
c9f9cf255b | |||
9b4f84d96c | |||
de91049200 |
95
.gitignore
vendored
95
.gitignore
vendored
@ -3,3 +3,98 @@ Gemfile
|
||||
Gemfile.lock
|
||||
.sass-cache/
|
||||
.DS_Store
|
||||
|
||||
# Created by https://www.gitignore.io/api/node
|
||||
# Edit at https://www.gitignore.io/?templates=node
|
||||
|
||||
### Node ###
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# TypeScript v1 declaration files
|
||||
typings/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variables file
|
||||
.env
|
||||
.env.test
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
|
||||
# next.js build output
|
||||
.next
|
||||
|
||||
# nuxt.js build output
|
||||
.nuxt
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# End of https://www.gitignore.io/api/node
|
||||
|
6
.jsbeautifyrc
Normal file
6
.jsbeautifyrc
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"html": {
|
||||
"indent_with_tabs": true,
|
||||
"indent_handlebars": true
|
||||
}
|
||||
}
|
3
.lintstagedrc
Normal file
3
.lintstagedrc
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"*.html": "bin/html-beautify-check.sh"
|
||||
}
|
16
.travis.yml
16
.travis.yml
@ -1,11 +1,19 @@
|
||||
language: ruby
|
||||
rvm:
|
||||
- 2.4.1
|
||||
matrix:
|
||||
include:
|
||||
- language: ruby
|
||||
rvm: 2.4.1
|
||||
|
||||
# Assume bundler is being used, therefore
|
||||
# the `install` step will run `bundle install` by default.
|
||||
script: ./build.sh
|
||||
script: ./bin/build.sh
|
||||
|
||||
sudo: false # route your build to the container-based infrastructure for a faster build
|
||||
|
||||
cache: bundler # caching bundler gem packages will speed up build
|
||||
|
||||
- language: node_js
|
||||
node_js: v12.7.0
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
script: npm run format-test:html
|
10
README.md
10
README.md
@ -15,9 +15,13 @@ You can submit your suggestions here on GitHub [(Issues)](https://github.com/pri
|
||||
## Building
|
||||
|
||||
1. Install [Ruby](https://www.ruby-lang.org/en/documentation/installation/)
|
||||
1. Install [bundler](https://bundler.io/) by running `gem install bundler`.
|
||||
1. Run `bundle install` to install the required dependencies.
|
||||
1. Use `bundle exec jekyll build` to build the website. The output can be found in the `_site` directory. Live preview is also possible by running `bundle exec jekyll serve`
|
||||
1. Run `gem install bundler` to install [bundler](https://bundler.io/).
|
||||
1. Run `bundle install` to install the required Ruby dependencies.
|
||||
1. Install [Node.js](https://nodejs.org/).
|
||||
1. Run `npm install` to install the required Node dependencies.
|
||||
1. Use `npm run build` to build the website. The output can be found in the `_site` directory.
|
||||
1. Use `npm run serve` for a live preview of the website.
|
||||
1. Use `npm run format:html` to format the HTML source code.
|
||||
|
||||
# Support privacytools.io
|
||||
|
||||
|
@ -17,8 +17,7 @@
|
||||
{% assign text = label_data[1] %}
|
||||
{% assign tooltip = label_data[2] | default: "" %}
|
||||
{% assign help_icon = '<i class="far fa-question-circle"></i>' %}
|
||||
<span class="badge badge-{{color}}" {% if tooltip %} data-toggle="tooltip" title="{{ tooltip }}">{{text}} {{ help_icon
|
||||
}}
|
||||
<span class="badge badge-{{color}}" {% if tooltip %} data-toggle="tooltip" title="{{ tooltip }}">{{text}} {{ help_icon }}
|
||||
{% else %}
|
||||
>{{text}}
|
||||
{% endif %}
|
||||
|
@ -30,8 +30,14 @@
|
||||
var u = "https://stats.privacytools.io/";
|
||||
_paq.push(['setTrackerUrl', u + 'matomo.php']);
|
||||
_paq.push(['setSiteId', '1']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
var d = document,
|
||||
g = d.createElement('script'),
|
||||
s = d.getElementsByTagName('script')[0];
|
||||
g.type = 'text/javascript';
|
||||
g.async = true;
|
||||
g.defer = true;
|
||||
g.src = u + 'matomo.js';
|
||||
s.parentNode.insertBefore(g, s);
|
||||
})();
|
||||
</script>
|
||||
<noscript><img src="https://stats.privacytools.io/matomo.php?idsite=1&rec=1" style="border:0" alt="" /></noscript>
|
@ -194,7 +194,8 @@
|
||||
<ul>
|
||||
<li><a href="https://www.confidantmail.org/">Confidant Mail</a> - An open-source non-SMTP cryptographic email system optimized for large file attachments. It is a secure and spam-resistant alternative to regular email and online file drop services. It
|
||||
uses <a href="https://theprivacyguide.org/tutorials/gpg.html">GNU Privacy Guard (GPG)</a> for content encryption and authentication, and TLS 1.2 with ephemeral keys for transport encryption.</li>
|
||||
</ul> <h3>Become Your Own Email Provider with Mail-in-a-Box</h3>
|
||||
</ul>
|
||||
<h3>Become Your Own Email Provider with Mail-in-a-Box</h3>
|
||||
<a href="https://mailinabox.email/"><img src="/assets/img/provider/Mail-in-a-Box.png" width="200" height="70" class="img-fluid float-left" alt="Mail-in-a-Box" style="margin-right:10px;"></a>
|
||||
<p>Take it a step further and get control of your email with this easy-to-deploy mail server in a box. Mail-in-a-Box lets you become your own mail service provider in a few easy steps. It's sort of like making your own Gmail, but one you control from top
|
||||
to bottom. Technically, Mail-in-a-Box turns a fresh cloud computer into a working mail server. But you don't need to be a technology expert to set it up. <strong>More: <a href="https://mailinabox.email/">https://mailinabox.email/</a></strong></p>
|
||||
|
@ -4,7 +4,6 @@
|
||||
<strong>If you are currently using an Instant Messenger like LINE, Telegram, Viber, <a href="https://www.eff.org/deeplinks/2016/10/where-whatsapp-went-wrong-effs-four-biggest-security-concerns">WhatsApp</a>, or plain SMS messages you should pick an alternative here.</strong>
|
||||
</div>
|
||||
|
||||
|
||||
{% include cardv2.html
|
||||
title="Signal"
|
||||
image="/assets/img/tools/Signal.png"
|
||||
@ -20,7 +19,6 @@ windows=""
|
||||
linux=""
|
||||
%}
|
||||
|
||||
|
||||
{% include cardv2.html
|
||||
title="Wire"
|
||||
image="/assets/img/tools/wire.png"
|
||||
|
@ -2,7 +2,8 @@
|
||||
|
||||
<h3>Who is required to hand over the encryption keys to authorities?</h3>
|
||||
|
||||
<p>Mandatory <a href="https://en.wikipedia.org/wiki/Key_disclosure_law">key disclosure laws</a> require individuals to turn over encryption keys to law enforcement conducting a criminal investigation. How these laws are implemented (who may be legally compelled to assist) vary from nation to nation, but a warrant is generally required. Defenses against key disclosure laws include steganography and encrypting data in a way that provides plausible deniability.</p> <p><a href="https://en.wikipedia.org/wiki/Steganography">Steganography</a> involves hiding sensitive information (which may be encrypted) inside of ordinary data (for example, encrypting an image file and then hiding it in an audio file). With plausible deniability, data is encrypted in a way that prevents an adversary from being able to prove that the information they are after exists (for example, one password may decrypt benign data and another password, used on the same file, could decrypt sensitive data).</p>
|
||||
<p>Mandatory <a href="https://en.wikipedia.org/wiki/Key_disclosure_law">key disclosure laws</a> require individuals to turn over encryption keys to law enforcement conducting a criminal investigation. How these laws are implemented (who may be legally compelled to assist) vary from nation to nation, but a warrant is generally required. Defenses against key disclosure laws include steganography and encrypting data in a way that provides plausible deniability.</p>
|
||||
<p><a href="https://en.wikipedia.org/wiki/Steganography">Steganography</a> involves hiding sensitive information (which may be encrypted) inside of ordinary data (for example, encrypting an image file and then hiding it in an audio file). With plausible deniability, data is encrypted in a way that prevents an adversary from being able to prove that the information they are after exists (for example, one password may decrypt benign data and another password, used on the same file, could decrypt sensitive data).</p>
|
||||
|
||||
<div class="row mb-2">
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
description='KeePass is a free open source password manager, which helps you to manage your passwords in a secure way. All passwords in one database, which is locked with one
|
||||
master key or a key file. The databases are encrypted using the best and most secure encryption algorithms currently known: AES and Twofish. See also: <a href="https://keepassxc.org/">KeePassXC</a> with official native cross-platform support for Windows/macOS/Linux.'
|
||||
%}
|
||||
|
||||
{% include card.html color="warning"
|
||||
title="LessPass - Browser"
|
||||
image="/assets/img/tools/LessPass.png"
|
||||
|
@ -1,6 +1,7 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
{% include head.html %}
|
||||
|
||||
<body data-spy="scroll" data-target="#navbar">
|
||||
<header>
|
||||
{% include nav.html %}
|
||||
@ -9,4 +10,5 @@
|
||||
{{ content }}
|
||||
{% include scripts.html %}
|
||||
</body>
|
||||
|
||||
</html>
|
@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e # halt script on error
|
||||
|
||||
bundle exec jekyll build
|
13
bin/get-html-ls.js
Normal file
13
bin/get-html-ls.js
Normal file
@ -0,0 +1,13 @@
|
||||
const glob = require('glob');
|
||||
const pattern = '**/*.html';
|
||||
const options = {
|
||||
'ignore': [
|
||||
'_site/**/*.html',
|
||||
'node_modules/**/*.html'
|
||||
]
|
||||
};
|
||||
|
||||
glob(pattern, options, (error, files) => {
|
||||
if (error) throw error;
|
||||
process.stdout.write(files.join('\n') + '\n');
|
||||
});
|
22
bin/html-beautify-check.sh
Executable file
22
bin/html-beautify-check.sh
Executable file
@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Runs html-beautify's format check and errors with 0/1 if it needs to be changed.
|
||||
APPDIR=$(readlink -f $(dirname $(dirname $0)))
|
||||
TMPDIR=$(mktemp -d)
|
||||
cd $APPDIR
|
||||
|
||||
for line in $*; do
|
||||
filepath=$(readlink -f $line)
|
||||
file=${filepath/$APPDIR\//}
|
||||
mkdir -p $TMPDIR/$(dirname $file)
|
||||
cp $APPDIR/$file $TMPDIR/$file
|
||||
done
|
||||
|
||||
message=$(find $TMPDIR -type f | xargs node_modules/.bin/html-beautify -r | grep -v unchanged || true)
|
||||
if [[ $message ]]; then
|
||||
echo "$message" | sed "s#$TMPDIR##g" | sed "s#\.\.\/##g"
|
||||
rm -rf $TMPDIR
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf $TMPDIR
|
1614
package-lock.json
generated
Normal file
1614
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
28
package.json
Normal file
28
package.json
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "privacytools.io",
|
||||
"version": "1.0.0",
|
||||
"devDependencies": {
|
||||
"glob": "^7.1.4",
|
||||
"husky": "^3.0.2",
|
||||
"js-beautify": "^1.10.1",
|
||||
"lint-staged": "^9.2.1"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "bundle exec jekyll build",
|
||||
"serve": "bundle exec jekyll serve",
|
||||
"format:html": "node bin/get-html-ls.js | xargs node_modules/.bin/html-beautify -r",
|
||||
"format-test:html": "node bin/get-html-ls.js | xargs bash ./bin/html-beautify-check.sh"
|
||||
},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"pre-commit": "node_modules/.bin/lint-staged"
|
||||
}
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/privacytoolsIO/privacytools.io.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/privacytoolsIO/privacytools.io/issues"
|
||||
}
|
||||
}
|
@ -58,6 +58,7 @@ description: "Find a no-logging VPN operator who isn't out to sell or read your
|
||||
<li><a href="https://write.privacytools.io/my-thoughts-on-security/slicing-onions-part-1-myth-busting-tor">Slicing Onions: Part 1 – Myth-busting Tor</a> by blacklight447</li>
|
||||
<li><a href="https://write.privacytools.io/my-thoughts-on-security/slicing-onions-part-2-onion-recipes-vpn-not-required">Slicing Onions: Part 2 – Onion recipes; VPN not required</a> by blacklight447</li>
|
||||
</ol>
|
||||
<p>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -37,10 +37,7 @@ description: "This Privacy Policy explains what information privacytoolsIO and i
|
||||
<p>privacytoolsIO uses a self-hosted Matomo install to track visitor data. You can opt out entirely using the form below. This form may not function correctly with
|
||||
an ad blocker enabled.</p>
|
||||
|
||||
<iframe
|
||||
style="border: 1; height: 120px; width: 100%;"
|
||||
src="https://stats.privacytools.io/index.php?module=CoreAdminHome&action=optOut&language=en&backgroundColor=&fontColor=212529&fontSize=1rem&fontFamily=-apple-system%2CBlinkMacSystemFont%2C%22Segoe%20UI%22%2CRoboto%2C%22Helvetica%20Neue%22%2CArial%2Csans-serif%2C%22Apple%20Color%20Emoji%22%2C%22Segoe%20UI%20Emoji%22%2C%22Segoe%20UI%20Symbol%22%2C%22Noto%20Color%20Emoji%22"
|
||||
></iframe>
|
||||
<iframe style="border: 1; height: 120px; width: 100%;" src="https://stats.privacytools.io/index.php?module=CoreAdminHome&action=optOut&language=en&backgroundColor=&fontColor=212529&fontSize=1rem&fontFamily=-apple-system%2CBlinkMacSystemFont%2C%22Segoe%20UI%22%2CRoboto%2C%22Helvetica%20Neue%22%2CArial%2Csans-serif%2C%22Apple%20Color%20Emoji%22%2C%22Segoe%20UI%20Emoji%22%2C%22Segoe%20UI%20Symbol%22%2C%22Noto%20Color%20Emoji%22"></iframe>
|
||||
|
||||
<p>privacytoolsIO respects your Do Not Track setting in your browser. Users with Do Not Track enabled will not be tracked by any of our platforms.
|
||||
You are also free to block stats.privacytools.io using whatever method you prefer with no detrimental effects on your experience using our services.</p>
|
||||
|
Reference in New Issue
Block a user