zxcvbn-dvorak (empty) → 0.1.0.0
raw patch · 7 files changed
+175/−0 lines, 7 filesdep +basedep +base64-bytestringdep +binarysetup-changed
Dependencies added: base, base64-bytestring, binary, binary-instances, containers, lens, text, unordered-containers, zlib, zxcvbn-hs
Files
- CHANGELOG.md +7/−0
- LICENSE +20/−0
- README.md +38/−0
- Setup.hs +2/−0
- src/Text/Password/Strength/Config/Dvorak.hs +33/−0
- src/Text/Password/Strength/Config/Dvorak/Generated.hs +19/−0
- zxcvbn-dvorak.cabal +56/−0
+ CHANGELOG.md view
@@ -0,0 +1,7 @@+Revision History for zxcvbn-dvorak+==================================++0.1.0.0 (September 12, 2019)+----------------------------++ * Initial release
+ LICENSE view
@@ -0,0 +1,20 @@+Copyright (c) 2019 Peter J. Jones <pjones@devalot.com>++Permission is hereby granted, free of charge, to any person obtaining+a copy of this software and associated documentation files (the+"Software"), to deal in the Software without restriction, including+without limitation the rights to use, copy, modify, merge, publish,+distribute, sublicense, and/or sell copies of the Software, and to+permit persons to whom the Software is furnished to do so, subject to+the following conditions:++The above copyright notice and this permission notice shall be included+in all copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ README.md view
@@ -0,0 +1,38 @@+What?+-----++This package enhances the [zxcvbn][zxcvbn-hs] password strength+estimation algorithm by allowing it to detect keyboard patterns made+with a Dvorak layout.++It also serves as an example of how to generate a keyboard layout for+[zxcvbn-hs][].++How to Use this Package+-----------------------++Let's say you want to add the Dvorak keyboard layout to the default+`en_US` config:++```haskell+import Text.Password.Strength.Config+import Text.Password.Strength.Config.Dvorak++myConfig :: Config+myConfig = dvorak en_US+```++How this Package is Put Together+--------------------------------++Essentially:++ 1. Edit the raw layout file in `data/keyboards/en-US/dvorak.txt`++ 2. Turn that into Haskell with `generate.sh`+++**NOTE:** The `generate.sh` script requires [Nix][] to be installed.++[zxcvbn-hs]: https://code.devalot.com/sthenauth/zxcvbn-hs+[nix]: https://nixos.org/nix/download.html
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ src/Text/Password/Strength/Config/Dvorak.hs view
@@ -0,0 +1,33 @@+{-|++Copyright:+ This file is part of the package zxcvbn-dvorak. It is subject to the+ license terms in the LICENSE file found in the top-level directory+ of this distribution and at:++ https://code.devalot.com/sthenauth/zxcvbn-dvorak++ No part of this package, including this file, may be copied,+ modified, propagated, or distributed except according to the terms+ contained in the LICENSE file.++License: MIT++Enhance the zxcvbn password strength estimation algorithm by allowing+by allowing it to detect keyboard patterns from a Dvorak layout.++-}+module Text.Password.Strength.Config.Dvorak+ ( dvorak+ ) where++--------------------------------------------------------------------------------+-- Imports:+import Control.Lens ((%~))+import qualified Text.Password.Strength.Config as Zxcvbn+import qualified Text.Password.Strength.Config.Dvorak.Generated as Generated++--------------------------------------------------------------------------------+-- | Add the Dvorak keyboard layout to an existing 'Config'.+dvorak :: Zxcvbn.Config -> Zxcvbn.Config+dvorak = Zxcvbn.keyboardGraphs %~ (Generated.dvorak:)
+ src/Text/Password/Strength/Config/Dvorak/Generated.hs view
@@ -0,0 +1,19 @@+-- This file is automatically generated, DO NOT EDIT!+{-# LANGUAGE OverloadedStrings #-}+{-# OPTIONS_GHC -Wno-missing-export-lists #-}+{-# OPTIONS_GHC -Wno-unused-imports #-}+module Text.Password.Strength.Config.Dvorak.Generated where+import Data.HashMap.Strict (HashMap)+import qualified Data.HashMap.Strict as HashMap+import Data.Text (Text)+import qualified Codec.Compression.GZip as GZip+import qualified Data.ByteString.Base64.Lazy as Base64+import qualified Data.Binary as Binary+import Data.Binary.Instances ()+import Text.Password.Strength.Types++dvorak :: AdjacencyTable+dvorak =+ let decode = Binary.decode . GZip.decompress . Base64.decodeLenient+ in decode "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"+
+ zxcvbn-dvorak.cabal view
@@ -0,0 +1,56 @@+cabal-version: 2.2++--------------------------------------------------------------------------------+name: zxcvbn-dvorak+version: 0.1.0.0+synopsis: Password strength estimation based on zxcvbn.+description: Please see the README below.+license: MIT+license-file: LICENSE+author: Peter Jones <pjones@devalot.com>+maintainer: Peter Jones <pjones@devalot.com>+copyright: Copyright (c) 2019 Peter Jones+homepage: https://code.devalot.com/sthenauth/zxcvbn-dvorak+bug-reports: https://github.com/sthenauth/zxcvbn-dvorak/issues+category: System++--------------------------------------------------------------------------------+extra-source-files:+ CHANGELOG.md+ README.md++--------------------------------------------------------------------------------+source-repository head+ type: git+ location: https://code.devalot.com/sthenauth/zxcvbn-dvorak.git++--------------------------------------------------------------------------------+common options+ default-language: Haskell2010+ ghc-options: -Wall+ -Werror=incomplete-record-updates+ -Werror=incomplete-uni-patterns+ -Werror=missing-home-modules+ -Widentities+ -Wmissing-export-lists+ -Wredundant-constraints++--------------------------------------------------------------------------------+common dependencies+ build-depends: base >= 4.9 && < 5.0+ , base64-bytestring >= 1.0 && < 1.1+ , binary >= 0.8 && < 0.11+ , binary-instances >= 0.1 && < 1.0+ , containers >= 0.6 && < 0.7+ , lens >= 4.17 && < 4.18+ , text >= 1.2 && < 1.3+ , unordered-containers >= 0.2 && < 0.3+ , zlib >= 0.6 && < 0.7+ , zxcvbn-hs >= 0.2 && < 1.0++--------------------------------------------------------------------------------+library+ import: options, dependencies+ hs-source-dirs: src+ exposed-modules: Text.Password.Strength.Config.Dvorak+ other-modules: Text.Password.Strength.Config.Dvorak.Generated