Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F35156270
enigmailKeyManager.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
29 KB
Subscribers
None
enigmailKeyManager.js
View Options
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "MPL"); you may not use this file
* except in compliance with the MPL. You may obtain a copy of
* the MPL at http://www.mozilla.org/MPL/
*
* Software distributed under the MPL is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the MPL for the specific language governing
* rights and limitations under the MPL.
*
* The Original Code is Enigmail.
*
* The Initial Developer of this code is Patrick Brunschwig.
* Portions created by Patrick Brunschwig <patrick.brunschwig@gmx.net>
* are Copyright (C) 2004 Patrick Brunschwig.
* All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License (the "GPL"), in which case
* the provisions of the GPL are applicable instead of
* those above. If you wish to allow use of your version of this
* file only under the terms of the GPL and not to allow
* others to use your version of this file under the MPL, indicate
* your decision by deleting the provisions above and replace them
* with the notice and other provisions required by the GPL.
* If you do not delete the provisions above, a recipient
* may use your version of this file under either the MPL or the
* GPL.
*/
// Uses: chrome://enigmail/content/enigmailCommon.js
// Initialize enigmailCommon
EnigInitCommon
(
"enigmailKeyManager"
);
const
INPUT
=
0
;
const
RESULT
=
1
;
// field ID's of key list (as described in the doc/DETAILS file in the GnuPG distribution)
const
KEY_TRUST
=
1
;
const
KEY_ID
=
4
;
const
CREATED
=
5
;
const
EXPIRY
=
6
;
const
OWNERTRUST
=
8
;
const
USER_ID
=
9
;
const
KEY_USE_FOR
=
11
;
const
KEY_EXPIRED
=
"e"
;
const
KEY_REVOKED
=
"r"
;
const
KEY_INVALID
=
"i"
;
const
KEY_DISABLED
=
"d"
;
const
KEY_NOT_VALID
=
KEY_EXPIRED
+
KEY_REVOKED
+
KEY_INVALID
+
KEY_DISABLED
;
var
gUserList
;
var
gResult
;
var
gSendEncrypted
=
true
;
var
gKeyList
;
var
gEnigRemoveListener
=
false
;
var
gEnigLastSelectedKeys
=
null
;
var
gKeySortList
=
null
;
var
gEnigIpcRequest
=
null
;
var
gEnigCallbackFunc
=
null
;
var
gClearButton
=
null
;
var
gFilterBox
=
null
;
var
gSearchTimer
=
null
;
var
gSearchInput
=
null
;
function
enigmailKeyManagerLoad
()
{
DEBUG_LOG
(
"enigmailKeyManager.js: enigmailKeyManagerLoad\n"
);
gUserList
=
document
.
getElementById
(
"pgpKeyList"
);
gFilterBox
=
document
.
getElementById
(
"filterKey"
);
gClearButton
=
document
.
getElementById
(
"clearFilter"
);
gSearchInput
=
document
.
getElementById
(
"filterKey"
);
window
.
enigIpcRequest
=
null
;
document
.
getElementById
(
"statusText"
).
value
=
EnigGetString
(
"keyMan.loadingKeys"
);
document
.
getElementById
(
"progressBar"
).
removeAttribute
(
"collapsed"
);
window
.
setTimeout
(
loadkeyList
,
100
);
}
function
loadkeyList
()
{
DEBUG_LOG
(
"enigmailKeyManager.js: loadkeyList\n"
);
enigmailBuildList
(
false
);
document
.
getElementById
(
"statusText"
).
value
=
" "
;
document
.
getElementById
(
"progressBar"
).
setAttribute
(
"collapsed"
,
"true"
);
}
function
enigmailRefreshKeys
()
{
DEBUG_LOG
(
"enigmailKeyManager.js: enigmailRefreshKeys\n"
);
var
keyList
=
enigmailGetSelectedKeys
();
gEnigLastSelectedKeys
=
[];
for
(
var
i
=
0
;
i
<
keyList
.
length
;
i
++
)
{
gEnigLastSelectedKeys
[
keyList
[
i
]]
=
1
;
}
var
treeChildren
=
document
.
getElementById
(
"pgpKeyListChildren"
);
while
(
treeChildren
.
firstChild
)
{
treeChildren
.
removeChild
(
treeChildren
.
firstChild
);
}
enigmailBuildList
(
true
);
enigApplyFilter
();
}
function
enigmailBuildList
(
refresh
)
{
DEBUG_LOG
(
"enigmailKeyManager.js: enigmailBuildList\n"
);
var
keyListObj
=
{};
EnigLoadKeyList
(
refresh
,
keyListObj
);
gKeyList
=
keyListObj
.
keyList
;
gKeySortList
=
keyListObj
.
keySortList
;
gUserList
.
currentItem
=
null
;
var
treeChildren
=
document
.
getElementById
(
"pgpKeyListChildren"
);
var
selectedItems
=
[];
for
(
var
i
=
0
;
i
<
gKeySortList
.
length
;
i
++
)
{
var
keyId
=
gKeySortList
[
i
].
keyId
;
if
(
gEnigLastSelectedKeys
&&
typeof
(
gEnigLastSelectedKeys
[
keyId
])
!=
"undefined"
)
selectedItems
.
push
(
i
);
var
treeItem
=
null
;
treeItem
=
enigUserSelCreateRow
(
gKeyList
[
keyId
],
-
1
)
if
(
gKeyList
[
keyId
].
SubUserIds
.
length
)
{
treeItem
.
setAttribute
(
"container"
,
"true"
);
var
subChildren
=
document
.
createElement
(
"treechildren"
);
for
(
var
subkey
=
0
;
subkey
<
gKeyList
[
keyId
].
SubUserIds
.
length
;
subkey
++
)
{
var
subItem
=
enigUserSelCreateRow
(
gKeyList
[
keyId
],
subkey
);
subChildren
.
appendChild
(
subItem
);
}
treeItem
.
appendChild
(
subChildren
);
}
if
(
treeItem
)
treeChildren
.
appendChild
(
treeItem
);
}
// select last selected key
if
(
selectedItems
.
length
>
0
)
{
gUserList
.
view
.
selection
.
select
(
selectedItems
[
0
]);
for
(
i
=
1
;
i
<
selectedItems
.
length
;
i
++
)
{
gUserList
.
view
.
selection
.
rangedSelect
(
selectedItems
[
i
],
selectedItems
[
i
],
true
)
}
}
gUserList
.
focus
();
}
// create a (sub) row for the user tree
function
enigUserSelCreateRow
(
keyObj
,
subKeyNum
)
{
var
expCol
=
document
.
createElement
(
"treecell"
);
var
userCol
=
document
.
createElement
(
"treecell"
);
var
keyCol
=
document
.
createElement
(
"treecell"
);
var
typeCol
=
document
.
createElement
(
"treecell"
);
var
validCol
=
document
.
createElement
(
"treecell"
);
var
trustCol
=
document
.
createElement
(
"treecell"
);
var
fprCol
=
document
.
createElement
(
"treecell"
);
var
userRow
=
document
.
createElement
(
"treerow"
);
var
treeItem
=
document
.
createElement
(
"treeitem"
);
userCol
.
setAttribute
(
"id"
,
"name"
);
if
(
subKeyNum
<
0
)
{
// primary key
userCol
.
setAttribute
(
"label"
,
keyObj
.
userId
);
keyCol
.
setAttribute
(
"label"
,
keyObj
.
keyId
.
substr
(
-
8
,
8
));
if
(
keyObj
.
secretAvailable
)
{
typeCol
.
setAttribute
(
"label"
,
EnigGetString
(
"keyType.publicAndSec"
));
}
else
{
typeCol
.
setAttribute
(
"label"
,
EnigGetString
(
"keyType.public"
));
}
var
keyTrust
=
keyObj
.
keyTrust
;
treeItem
.
setAttribute
(
"keytype"
,
"pub"
);
fprCol
.
setAttribute
(
"label"
,
EnigFormatFpr
(
keyObj
.
fpr
));
}
else
{
// secondary user id
keyObj
.
SubUserIds
[
subKeyNum
].
userId
=
EnigConvertGpgToUnicode
(
keyObj
.
SubUserIds
[
subKeyNum
].
userId
);
userCol
.
setAttribute
(
"label"
,
keyObj
.
SubUserIds
[
subKeyNum
].
userId
);
treeItem
.
setAttribute
(
"keytype"
,
keyObj
.
SubUserIds
[
subKeyNum
].
type
);
if
(
keyObj
.
SubUserIds
[
subKeyNum
].
type
==
"uat"
)
{
treeItem
.
setAttribute
(
"uatNum"
,
keyObj
.
SubUserIds
[
subKeyNum
].
uatNum
);
}
keyCol
.
setAttribute
(
"label"
,
""
);
typeCol
.
setAttribute
(
"label"
,
""
);
keyTrust
=
keyObj
.
SubUserIds
[
subKeyNum
].
keyTrust
;
}
var
keyTrustLabel
=
EnigGetTrustLabel
(
keyTrust
);
var
keyTrustStyle
=
""
;
switch
(
keyTrust
)
{
case
'q'
:
keyTrustStyle
=
"enigmail_keyValid_unknown"
;
break
;
case
'i'
:
keyTrustStyle
=
"enigmail_keyValid_invalid"
;
break
;
case
'd'
:
keyTrustStyle
=
"enigmail_keyValid_disabled"
;
break
;
case
'r'
:
keyTrustStyle
=
"enigmail_keyValid_revoked"
;
break
;
case
'e'
:
keyTrustStyle
=
"enigmail_keyValid_expired"
;
break
;
case
'n'
:
keyTrustStyle
=
"enigmail_keyTrust_untrusted"
;
break
;
case
'm'
:
keyTrustStyle
=
"enigmail_keyTrust_marginal"
;
break
;
case
'f'
:
keyTrustStyle
=
"enigmail_keyTrust_full"
;
break
;
case
'u'
:
keyTrustStyle
=
"enigmail_keyTrust_ultimate"
;
break
;
case
'-'
:
default
:
keyTrustStyle
=
"enigmail_keyTrust_unknown"
;
break
;
}
expCol
.
setAttribute
(
"label"
,
keyObj
.
expiry
);
expCol
.
setAttribute
(
"id"
,
"expiry"
);
if
(
keyObj
.
keyUseFor
.
indexOf
(
"D"
)
>=
0
)
{
keyTrustLabel
=
EnigGetString
(
"keyValid.disabled"
);
keyTrustStyle
=
"enigmail_keyValid_disabled"
;
}
validCol
.
setAttribute
(
"label"
,
keyTrustLabel
);
validCol
.
setAttribute
(
"properties"
,
keyTrustStyle
);
trustCol
.
setAttribute
(
"label"
,
EnigGetTrustLabel
(
keyObj
.
ownerTrust
));
keyCol
.
setAttribute
(
"id"
,
"keyid"
);
typeCol
.
setAttribute
(
"id"
,
"keyType"
);
validCol
.
setAttribute
(
"id"
,
"keyValid"
);
trustCol
.
setAttribute
(
"id"
,
"ownerTrust"
)
userRow
.
appendChild
(
userCol
);
userRow
.
appendChild
(
keyCol
);
userRow
.
appendChild
(
typeCol
);
userRow
.
appendChild
(
validCol
);
userRow
.
appendChild
(
trustCol
);
userRow
.
appendChild
(
expCol
);
userRow
.
appendChild
(
fprCol
);
if
((
keyTrust
.
length
>
0
)
&&
(
KEY_NOT_VALID
.
indexOf
(
keyTrust
.
charAt
(
0
))
>=
0
)
||
(
keyObj
.
keyUseFor
.
indexOf
(
"D"
)
>=
0
))
{
for
(
var
node
=
userRow
.
firstChild
;
node
;
node
=
node
.
nextSibling
)
{
var
attr
=
node
.
getAttribute
(
"properties"
);
if
(
typeof
(
attr
)
==
"string"
)
{
node
.
setAttribute
(
"properties"
,
attr
+
" enigKeyInactive"
);
}
else
{
node
.
setAttribute
(
"properties"
,
"enigKeyInactive"
);
}
}
}
if
(
keyObj
.
secretAvailable
&&
subKeyNum
<
0
)
{
for
(
node
=
userRow
.
firstChild
;
node
;
node
=
node
.
nextSibling
)
{
attr
=
node
.
getAttribute
(
"properties"
);
if
(
typeof
(
attr
)
==
"string"
)
{
node
.
setAttribute
(
"properties"
,
attr
+
" enigmailOwnKey"
);
}
else
{
node
.
setAttribute
(
"properties"
,
"enigmailOwnKey"
);
}
}
}
treeItem
.
setAttribute
(
"id"
,
keyObj
.
keyId
);
treeItem
.
appendChild
(
userRow
);
return
treeItem
;
}
function
enigmailGetSelectedKeys
()
{
var
idList
=
new
Array
();
var
rangeCount
=
gUserList
.
view
.
selection
.
getRangeCount
();
for
(
var
i
=
0
;
i
<
rangeCount
;
i
++
)
{
var
start
=
{};
var
end
=
{};
gUserList
.
view
.
selection
.
getRangeAt
(
i
,
start
,
end
);
for
(
var
c
=
start
.
value
;
c
<=
end
.
value
;
c
++
)
{
try
{
idList
.
push
(
gUserList
.
view
.
getItemAtIndex
(
c
).
id
);
}
catch
(
ex
)
{
return
[];
}
}
}
return
idList
;
}
function
enigmailKeyMenu
()
{
var
keyList
=
enigmailGetSelectedKeys
();
if
(
keyList
.
length
==
1
&&
gKeyList
[
keyList
[
0
]].
secretAvailable
)
{
document
.
getElementById
(
"bcRevoke"
).
removeAttribute
(
"disabled"
);
document
.
getElementById
(
"bcEditKey"
).
removeAttribute
(
"disabled"
);
}
else
{
document
.
getElementById
(
"bcRevoke"
).
setAttribute
(
"disabled"
,
"true"
);
document
.
getElementById
(
"bcEditKey"
).
setAttribute
(
"disabled"
,
"true"
);
}
if
(
keyList
.
length
==
1
&&
gKeyList
[
keyList
[
0
]].
photoAvailable
)
{
document
.
getElementById
(
"bcViewPhoto"
).
removeAttribute
(
"disabled"
);
}
else
{
document
.
getElementById
(
"bcViewPhoto"
).
setAttribute
(
"disabled"
,
"true"
);
}
if
(
enigGetClipboard
().
length
>
0
)
{
document
.
getElementById
(
"bcClipbrd"
).
removeAttribute
(
"disabled"
);
}
else
{
document
.
getElementById
(
"bcClipbrd"
).
setAttribute
(
"disabled"
,
"true"
);
}
if
(
keyList
.
length
>=
1
)
{
document
.
getElementById
(
"bcEnableKey"
).
removeAttribute
(
"disabled"
);
if
(
gKeyList
[
keyList
[
0
]].
keyUseFor
.
indexOf
(
"D"
)
>
0
||
gKeyList
[
keyList
[
0
]].
keyTrust
.
indexOf
(
KEY_DISABLED
)
>=
0
)
{
document
.
getElementById
(
"bcEnableKey"
).
setAttribute
(
"label"
,
EnigGetString
(
"keyMan.enableKey"
))
}
else
{
document
.
getElementById
(
"bcEnableKey"
).
setAttribute
(
"label"
,
EnigGetString
(
"keyMan.disableKey"
))
}
}
if
(
keyList
.
length
==
1
)
{
document
.
getElementById
(
"bcSignKey"
).
removeAttribute
(
"disabled"
);
document
.
getElementById
(
"bcViewSig"
).
removeAttribute
(
"disabled"
);
document
.
getElementById
(
"bcOneKey"
).
removeAttribute
(
"disabled"
);
document
.
getElementById
(
"bcDeleteKey"
).
removeAttribute
(
"disabled"
);
document
.
getElementById
(
"bcNoKey"
).
removeAttribute
(
"disabled"
);
}
else
{
if
(
keyList
.
length
==
0
)
{
document
.
getElementById
(
"bcNoKey"
).
setAttribute
(
"disabled"
,
"true"
);
document
.
getElementById
(
"bcEnableKey"
).
setAttribute
(
"disabled"
,
"true"
);
}
else
{
document
.
getElementById
(
"bcNoKey"
).
removeAttribute
(
"disabled"
);
}
document
.
getElementById
(
"bcSignKey"
).
setAttribute
(
"disabled"
,
"true"
);
document
.
getElementById
(
"bcViewSig"
).
setAttribute
(
"disabled"
,
"true"
);
document
.
getElementById
(
"bcOneKey"
).
setAttribute
(
"disabled"
,
"true"
);
document
.
getElementById
(
"bcDeleteKey"
).
setAttribute
(
"disabled"
,
"true"
);
}
}
function
enigmailDblClick
(
event
)
{
if
(
event
)
{
if
(
event
.
button
!=
0
)
return
;
}
var
keyList
=
enigmailGetSelectedKeys
();
var
keyType
=
""
;
var
uatNum
=
""
;
if
(
keyList
.
length
==
1
)
{
var
rangeCount
=
gUserList
.
view
.
selection
.
getRangeCount
();
var
start
=
{};
var
end
=
{};
gUserList
.
view
.
selection
.
getRangeAt
(
0
,
start
,
end
);
try
{
keyType
=
gUserList
.
view
.
getItemAtIndex
(
start
.
value
).
getAttribute
(
"keytype"
);
uatNum
=
gUserList
.
view
.
getItemAtIndex
(
start
.
value
).
getAttribute
(
"uatNum"
);
}
catch
(
ex
)
{}
}
if
(
keyType
==
"uat"
)
{
enigShowPhoto
(
uatNum
);
}
else
{
enigmailKeyDetails
();
}
}
function
enigmailSelectAllKeys
()
{
gUserList
.
view
.
selection
.
selectAll
();
}
function
enigmailKeyDetails
()
{
var
keyList
=
enigmailGetSelectedKeys
();
var
inputObj
=
{
keyId
:
keyList
[
0
],
secKey
:
gKeyList
[
keyList
[
0
]].
secretAvailable
};
window
.
openDialog
(
"chrome://enigmail/content/enigmailKeyDetailsDlg.xul"
,
""
,
"dialog,modal,centerscreen"
,
inputObj
);
}
function
enigmailDeleteKey
()
{
var
keyList
=
enigmailGetSelectedKeys
();
var
deleteSecret
=
false
;
var
enigmailSvc
=
GetEnigmailSvc
();
if
(
!
enigmailSvc
)
return
;
if
(
keyList
.
length
==
1
)
{
// one key selected
var
userId
=
"0x"
+
keyList
[
0
].
substr
(
-
8
,
8
)
+
" - "
+
gKeyList
[
keyList
[
0
]].
userId
;
if
(
gKeyList
[
keyList
[
0
]].
secretAvailable
)
{
if
(
!
EnigConfirm
(
EnigGetString
(
"deleteSecretKey"
,
userId
)))
return
;
deleteSecret
=
true
;
}
else
{
if
(
!
EnigConfirm
(
EnigGetString
(
"deletePubKey"
,
userId
)))
return
;
}
}
else
{
// several keys selected
for
(
var
i
=
0
;
i
<
keyList
.
length
;
i
++
)
{
if
(
gKeyList
[
keyList
[
i
]].
secretAvailable
)
deleteSecret
=
true
;
}
if
(
deleteSecret
)
{
if
(
!
EnigConfirm
(
EnigGetString
(
"deleteMix"
)))
return
;
}
else
{
if
(
!
EnigConfirm
(
EnigGetString
(
"deleteSelectedPubKey"
)))
return
;
}
}
var
errorMsgObj
=
{};
var
r
=
enigmailSvc
.
deleteKey
(
window
,
"0x"
+
keyList
.
join
(
" 0x"
),
deleteSecret
,
errorMsgObj
);
if
(
r
!=
0
)
{
EnigAlert
(
EnigGetString
(
"deleteKeyFailed"
)
+
"\n\n"
+
errorMsgObj
.
value
);
}
enigmailRefreshKeys
();
}
function
enigmailEnableKey
()
{
var
keyList
=
enigmailGetSelectedKeys
();
var
disableKey
=
(
gKeyList
[
keyList
[
0
]].
keyUseFor
.
indexOf
(
"D"
)
<
0
&&
gKeyList
[
keyList
[
0
]].
keyTrust
.
indexOf
(
KEY_DISABLED
)
<
0
);
var
enigmailSvc
=
GetEnigmailSvc
();
if
(
!
enigmailSvc
)
return
;
for
(
var
i
=
0
;
i
<
keyList
.
length
;
i
++
)
{
var
errorMsgObj
=
{};
var
r
=
enigmailSvc
.
enableDisableKey
(
window
,
"0x"
+
keyList
[
i
],
disableKey
,
errorMsgObj
);
if
(
r
!=
0
)
{
EnigAlert
(
EnigGetString
(
"enableKeyFailed"
)
+
"\n\n"
+
errorMsgObj
.
value
);
break
;
}
}
enigmailRefreshKeys
();
}
function
enigShowPhoto
(
uatNumber
)
{
var
keyList
=
enigmailGetSelectedKeys
();
EnigShowPhoto
(
keyList
[
0
],
gKeyList
[
keyList
[
0
]].
userId
,
uatNumber
);
}
function
enigCreateKeyMsg
()
{
var
enigmailSvc
=
GetEnigmailSvc
();
if
(
!
enigmailSvc
)
return
;
var
keyList
=
enigmailGetSelectedKeys
();
if
(
keyList
.
length
==
0
)
{
EnigAlert
(
EnigGetString
(
"noKeySelected"
));
return
;
}
var
tmpDir
=
EnigGetTempDir
();
try
{
var
tmpFile
=
Components
.
classes
[
ENIG_LOCAL_FILE_CONTRACTID
].
createInstance
(
Components
.
interfaces
.
nsILocalFile
);
tmpFile
.
initWithPath
(
tmpDir
);
if
(
!
(
tmpFile
.
isDirectory
()
&&
tmpFile
.
isWritable
()))
{
EnigAlert
(
EnigGetString
(
"noTempDir"
));
return
;
}
}
catch
(
ex
)
{}
tmpFile
.
append
(
"key.asc"
);
tmpFile
.
createUnique
(
Components
.
interfaces
.
nsIFile
.
NORMAL_FILE_TYPE
,
0600
);
// save file
var
exitCodeObj
=
{};
var
errorMsgObj
=
{};
enigmailSvc
.
extractKey
(
window
,
0
,
"0x"
+
keyList
.
join
(
" 0x"
),
tmpFile
.
path
,
exitCodeObj
,
errorMsgObj
);
if
(
exitCodeObj
.
value
!=
0
)
{
EnigAlert
(
errorMsgObj
.
value
);
return
;
}
// create attachment
var
ioServ
=
Components
.
classes
[
ENIG_IOSERVICE_CONTRACTID
].
getService
(
Components
.
interfaces
.
nsIIOService
);
var
tmpFileURI
=
ioServ
.
newFileURI
(
tmpFile
);
var
keyAttachment
=
Components
.
classes
[
"@mozilla.org/messengercompose/attachment;1"
].
createInstance
(
Components
.
interfaces
.
nsIMsgAttachment
);
keyAttachment
.
url
=
tmpFileURI
.
spec
;
if
(
keyList
.
length
==
1
)
{
keyAttachment
.
name
=
"0x"
+
keyList
[
0
].
substr
(
-
8
,
8
)
+
".asc"
}
else
{
keyAttachment
.
name
=
"pgpkeys.asc"
;
}
keyAttachment
.
temporary
=
true
;
keyAttachment
.
contentType
=
"application/pgp-keys"
;
// create Msg
var
msgCompFields
=
Components
.
classes
[
"@mozilla.org/messengercompose/composefields;1"
].
createInstance
(
Components
.
interfaces
.
nsIMsgCompFields
);
msgCompFields
.
addAttachment
(
keyAttachment
);
var
acctManager
=
Components
.
classes
[
"@mozilla.org/messenger/account-manager;1"
].
createInstance
(
Components
.
interfaces
.
nsIMsgAccountManager
);
var
msgCompSvc
=
Components
.
classes
[
"@mozilla.org/messengercompose;1"
].
getService
(
Components
.
interfaces
.
nsIMsgComposeService
);
if
(
typeof
(
msgCompSvc
.
OpenComposeWindowWithCompFields
)
!=
"function"
)
{
// TB 1.5
var
msgCompParam
=
Components
.
classes
[
"@mozilla.org/messengercompose/composeparams;1"
].
createInstance
(
Components
.
interfaces
.
nsIMsgComposeParams
);
msgCompParam
.
composeFields
=
msgCompFields
;
msgCompParam
.
identity
=
acctManager
.
defaultAccount
.
defaultIdentity
;
msgCompParam
.
type
=
Components
.
interfaces
.
nsIMsgCompType
.
New
;
msgCompParam
.
format
=
Components
.
interfaces
.
nsIMsgCompFormat
.
Default
;
msgCompParam
.
originalMsgURI
=
""
;
msgCompSvc
.
OpenComposeWindowWithParams
(
""
,
msgCompParam
);
}
else
{
// TB 1.0
msgCompSvc
.
OpenComposeWindowWithCompFields
(
""
,
Components
.
interfaces
.
nsIMsgCompType
.
New
,
Components
.
interfaces
.
nsIMsgCompFormat
.
Default
,
msgCompFields
,
acctManager
.
defaultAccount
.
defaultIdentity
);
}
}
function
enigEditKeyTrust
()
{
var
keyList
=
enigmailGetSelectedKeys
();
if
(
keyList
.
length
==
0
)
{
EnigAlert
(
EnigGetString
(
"noKeySelected"
));
return
;
}
var
userIdList
=
[];
for
(
var
i
=
0
;
i
<
keyList
.
length
;
i
++
)
{
userIdList
.
push
(
gKeyList
[
keyList
[
i
]].
userId
);
}
EnigEditKeyTrust
(
userIdList
,
keyList
);
enigmailRefreshKeys
();
}
function
enigSignKey
()
{
var
keyList
=
enigmailGetSelectedKeys
();
if
(
keyList
.
length
==
0
)
{
EnigAlert
(
EnigGetString
(
"noKeySelected"
));
return
;
}
EnigSignKey
(
gKeyList
[
keyList
[
0
]].
userId
,
keyList
[
0
],
null
);
enigmailRefreshKeys
();
}
function
enigmailRevokeKey
()
{
var
keyList
=
enigmailGetSelectedKeys
();
var
enigmailSvc
=
GetEnigmailSvc
();
if
(
!
enigmailSvc
)
return
;
var
userId
=
"0x"
+
keyList
[
0
].
substr
(
-
8
,
8
)
+
" - "
+
gKeyList
[
keyList
[
0
]].
userId
;
if
(
!
EnigConfirm
(
EnigGetString
(
"revokeKeyAsk"
,
userId
)))
return
;
var
tmpDir
=
EnigGetTempDir
();
try
{
var
revFile
=
Components
.
classes
[
ENIG_LOCAL_FILE_CONTRACTID
].
createInstance
(
Components
.
interfaces
.
nsILocalFile
);
revFile
.
initWithPath
(
tmpDir
);
if
(
!
(
revFile
.
isDirectory
()
&&
revFile
.
isWritable
()))
{
EnigAlert
(
EnigGetString
(
"noTempDir"
));
return
;
}
}
catch
(
ex
)
{}
revFile
.
append
(
"revkey.asc"
);
revFile
.
createUnique
(
Components
.
interfaces
.
nsIFile
.
NORMAL_FILE_TYPE
,
0600
);
var
errorMsgObj
=
{};
var
r
=
enigmailSvc
.
genRevokeCert
(
window
,
"0x"
+
keyList
[
0
],
revFile
.
path
,
"0"
,
""
,
errorMsgObj
);
if
(
r
!=
0
)
{
revFile
.
remove
(
false
);
EnigAlert
(
EnigGetString
(
"revokeKeyFailed"
)
+
"\n\n"
+
errorMsgObj
.
value
);
return
;
}
r
=
enigmailSvc
.
importKeyFromFile
(
window
,
revFile
.
path
,
errorMsgObj
);
revFile
.
remove
(
false
);
if
(
r
!=
0
)
{
EnigAlert
(
EnigGetString
(
"revokeKeyFailed"
)
+
"\n\n"
+
errorMsgObj
.
value
);
}
else
{
EnigAlert
(
EnigGetString
(
"revokeKeyOk"
));
}
enigmailRefreshKeys
();
}
function
enigCreateRevokeCert
()
{
var
keyList
=
enigmailGetSelectedKeys
();
EnigCreateRevokeCert
(
keyList
[
0
],
gKeyList
[
keyList
[
0
]].
userId
);
}
function
enigmailExportKeys
()
{
var
keyList
=
enigmailGetSelectedKeys
();
if
(
keyList
.
length
==
0
)
{
EnigAlert
(
EnigGetString
(
"noKeySelected"
));
return
;
}
var
exportFlags
=
0
;
if
(
gKeyList
[
keyList
[
0
]].
secretAvailable
)
{
if
(
EnigConfirm
(
EnigGetString
(
"exportSecretKey"
)))
{
exportFlags
|=
nsIEnigmail
.
EXTRACT_SECRET_KEY
;
}
}
var
enigmailSvc
=
GetEnigmailSvc
();
if
(
!
enigmailSvc
)
return
;
if
(
keyList
.
length
==
1
)
{
var
defaultFileName
=
gKeyList
[
keyList
[
0
]].
userId
.
replace
(
/[\<\>]/g
,
""
);
if
(
exportFlags
&
nsIEnigmail
.
EXTRACT_SECRET_KEY
)
{
defaultFileName
=
EnigGetString
(
"specificPubSecKeyFilename"
,
defaultFileName
,
keyList
[
0
].
substr
(
-
8
,
8
))
+
".asc"
;
}
else
{
defaultFileName
=
EnigGetString
(
"specificPubKeyFilename"
,
defaultFileName
,
keyList
[
0
].
substr
(
-
8
,
8
))
+
".asc"
;
}
}
else
{
if
(
exportFlags
&
nsIEnigmail
.
EXTRACT_SECRET_KEY
)
{
defaultFileName
=
EnigGetString
(
"defaultPubSecKeyFilename"
)
+
".asc"
}
else
{
defaultFileName
=
EnigGetString
(
"defaultPubKeyFilename"
)
+
".asc"
}
}
var
outFile
=
EnigFilePicker
(
EnigGetString
(
"exportToFile"
),
""
,
true
,
"*.asc"
,
defaultFileName
,
[
EnigGetString
(
"asciiArmorFile"
),
"*.asc"
]);
if
(
!
outFile
)
return
;
var
keyListStr
=
"0x"
+
keyList
.
join
(
" 0x"
);
var
exitCodeObj
=
{};
var
errorMsgObj
=
{};
enigmailSvc
.
extractKey
(
window
,
exportFlags
,
keyListStr
,
outFile
.
path
,
exitCodeObj
,
errorMsgObj
);
if
(
exitCodeObj
.
value
!=
0
)
{
EnigAlert
(
EnigGetString
(
"saveKeysFailed"
)
+
"\n\n"
+
errorMsgObj
.
value
);
}
else
{
EnigAlert
(
EnigGetString
(
"saveKeysOK"
));
}
}
function
enigmailImportKeysFromFile
()
{
var
enigmailSvc
=
GetEnigmailSvc
();
if
(
!
enigmailSvc
)
return
;
var
inFile
=
EnigFilePicker
(
EnigGetString
(
"importFile"
),
""
,
false
,
"*.asc"
,
""
,
[
EnigGetString
(
"gnupgFile"
),
"*.asc;*.gpg;*.pgp"
]);
if
(
!
inFile
)
return
;
var
errorMsgObj
=
{};
var
exitCode
=
enigmailSvc
.
importKeyFromFile
(
window
,
inFile
.
path
,
errorMsgObj
);
if
(
exitCode
!=
0
)
{
EnigAlert
(
EnigGetString
(
"importKeysFailed"
)
+
"\n\n"
+
errorMsgObj
.
value
);
}
else
{
EnigLongAlert
(
EnigGetString
(
"successKeyImport"
)
+
"\n\n"
+
errorMsgObj
.
value
);
}
enigmailRefreshKeys
();
}
function
enigmailSearchKeys
()
{
var
inputObj
=
{
searchList
:
""
};
var
resultObj
=
new
Object
();
EnigDownloadKeys
(
inputObj
,
resultObj
);
if
(
resultObj
.
importedKeys
>
0
)
{
enigmailRefreshKeys
();
}
}
function
enigmailListSig
()
{
var
keyList
=
enigmailGetSelectedKeys
();
var
inputObj
=
{
keyId
:
keyList
[
0
],
keyListArr
:
gKeyList
};
var
resultObj
=
{};
window
.
openDialog
(
"chrome://enigmail/content/enigmailViewKeySigDlg.xul"
,
""
,
"dialog,modal,centerscreen,resizable=yes"
,
inputObj
,
resultObj
);
if
(
resultObj
.
refresh
)
{
enigmailRefreshKeys
();
}
}
function
enigmailManageUids
()
{
var
keyList
=
enigmailGetSelectedKeys
();
var
inputObj
=
{
keyId
:
keyList
[
0
],
ownKey
:
gKeyList
[
keyList
[
0
]].
secretAvailable
};
window
.
openDialog
(
"chrome://enigmail/content/enigmailManageUidDlg.xul"
,
""
,
"dialog,modal,centerscreen,resizable=yes"
,
inputObj
);
enigmailRefreshKeys
();
}
function
enigmailChangePwd
()
{
var
keyList
=
enigmailGetSelectedKeys
();
var
inputObj
=
{
keyId
:
keyList
[
0
],
userId
:
gKeyList
[
keyList
[
0
]].
userId
};
window
.
openDialog
(
"chrome://enigmail/content/enigmailChangePasswd.xul"
,
""
,
"dialog,modal,centerscreen"
,
inputObj
);
}
function
enigGetClipboard
()
{
DEBUG_LOG
(
"enigmailKeyManager.js: enigGetClipboard:\n"
);
var
cBoardContent
=
""
;
var
clipBoard
=
Components
.
classes
[
ENIG_CLIPBOARD_CONTRACTID
].
getService
(
Components
.
interfaces
.
nsIClipboard
);
try
{
var
transferable
=
Components
.
classes
[
ENIG_TRANSFERABLE_CONTRACTID
].
createInstance
(
Components
.
interfaces
.
nsITransferable
);
transferable
.
addDataFlavor
(
"text/unicode"
);
clipBoard
.
getData
(
transferable
,
clipBoard
.
kGlobalClipboard
);
var
flavour
=
{};
var
data
=
{};
var
length
=
{};
transferable
.
getAnyTransferData
(
flavour
,
data
,
length
);
cBoardContent
=
data
.
value
.
QueryInterface
(
Components
.
interfaces
.
nsISupportsString
).
data
;
DEBUG_LOG
(
"enigmailKeyManager.js: enigGetClipboard: got data\n"
);
}
catch
(
ex
)
{}
return
cBoardContent
;
}
function
enigmailImportFromClipbrd
()
{
var
enigmailSvc
=
GetEnigmailSvc
();
if
(
!
enigmailSvc
)
return
;
if
(
!
EnigConfirm
(
EnigGetString
(
"importFromClip"
)))
{
return
;
}
var
cBoardContent
=
enigGetClipboard
();
var
errorMsgObj
=
{};
var
r
=
enigmailSvc
.
importKey
(
window
,
0
,
cBoardContent
,
""
,
errorMsgObj
);
EnigLongAlert
(
errorMsgObj
.
value
);
enigmailRefreshKeys
();
}
function
enigmailCopyToClipbrd
()
{
var
enigmailSvc
=
GetEnigmailSvc
();
if
(
!
enigmailSvc
)
return
;
var
keyList
=
enigmailGetSelectedKeys
();
if
(
keyList
.
length
==
0
)
{
EnigAlert
(
EnigGetString
(
"noKeySelected"
));
return
;
}
var
exitCodeObj
=
{};
var
errorMsgObj
=
{};
var
keyData
=
enigmailSvc
.
extractKey
(
window
,
0
,
"0x"
+
keyList
.
join
(
" 0x"
),
null
,
exitCodeObj
,
errorMsgObj
);
if
(
exitCodeObj
.
value
!=
0
)
{
EnigAlert
(
EnigGetString
(
"copyToClipbrdFailed"
)
+
"\n\n"
+
errorMsgObj
.
value
);
return
;
}
var
clipBoard
=
Components
.
classes
[
ENIG_CLIPBOARD_CONTRACTID
].
getService
(
Components
.
interfaces
.
nsIClipboard
);
try
{
clipBoardHlp
=
Components
.
classes
[
ENIG_CLIPBOARD_HELPER_CONTRACTID
].
getService
(
Components
.
interfaces
.
nsIClipboardHelper
);
clipBoardHlp
.
copyStringToClipboard
(
keyData
,
clipBoard
.
kGlobalClipboard
);
if
(
clipBoard
.
supportsSelectionClipboard
())
{
clipBoardHlp
.
copyStringToClipboard
(
keyData
,
clipBoard
.
kSelectionClipboard
);
}
DEBUG_LOG
(
"enigmailKeyManager.js: enigmailImportFromClipbrd: got data from clipboard"
);
EnigAlert
(
EnigGetString
(
"copyToClipbrdOK"
));
}
catch
(
ex
)
{
EnigAlert
(
EnigGetString
(
"copyToClipbrdFailed"
));
}
}
function
enigmailSearchKey
()
{
var
inputObj
=
{
searchList
:
null
};
var
resultObj
=
new
Object
();
EnigDownloadKeys
(
inputObj
,
resultObj
);
if
(
resultObj
.
importedKeys
>
0
)
{
enigmailRefreshKeys
();
}
}
function
enigmailUploadKeys
()
{
enigmailKeyServerAcess
(
nsIEnigmail
.
UPLOAD_KEY
,
enigmailUploadKeysCb
);
}
function
enigmailUploadKeysCb
(
exitCode
,
errorMsg
,
msgBox
)
{
if
(
msgBox
)
{
if
(
exitCode
!=
0
)
{
EnigLongAlert
(
EnigGetString
(
"sendKeysFailed"
)
+
"\n"
+
errorMsg
);
}
}
else
{
return
(
EnigGetString
(
exitCode
==
0
?
"sendKeysOK"
:
"sendKeysFailed"
));
}
return
""
;
}
function
enigmailReceiveKey
()
{
enigmailKeyServerAcess
(
nsIEnigmail
.
DOWNLOAD_KEY
,
enigmailReceiveKeyCb
);
}
function
enigmailRefreshAllKeys
()
{
EnigAlertPref
(
EnigGetString
(
"refreshKey.warn"
),
"warnRefreshAll"
);
enigmailKeyServerAcess
(
nsIEnigmail
.
REFRESH_KEY
,
enigmailReceiveKeyCb
);
}
function
enigmailReceiveKeyCb
(
exitCode
,
errorMsg
,
msgBox
)
{
if
(
msgBox
)
{
if
(
exitCode
==
0
)
{
EnigLongAlert
(
EnigGetString
(
"receiveKeysOk"
)
+
"\n"
+
errorMsg
);
enigmailRefreshKeys
();
}
else
{
EnigLongAlert
(
EnigGetString
(
"receiveKeysFailed"
)
+
"\n"
+
errorMsg
);
}
}
else
{
return
(
EnigGetString
(
exitCode
==
0
?
"receiveKeysOk"
:
"receiveKeysFailed"
));
}
return
""
;
}
//
// ----- key filtering functionality -----
//
function
onSearchInput
(
returnKeyHit
)
{
if
(
gSearchTimer
)
{
clearTimeout
(
gSearchTimer
);
gSearchTimer
=
null
;
}
// only select the text when the return key was hit
if
(
returnKeyHit
)
{
gSearchInput
.
select
();
onEnterInSearchBar
();
}
else
{
gSearchTimer
=
setTimeout
(
"onEnterInSearchBar();"
,
800
);
}
}
function
onSearchKeyPress
(
event
)
{
// 13 == return
if
(
event
&&
event
.
keyCode
==
13
)
{
event
.
stopPropagation
();
// make sure the dialog is not closed...
onSearchInput
(
true
);
}
}
function
onEnterInSearchBar
()
{
if
(
gSearchInput
.
value
==
""
)
{
onResetFilter
();
return
;
}
gClearButton
.
setAttribute
(
"disabled"
,
false
);
enigApplyFilter
();
}
function
getFirstNode
()
{
return
document
.
getElementById
(
"pgpKeyListChildren"
).
firstChild
;
}
function
onResetFilter
()
{
gFilterBox
.
value
=
""
;
var
node
=
getFirstNode
();
while
(
node
)
{
node
.
hidden
=
false
;
node
=
node
.
nextSibling
;
}
gClearButton
.
setAttribute
(
"disabled"
,
true
);
}
function
enigApplyFilter
()
{
var
searchTxt
=
gSearchInput
.
value
;
if
(
!
searchTxt
||
searchTxt
.
length
==
0
)
return
;
searchTxt
=
searchTxt
.
toLowerCase
();
var
node
=
getFirstNode
();
while
(
node
)
{
var
uid
=
gKeyList
[
node
.
id
].
userId
;
var
hideNode
=
true
;
if
((
uid
.
toLowerCase
().
indexOf
(
searchTxt
)
>=
0
)
||
(
node
.
id
.
toLowerCase
().
indexOf
(
searchTxt
)
>=
0
))
{
hideNode
=
false
;
}
for
(
var
subUid
=
0
;
subUid
<
gKeyList
[
node
.
id
].
SubUserIds
.
length
;
subUid
++
)
{
uid
=
gKeyList
[
node
.
id
].
SubUserIds
[
subUid
].
userId
;
if
(
uid
.
toLowerCase
().
indexOf
(
searchTxt
)
>=
0
)
{
hideNode
=
false
;
}
}
node
.
hidden
=
hideNode
;
node
=
node
.
nextSibling
;
}
}
//
// ----- keyserver related functionality ----
//
function
enigmailKeyServerAcess
(
accessType
,
callbackFunc
)
{
var
enigmailSvc
=
GetEnigmailSvc
();
if
(
!
enigmailSvc
)
return
;
var
resultObj
=
{};
var
inputObj
=
{};
if
(
accessType
==
nsIEnigmail
.
UPLOAD_KEY
)
{
inputObj
.
upload
=
true
;
}
var
selKeyList
=
enigmailGetSelectedKeys
();
if
(
accessType
!=
nsIEnigmail
.
REFRESH_KEY
&&
selKeyList
.
length
==
0
)
{
if
(
EnigConfirm
(
EnigGetString
(
"refreshAllQuestion"
)))
{
accessType
=
nsIEnigmail
.
REFRESH_KEY
;
EnigAlertPref
(
EnigGetString
(
"refreshKey.warn"
),
"warnRefreshAll"
);
}
else
{
return
;
}
}
if
(
accessType
!=
nsIEnigmail
.
REFRESH_KEY
)
{
var
keyList
=
[];
for
(
var
i
=
0
;
i
<
selKeyList
.
length
;
i
++
)
{
keyList
.
push
(
"0x"
+
selKeyList
[
i
].
substr
(
-
8
,
8
)
+
" - "
+
gKeyList
[
selKeyList
[
i
]].
userId
);
}
inputObj
.
keyId
=
keyList
.
join
(
", "
);
}
else
{
inputObj
.
keyId
=
""
;
}
window
.
openDialog
(
"chrome://enigmail/content/enigmailKeyserverDlg.xul"
,
""
,
"dialog,modal,centerscreen"
,
inputObj
,
resultObj
);
if
(
!
resultObj
.
value
)
{
return
;
}
var
keyDlObj
=
{
accessType
:
accessType
,
keyServer
:
resultObj
.
value
,
keyList
:
"0x"
+
selKeyList
.
join
(
" 0x"
),
cbFunc
:
callbackFunc
};
window
.
openDialog
(
"chrome://enigmail/content/enigRetrieveProgress.xul"
,
""
,
"dialog,modal,centerscreen"
,
keyDlObj
,
resultObj
);
if
(
accessType
!=
nsIEnigmail
.
UPLOAD_KEY
&&
resultObj
.
result
)
{
enigmailRefreshKeys
();
}
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Feb 2, 8:39 AM (2 h, 22 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
a3/42/2783a34c71742cfd0c17a1e5b507
Attached To
rENIG Enigmail
Event Timeline
Log In to Comment