Merge pull request #438 from manuth/diceware-webapp

Add the `diceware` Web-App to the NixOS ISO
pull/435/head
drduh 2024-05-05 19:06:30 +00:00 committed by GitHub
commit 9d90cafe36
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 126 additions and 0 deletions

65
diceware-vt.patch 100644
View File

@ -0,0 +1,65 @@
diff --git a/index.html b/index.html
index 2f26ed9..3b4a2d3 100644
--- a/index.html
+++ b/index.html
@@ -920,8 +920,19 @@
<!-- core application JS -->
<script
src="index.js"
- integrity="sha384-++jBnvz86d0OUZ3chFxES5Sj6jjOZ/jKegsrHhXhOEzWxrvn7LhRGB0HP+bvLeNI"
+ integrity="sha384-v759g0TMj/jSFxhXsmlahbhJnj5NYNBopqVDq9WQaMOWsLZ0sJzLKxIoP+WzY9Yq"
crossorigin="anonymous"
></script>
+ <script>
+ $(document).ready(function () {
+ 'use strict'
+ // Use the 6 word list as the default
+ var numWords, numRolls
+ numWords = parseInt(6, 10)
+ numRolls = parseInt(5, 10)
+ displayWords(getWords(numWords, numRolls))
+ displayCrackTime(wordList)
+ })
+ </script>
</body>
</html>
diff --git a/index.js b/index.js
index e95e2a1..9d45377 100644
--- a/index.js
+++ b/index.js
@@ -238,11 +238,28 @@ function getWordFromWordNum (wordNum) {
function displayWords (words) {
'use strict'
+ // get symbol and number for the first and third words (CMD)
+ if (words.length > 1) {
+ var symbols = getWords(1,2)
+ var number = Math.floor(Math.random() * 100)
+ var symbol_pos = Math.floor(Math.random() * words.length)
+ var number_pos = Math.floor(Math.random() * words.length)
+ var capitalize_pos = Math.floor(Math.random() * words.length)
+ }
+
// add the word to the global array of words
$.each(words, function (index, obj) {
var objEntropy = new Big(obj.entropy)
totalEntropy = totalEntropy.plus(objEntropy)
$('#totalEntropy').text(totalEntropy.toFixed(2))
+ if (words.length > 1) {
+ // add symbol to random word (CMD)
+ if (index == symbol_pos) obj.word = obj.word + symbols[0].word
+ // add number to random word (CMD)
+ if (index == number_pos) obj.word = obj.word + number
+ // capitalize random word (CMD)
+ if (index == capitalize_pos) obj.word = obj.word.charAt(0).toUpperCase() + obj.word.substring(1)
+ }
wordList.push(obj.word)
})
@@ -370,4 +387,4 @@ $(document).ready(function () {
$('#addFiveDieRollWord').val('')
displayCrackTime(wordList)
})
-})
+})
\ No newline at end of file

View File

@ -29,6 +29,8 @@
sed '/pinentry-program/d' ${drduhConfig}/gpg-agent.conf > $out sed '/pinentry-program/d' ${drduhConfig}/gpg-agent.conf > $out
echo "pinentry-program ${pkgs.pinentry.curses}/bin/pinentry" >> $out echo "pinentry-program ${pkgs.pinentry.curses}/bin/pinentry" >> $out
''; '';
dicewareAddress = "localhost";
dicewarePort = 8080;
viewYubikeyGuide = pkgs.writeShellScriptBin "view-yubikey-guide" '' viewYubikeyGuide = pkgs.writeShellScriptBin "view-yubikey-guide" ''
viewer="$(type -P xdg-open || true)" viewer="$(type -P xdg-open || true)"
if [ -z "$viewer" ]; then if [ -z "$viewer" ]; then
@ -49,6 +51,38 @@
name = "yubikey-guide"; name = "yubikey-guide";
paths = [viewYubikeyGuide shortcut]; paths = [viewYubikeyGuide shortcut];
}; };
dicewareScript = pkgs.writeShellScriptBin "diceware-webapp" ''
viewer="$(type -P xdg-open || true)"
if [ -z "$viewer" ]; then
viewer="firefox"
fi
exec $viewer "http://"${lib.escapeShellArg dicewareAddress}":${toString dicewarePort}/index.html"
'';
dicewarePage = pkgs.stdenv.mkDerivation {
name = "diceware-page";
src = pkgs.fetchFromGitHub {
owner = "grempe";
repo = "diceware";
rev = "9ef886a2a9699f73ae414e35755fd2edd69983c8";
sha256 = "44rpK8svPoKx/e/5aj0DpEfDbKuNjroKT4XUBpiOw2g=";
};
patches = [
# Include changes published on https://secure.research.vt.edu/diceware/
./diceware-vt.patch
];
buildPhase = ''
cp -a . $out
'';
};
dicewareWebApp = pkgs.makeDesktopItem {
name = "diceware";
icon = "${dicewarePage}/favicon.ico";
desktopName = "Diceware Passphrase Generator";
genericName = "Passphrase Generator";
comment = "Open the passphrase generator in a web browser";
categories = ["Utility"];
exec = "${dicewareScript}/bin/${dicewareScript.name}";
};
in { in {
isoImage = { isoImage = {
isoName = "yubikeyLive.iso"; isoName = "yubikeyLive.iso";
@ -90,9 +124,34 @@
}; };
}; };
}; };
# Host the `https://secure.research.vt.edu/diceware/` website offline
nginx = {
enable = true;
virtualHosts."diceware.local" = {
listen = [
{
addr = dicewareAddress;
port = dicewarePort;
}
];
root = "${dicewarePage}";
};
};
}; };
programs = { programs = {
# Add firefox for running the diceware web app
firefox = {
enable = true;
preferences = {
# Disable data reporting confirmation dialogue
"datareporting.policy.dataSubmissionEnabled" = false;
# Disable welcome tab
"browser.aboutwelcome.enabled" = false;
};
# Make preferences appear as user-defined values
preferencesStatus = "user";
};
ssh.startAgent = false; ssh.startAgent = false;
gnupg.agent = { gnupg.agent = {
enable = true; enable = true;
@ -141,6 +200,7 @@
# Password generation tools # Password generation tools
diceware diceware
dicewareWebApp
pwgen pwgen
# Might be useful beyond the scope of the guide # Might be useful beyond the scope of the guide
@ -200,6 +260,7 @@
cp -R ${self}/contrib/* ${homeDir} cp -R ${self}/contrib/* ${homeDir}
ln -sf ${yubikeyGuide}/share/applications/yubikey-guide.desktop ${desktopDir} ln -sf ${yubikeyGuide}/share/applications/yubikey-guide.desktop ${desktopDir}
ln -sf ${dicewareWebApp}/share/applications/${dicewareWebApp.name} ${desktopDir}
ln -sfT ${self} ${documentsDir}/YubiKey-Guide ln -sfT ${self} ${documentsDir}/YubiKey-Guide
''; '';
system.stateVersion = "23.11"; system.stateVersion = "23.11";