2013-03-07 1 views
10

REST API를 통해 Redmine 티켓 관리자와 통신하는 greasemonkey 스크립트를 수행하고 있습니다. 사용자가 Redmine에서 데이터를 가져 오기 위해 로그인해야하므로 스크립트 설치시 사용자에게 신용 평가를 요청하고 스크립트에 저장하는 방법이 필요합니다.설치시 Greasemonkey 스크립트에 사용자 입력 저장

스크립트 자체에서 값을 직접 편집하도록 사용자에게 요청하지 않고도이 작업을 수행 할 수 있습니까? 난 그냥 아래에 아주 좋은 프레임 워크로 주어진 답을 확인한다이 질문에 대한 답변이 이미 존재하기 때문에

편집

.

+1

스크립트의 로컬 저장소에서 자격 증명을 사용할 수없는 경우 요청하십시오. "귀하의 스크립트를위한 로컬 스토리지"에 관해서는, 나는 Greasemonkey가 제공하는 하나가 있다고 믿고 있습니다. 예를 들어 "greasemonkey 로컬 스토리지"에서이 구글 히트를보십시오 : http://stackoverflow.com/questions/13889995/local-storage-across- domains-using-a-greasemonkey-scripts –

+0

tampermonkey에 대해서 - 아무것도 찾지 못했고'GM_setvalue'를 지원하는지 테스트를하지 못했습니다. –

+3

tampermokey가'GM_setvalue'를 지원한다고 생각합니다. 문제없이 사용했습니다. – TheBronx

답변

8

다음은 로그인 자격 증명을 가져오고 저장하기위한 프레임 워크입니다. 스크립트는 가장 먼저 실행 한 정보를 묻는 메시지를 표시하고 GM_setValue()을 사용하여 암호화하여 저장합니다.

Greasemonkey 컨텍스트 메뉴에 두 개의 항목을 추가하여 사용자 이름이나 암호를 변경할 수 있습니다.

// ==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

관련 문제