Vim에서 auth-source와 같은 비밀번호 비밀 플러그인을 만들었습니다.

vim-pass





이전부터 gpg 활용의 하나로서 Pass: The Standard Unix Password Manager 의 프레임워크를 사용하고 있었습니다.

이와는 별도로 emacs에서는, 설정 파일내의 비밀 정보에 대해 auth-source 로 암호화할 수 있는 구조가 있어, 유용성을 느끼고 있었습니다. (이것은 전용 파일에 암호화하여 저장한다)

결과, Vim에서 (목표는) password-store 형식의 데이터의 API를 정비하면서, auth-source 의 편리성을 반입하려고 하고, 그 결과가 됩니다.

아직도 고장 투성이일지도 모릅니다만 (특히 이상계는 별로 시험할 수 없는, CI와 테스트 내지...), 아무쪼록 잘 부탁드립니다.

용법



README 참조
" in vimrc
" configured at end of vim startup
call pass#get_startup('g:test_gh_token','Develop/Github')
call pass#get_startup('g:test_gh_username','Develop/Github','username')

function! test() abort
  let password = pass#get('Service/foobar')
  " ...
endfunction
# in plugin setting(dein's toml)
[[plugins]]
repo = 'tsuyoshicho/vim-pass'

[[plugins]] # https://pixe.la/
repo = 'mattn/vim-pixela'
depends = ['open-browser.vim','vim-pass']
hook_add = '''
  " let g:pixela_username = 'user'
  " let g:pixela_token    = 'token'

  call pass#get_startup('g:pixela_username','Develop/Pixela','username')
  " VimPixela work OK
  call pass#get_startup('g:pixela_token','Develop/Pixela')
  " startup-time countup do not correct work.
  " It work or does not work depending on the processing order of events
'''

[[plugins]] # Slack
repo = 'mizukmb/slackstatus.vim'
depends = ['webapi-vim','vim-pass']
hook_add = '''
  " let g:slackstatus_token = '<YOUR_SLACK_TOKEN>'
  " my hoge
  call pass#get_startup('g:slackstatus_token','Message/Slack/myhoge.legacy')
  " vim-jp
  " call pass#get_startup('g:slackstatus_token','Message/Slack/vim-jp.legacy')
  "
  function! s:slack_list(A,L,P) abort
    let slacklist = ['myhoge','vim-jp']
    return slacklist
  endfunction

  function s:slackstatus_change_token(team) abort
    let path = 'Message/Slack/' . a:team . '.legacy'
    let g:slackstatus_token = pass#get(path)
  endfunction

  command! -nargs=1 -complete=customlist,<SID>slack_list SlackStatusChange :call <SID>slackstatus_change_token(<f-args>)
'''


기동시에 패스 프레이즈의 키보드 입력을 Vim상에서 할 수 없기 때문에, 기동 후에 정리해 설정하는 pass#get_setup 를 준비했습니다.
보통 사용에는 pass#get 가 있습니다.
콘솔 모드를 버리고, gpg의 pinentry 맡겨라면, 이 수고는 없어도 괜찮습니다만..., 그렇게 하면 심한 것이 되니까요.

제한



덧붙여 리모트에서는 강제로 pinentry 없음 환경의 설정으로 하고 있습니다만, 로컬 한편 non-GUI인 환경이라면 수동 설정하지 않으면 비참하게 된다고 생각합니다(미테스트)

그 밖에도
- 목표는 충분한 조작 API이지만, 현재는 get만
- Vim 레지스터에 전사해, 일정시간 후에 소멸하는 API를 생각하고 있습니다만, 이것도 미정비
- 디폴트 항목의 패스워드 이외를 지정했을 경우에 대해서, 그 항목의 확인은 캐릭터 라인 비교(exact match)
- 기동시~라고 하면서, 기동시에 값이 설정되어 있는 것이 필요한 플러그인의 설정치에 대해서, VimEnter의 이벤트 처리의 순서에 따라서는, 기대하는 동작을 하거나 하지 않는 경우가 있다

와 제한 천코모리입니다.

후기



유지 보수 얼마나 노력할지 모르기 때문에, 파생 대환영.

좋은 웹페이지 즐겨찾기