A simple, fault-tolerant, and easy-to-audit password manager. Only ONE dependency: Stanford Javascript Crypto Library https://pwm.sequentialread.com

index.html.gotemplate 4.4KB

    <!DOCTYPE HTML> <html manifest="index.appcache?v={{.Version}}"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>pwm</title> <script> // global namespace where we will be putting everything window.sequentialReadPasswordManager = { AWSAccessKeyId: "{{.AWSAccessKeyId}}", AWSSecretAccessKey: "{{.AWSSecretAccessKey}}", S3BucketName: "{{.S3BucketName}}", S3BucketRegion: "{{.S3BucketRegion}}" }; // a fake implementation of AMD just so I can use use sjcl.js (Stanford JavaScript Crypto Library) without any modifications window.define = function(dependencies, factory) { window.sequentialReadPasswordManager.sjcl = factory(); }; </script> <script src="static/vendor/sjcl.js?v={{.Version}}"></script> <script src="static/vendor/tenThousandMostCommonEnglishWords.js?v={{.Version}}"></script> <script src="static/awsClient.js?v={{.Version}}"></script> <link rel="stylesheet" type="text/css" href="static/application.css?v={{.Version}}"> </head> <body> <div class="header"> <h3>Sequential Read Password Manager</h3> <div style="float:right; padding-right:20px;"> <a class="source-link-responsive" href="https://git.sequentialread.com/forest/sequentialread-password-manager">source code and documentation</a> <span id="logout-link-container" style="display:none;"> <span class="source-link-responsive">|</span> <a href="#" id="logout-link">log out</a> </span> </div> </div> <div class="header-shadow"></div> <div class="splash content" id="splash-content"> <h3>Enter/Generate your Secret Encryption Key</h3> <div class="progress-bar-holder" id="progress-bar-holder" style="display: none;"> <span>Move your mouse around to generate entropy (touch and drag on mobile)</span> <div class="progress-bar" id="entropy-progress-bar" style="width:0;"></div> </div> <input id="encryption-secret" type="password" autofocus style="width:calc(100% - 20px);"></input> <button id="generate-encryption-secret-button"> Generate new Encryption Secret </button> <button id="splash-continue-button" style="float:right;"> Continue </button> <p class="instructions"> This is an encryption key seed, not a password. Save it somewhere <u>secure</u> so you don't lose it. <u>No one can recover it for you</u>.<br/> Unless you trust me and trust AWS, this is the only thing protecting the data you enter here from being publicly avaliable.<br/> If you are super paranoid, it needs to be so long that even a supercomputer can't guess it. <br/> (about 128 bits of entropy, the generate button gives you that)<br/> <br/> If you trust me and you trust AWS, or you don't think anyone will be dusting off the ol' GPU farm to crack your passwords, then something like four words is probably fine.<br/> <br/> SEQUENTIAL READ PASSWORD MANAGER IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. <br/> For more information see the <a href="https://github.com/sequentialread/password-manager/blob/master/LICENSE">LICENSE file</a> on GitHub.<br/> If you want to rely on this application in the long term I advise you to <a href="https://hub.docker.com/r/sequentialread/sequentialread-password-manager/"> host it yourself</a> with your own AWS account. </p> </div> <div class="main content" id="file-list-content" style="display:none;"> <h3>Files</h3> <div style="height:40px; width:100%;"> <button id="new-file-button" style="float:right;"> New File... </button> </div> <div id="file-list"> </div> </div> <div class="main content" id="file-detail-content" style="display:none;"> <h3> <a href="#" id="file-detail-back-link">Files</a> &gt; <span id="file-detail-file-name"></span> </h3> <div style="height:40px;"> <div class="saved-status-indicator saved" id="saved-status-indicator">Saved</div> </div> <textarea id="file-content"></textarea> </div> <div class="modal-container" id="modal-container" style="display:none;"> <div class="modal content" > <h3 id="modal-title"></h3> <div id="modal-body"></div> <div id="modal-footer" style="height:50px;"></div> </div> </div> <div class="modal-container" id="progress-container" style="display:none;"> <div class="loader">loading</div> </div> <script src="static/application.js?v={{.Version}}"></script> </body> </html>