From: Josef Fortier Date: Sat, 23 Feb 2019 04:31:14 +0000 (-0600) Subject: Add password rotation X-Git-Url: https://git.madduck.net/etc/vim.git/commitdiff_plain/5e46c4df650e55e4f00295f9063486b32a664019?ds=inline Add password rotation password-store uses pwgen when called as pass generate. This is not easily available afterward. Mapping a pwgen password to increment/decrement --- diff --git a/autoload/password_store.vim b/autoload/password_store.vim new file mode 100644 index 0000000..b5eaf90 --- /dev/null +++ b/autoload/password_store.vim @@ -0,0 +1,22 @@ +" setup known state +if exists('did_password_store') + " || &compatible + " || version < 700} + finish +endif +let g:did_password_store = '1' +let s:save_cpo = &cpoptions +set compatible&vim +"echo 'main code'}} +" Return vim to users choice +function! password_store#generate() abort + if executable('pwgen') + return systemlist('pwgen -N1 ' . g:password_store_pw_length )[0] + endif +endfunction + +function! password_store#replace() abort + execute 's/\<.*\>/' . password_store#generate() . '/' +endfunction + +let &cpoptions = s:save_cpo diff --git a/doc/vim-password-store.txt b/doc/vim-password-store.txt index 03a42c0..eca22ab 100644 --- a/doc/vim-password-store.txt +++ b/doc/vim-password-store.txt @@ -29,17 +29,37 @@ The plugin automatically loads when it sees the appropriate file paths for password-store. This is Tom Ryders There are two functions: - +> :Conceal :Reveal - +< That apply syntax highlighting to obscure and un-obscure the password. By default the pass file loads in obscured mode, however when the cursor is on -the file it's quite likely readable and editable. - -This offers minor "shoulder surfing" protection, facilitating editing of -metadata, such as adding URLs etc. - +the word it should readable and editable. This offers minor "shoulder surfing" +protection, facilitating editing of metadata, such as adding URLs etc. + +There's minor feedback for short passwords, with Error highlighting for +passwords 6 or less characters long. + +Password store also adds password generation support via pwgen. Since +password-store already leverages pwgen, this is a fairly safe assumption. +There is a Plug mapping *rotate_password* +by default this is mapped to and but can be overridden via setting +an alternate plug mapping +> + nnoremap >M-a> rotate_password +< +The mapped sequence will generate a random password. As neither decrement nor +increment mean anything in this context, buth are mapped to the same plug. +The default length of the password is 10 character, but +modifiable by altering the global g:password_store_pwlength +> + let g:password_store_pwlength = 20 +< +This is also available via the function call(s) +> + password_store#replace() +< 4. Licence *password-store-licence* This plugin is licensed under the same terms as vim itself (see diff --git a/ftplugin/pass.vim b/ftplugin/pass.vim index f728b00..1373778 100644 --- a/ftplugin/pass.vim +++ b/ftplugin/pass.vim @@ -1,4 +1,4 @@ -if exists('did_pass_ftplugin') || &compatible || version < 700 +if exists('did_pass_ftplugin') || &compatible || v:version < 700 finish endif let g:did_pass = 'did_pass_ftplugin' @@ -6,6 +6,15 @@ let s:save_cpo = &cpoptions set compatible&vim +if ! exists('g:password_store_pw_length') + let g:password_store_pw_length = 12 +endif + +nmap rotate_password :call password_store#replace() +if ! hasmapto( '\rotate_password', 'n') + nmap rotate_password +endif + setlocal nospell @@ -44,7 +53,7 @@ function! s:conceal_pass() abort highlight! password_store_password guifg=DarkGray guibg=DarkGray ctermfg=8 ctermbg=8 endfunction command! Conceal call conceal_pass() -normal GG +normal! GG " Cleanup at end let &cpoptions = s:save_cpo