適当な思いつきで書くブログ

UbuntuやPerlやJavaScriptやVimやZshやShellScriptやMySQLと戯れている中で適当な思いつきでやってみたことを書いています。

Vimperatorでパスワードをクリップボードにコピーする

Show Passwordはログインページなどで非表示になっているパスワードを表示できるようになるGreasemonkeyプラグインなのだけれども、少々やっかいなところがある。

input[@type="password"]な要素にマウスオーバーするとその要素のtypeがtextになりパスワードが可視化されるのだが、

  1. マウスオーバーした状態で
  2. 入力した状態でPOSTするためにエンターキーを押す

ことで入力履歴として残ってしまう。


個人的な用途としては「パスワードを忘れてしまったがブラウザには値が残っているので、その値を知りたい」だけなので、vimpでクリップボードにコピー&一定時間経過したらクリアするようにしてみた。

js <<EOM
  // パスワードをクリップボードにコピー
  commands.addUserCommand(
    ['passwordcopy', 'pc'],
    'パスワードをコピー',
    function() {
      var ps = content.document.getElementsByTagName('input');
      var passwords = []; 
      for (var i = 0, n = ps.length; i < n; ++i) {
        var p = ps[i];
        if (p.getAttribute('type') !== 'password' || !p.value) {
          continue;
        }   
        p.setAttribute('type', 'text');
        passwords.push(p.value);
        p.setAttribute('type', 'password');
      }   

      if (!!passwords.length) {
        util.copyToClipboard(passwords.join(','));
        liberator.echo('yanked password');
      } else {
        liberator.echoerr('not yanked');
      }   

      // 20秒たったらクリア
      setTimeout(function() {
        util.copyToClipboard('');
      }, 1000 * 20);
    }
  );
EOM

追記: !p.valueの判定を追加