2013-03-07 19 views
10

RedmineチケットマネージャーとREST APIを介して通信するgreasemonkeyスクリプトを実行しています。 ユーザーはRedmineからデータを取得するためにログインする必要があるため、スクリプトのインストール時にユーザーにクレジットを尋ねてスクリプトに保存する方法が必要です。インストール時にGreasemonkeyスクリプトにユーザー入力を格納する

これは、スクリプト自体で直接値を編集するようにユーザーに依頼することなく達成できますか?

EDIT

、それは非常に良いフレームワークであると私はちょうど下記の解答を検証します。この質問への答えはすでにありますので。

+1

クリエイティブがローカルストレージ内でスクリプト用に利用できない場合は、そのスクリプトを要求してください。 "あなたのスクリプトのローカルストレージ"に関しては、私はGreasemonkeyによって提供されているものがあると信じています。例えば、このグーグルヒットは "greasemonkeyローカルストレージ"を参照してください:http://stackoverflow.com/questions/13889995/local-storage-across-ドメインを使用するgreasemonkeyスクリプト –

+0

tampermonkeyについて - 私は何も見つからなかったし、 'GM_setvalue'をサポートしているかどうかテストしなかった。 –

+3

tampermokeyは' GM_setvalue'をサポートしていると思う。 – TheBronx

答えて

8

ここには、ログイン資格情報を取得して保存するためのフレームワークがあります。スクリプトは、最初の実行に関する情報を入力するように求め、GM_setValue()を使用して暗号化して保存します。

Greasemonkeyのコンテキストメニューに2つの項目を追加して、ユーザー名またはパスワードを変更できるようにします。

// ==UserScript== 
// @name  _Autologin, sensitive info framework 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js 
// @require http://crypto.stanford.edu/sjcl/sjcl.js 
// @grant GM_getValue 
// @grant GM_setValue 
// @grant GM_registerMenuCommand 
// ==/UserScript== 

var encKey = GM_getValue ("encKey", ""); 
var usr  = GM_getValue ("lognUsr", ""); 
var pword = GM_getValue ("lognPwd", ""); 

if (! encKey) { 
    encKey = prompt (
     'Script key not set for ' + location.hostname + '. Please enter a random string:', 
     '' 
    ); 
    GM_setValue ("encKey", encKey); 

    usr  = pword = ""; // New key makes prev stored values (if any) unable to decode. 
} 
usr   = decodeOrPrompt (usr, "U-name", "lognUsr"); 
pword  = decodeOrPrompt (pword, "P-word", "lognPwd"); 


function decodeOrPrompt (targVar, userPrompt, setValVarName) { 
    if (targVar) { 
     targVar  = unStoreAndDecrypt (targVar); 
    } 
    else { 
     targVar  = prompt (
      userPrompt + ' not set for ' + location.hostname + '. Please enter it now:', 
      '' 
     ); 
     GM_setValue (setValVarName, encryptAndStore (targVar)); 
    } 
    return targVar; 
} 

function encryptAndStore (clearText) { 
    return JSON.stringify (sjcl.encrypt (encKey, clearText)); 
} 

function unStoreAndDecrypt (jsonObj) { 
    return sjcl.decrypt (encKey, JSON.parse (jsonObj)); 
} 

//-- Add menu commands that will allow U and P to be changed. 
GM_registerMenuCommand ("Change Username", changeUsername); 
GM_registerMenuCommand ("Change Password", changePassword); 

function changeUsername() { 
    promptAndChangeStoredValue (usr, "U-name", "lognUsr"); 
} 

function changePassword() { 
    promptAndChangeStoredValue (pword, "P-word", "lognPwd"); 
} 

function promptAndChangeStoredValue (targVar, userPrompt, setValVarName) { 
    targVar  = prompt (
     'Change ' + userPrompt + ' for ' + location.hostname + ':', 
     targVar 
    ); 
    GM_setValue (setValVarName, encryptAndStore (targVar)); 
} 

// ADD YOUR CODE TO SET THE USERNAME AND PASSWORD ON THE LOGIN PAGE, HERE. 
+1

これはまさに私がやってみたいことです、ありがとうございます。 – MaxouMask

+0

お世話になりました。 –

+0

なぜ鍵を保管しますか? – binki

関連する問題