PreRelease fixes

This commit is contained in:
RainLoop Team 2015-07-05 22:06:19 +04:00
parent 34a9b8cbc5
commit 42bac6aa2f
55 changed files with 578 additions and 238 deletions

View file

@ -1378,7 +1378,16 @@
if ($LAB && window.crypto && window.crypto.getRandomValues && Settings.capa(Enums.Capa.OpenPGP))
{
var fOpenpgpCallback = function (openpgp) {
PgpStore.openpgp = openpgp;
if (window.Worker)
{
PgpStore.openpgp.initWorker(Links.openPgpWorkerJs());
}
// PgpStore.openpgp.config.useWebCrypto = false;
PgpStore.openpgpKeyring = new openpgp.Keyring();
PgpStore.capaOpenPGP(true);

View file

@ -390,7 +390,23 @@
*/
Links.prototype.openPgpJs = function ()
{
return this.sStaticPrefix + 'js/min/openpgp.js';
return this.sStaticPrefix + 'js/min/openpgp.min.js';
};
/**
* @return {string}
*/
Links.prototype.openPgpWorkerJs = function ()
{
return this.sStaticPrefix + 'js/min/openpgp.worker.min.js';
};
/**
* @return {string}
*/
Links.prototype.openPgpWorkerPath = function ()
{
return this.sStaticPrefix + 'js/min/';
};
/**

90
dev/External/ko.js vendored
View file

@ -821,7 +821,7 @@
'parseOnBlur': true,
'allowDragAndDrop': true,
'focusCallback': fFocusCallback,
'inputDelimiters': [',', ';', '\n'],
'inputDelimiters': [',', ';', "\n"],
'autoCompleteSource': fAutoCompleteSource,
// 'elementHook': function (oEl, oItem) {
// if (oEl && oItem)
@ -832,52 +832,70 @@
// },
'parseHook': function (aInput) {
var aResult = [];
_.each(aInput, function (sInputValue) {
return _.map(aInput, function (sInputValue) {
var
aM = null,
aValues = [],
sValue = Utils.trim(sInputValue),
oEmail = null
;
if ('' !== sValue)
{
aM = sValue.match(/[@]/g);
if (aM && 0 < aM.length)
{
sValue = sValue.replace(/[\r\n]+/g, '; ').replace(/[\s]+/g, ' ');
aValues = EmailModel.splitHelper(sValue, ';');
_.each(aValues, function (sV) {
oEmail = new EmailModel();
oEmail.mailsoParse(sV);
if (oEmail.email)
{
aResult.push([oEmail.toLine(false), oEmail]);
}
else
{
aResult.push(['', null]);
}
});
}
else
{
aResult.push([sInputValue, null]);
}
}
else
{
aResult.push([sInputValue, null]);
oEmail = new EmailModel();
oEmail.mailsoParse(sValue);
return [oEmail.toLine(false), oEmail];
}
return [sValue, null];
});
return aResult;
// var aResult = [];
//
// _.each(aInput, function (sInputValue) {
//
// var
// aM = null,
// aValues = [],
// sValue = Utils.trim(sInputValue),
// oEmail = null
// ;
//
// if ('' !== sValue)
// {
// aM = sValue.match(/[@]/g);
// if (aM && 0 < aM.length)
// {
// sValue = sValue.replace(/[\r\n]+/g, '; ').replace(/[\s]+/g, ' ');
// aValues = EmailModel.splitHelper(sValue, ';');
//
// _.each(aValues, function (sV) {
//
// oEmail = new EmailModel();
// oEmail.mailsoParse(sV);
//
// if (oEmail.email)
// {
// aResult.push([oEmail.toLine(false), oEmail]);
// }
// else
// {
// aResult.push(['', null]);
// }
// });
// }
// else
// {
// aResult.push([sInputValue, null]);
// }
// }
// else
// {
// aResult.push([sInputValue, null]);
// }
// });
//
// return aResult;
},
'change': _.bind(function (oEvent) {
$oEl.data('EmailsTagsValue', oEvent.target.value);

View file

@ -33,10 +33,12 @@
this.identityForDeletion = ko.observable(null).deleteAccessHelper();
}
AccountsUserSettings.prototype.scrollableOptions = function ()
AccountsUserSettings.prototype.scrollableOptions = function (sWrapper)
{
return {
handle: '.drag-handle'
handle: '.drag-handle',
containment: sWrapper || 'parent',
axis: 'y'
};
};

View file

@ -110,10 +110,12 @@
}, this);
}
FiltersUserSettings.prototype.scrollableOptions = function ()
FiltersUserSettings.prototype.scrollableOptions = function (sWrapper)
{
return {
handle: '.drag-handle'
handle: '.drag-handle',
containment: sWrapper || 'parent',
axis: 'y'
};
};

View file

@ -6,6 +6,7 @@
var
_ = require('_'),
ko = require('ko'),
window = require('window'),
Utils = require('Common/Utils'),
@ -24,6 +25,8 @@
this.openpgpkeysPrivate = PgpStore.openpgpkeysPrivate;
this.openPgpKeyForDeletion = ko.observable(null).deleteAccessHelper();
this.isHttps = window.document && window.document.location ? 'https:' === window.document.location.protocol : false;
}
OpenPgpUserSettings.prototype.addOpenPgpKey = function ()

View file

@ -31,10 +31,12 @@
this.templateForDeletion = ko.observable(null).deleteAccessHelper();
}
TemplatesUserSettings.prototype.scrollableOptions = function ()
TemplatesUserSettings.prototype.scrollableOptions = function (sWrapper)
{
return {
handle: '.drag-handle'
handle: '.drag-handle',
containment: sWrapper || 'parent',
axis: 'y'
};
};

View file

@ -40,7 +40,7 @@
cursor: pointer;
color: #ccc;
}
.identity-name {
display: inline-block;
word-break: break-all;
@ -50,6 +50,12 @@
}
}
.accounts-list-top-padding, .identities-list-top-padding {
display: inline-block;
height: 5px;
width: 5px;
}
.account-item {
.e-action {

View file

@ -46,6 +46,12 @@
}
}
.filters-list-top-padding {
display: inline-block;
height: 5px;
width: 5px;
}
.filter-item {
.e-action {

View file

@ -37,6 +37,12 @@
}
}
.templates-list-top-padding {
display: inline-block;
height: 5px;
width: 5px;
}
.template-item {
.e-action {

View file

@ -42,7 +42,6 @@
var
self = this,
sUserID = '',
mKeyPair = null,
oOpenpgpKeyring = PgpStore.openpgpKeyring
;
@ -72,7 +71,7 @@
'passphrase': Utils.trim(self.password())
});
mPromise.then(function () {
mPromise.then(function (mKeyPair) {
self.submitRequest(false);
@ -80,6 +79,7 @@
{
oOpenpgpKeyring.privateKeys.importKey(mKeyPair.privateKeyArmored);
oOpenpgpKeyring.publicKeys.importKey(mKeyPair.publicKeyArmored);
oOpenpgpKeyring.store();
require('App/User').reloadOpenPgpKeys();
@ -89,8 +89,11 @@
})['catch'](function() {
self.submitRequest(false);
});
} catch (e) {}
}
catch (e)
{
self.submitRequest(false);
}
}, 100);

View file

@ -140,11 +140,17 @@ cfg.paths.js = {
]
},
openpgp: {
name: 'openpgp.js',
name: 'openpgp.min.js',
src: [
'vendors/openpgp/openpgp-0.10.1.min.js'
]
},
openpgpworker: {
name: 'openpgp.worker.min.js',
src: [
'vendors/openpgp/openpgp-0.10.1.worker.min.js'
]
},
encrypt: {
name: 'bundle.js',
header: '(function (window) {',
@ -294,6 +300,13 @@ gulp.task('js:openpgp', function() {
.pipe(gulp.dest(cfg.paths.staticMinJS));
});
gulp.task('js:openpgpworker', function() {
return gulp.src(cfg.paths.js.openpgpworker.src)
.pipe(rename(cfg.paths.js.openpgpworker.name))
.pipe(eol('\n', true))
.pipe(gulp.dest(cfg.paths.staticMinJS));
});
gulp.task('js:libs', function() {
return gulp.src(cfg.paths.js.libs.src)
.pipe(concat(cfg.paths.js.libs.name, {separator: '\n\n'}))
@ -642,7 +655,7 @@ gulp.task('rainloop:owncloud:clean', ['rainloop:owncloud:copy', 'rainloop:ownclo
});
// MAIN
gulp.task('default', ['js:libs', 'js:boot', 'js:openpgp', 'js:min', 'css:main:min', 'ckeditor', 'fontastic']);
gulp.task('default', ['js:libs', 'js:boot', 'js:openpgp', 'js:openpgpworker', 'js:min', 'css:main:min', 'ckeditor', 'fontastic']);
gulp.task('fast-', ['js:app', 'js:admin', 'js:chunks', 'css:main']);
gulp.task('fast', ['package:community-on', 'fast-']);

View file

@ -1,8 +1,8 @@
{
"name": "RainLoop",
"title": "RainLoop Webmail",
"version": "1.9.1",
"release": "335",
"version": "1.9.2",
"release": "342",
"description": "Simple, modern & fast web-based email client",
"homepage": "http://rainloop.net",
"main": "gulpfile.js",
@ -40,7 +40,7 @@
"plugins"
],
"readmeFilename": "README.md",
"ownCloudPackageVersion": "4.3",
"ownCloudPackageVersion": "4.4",
"engines": {
"node": ">= 0.10.0"
},

View file

@ -49,7 +49,13 @@ class DateTimeHelper
*/
public static function ParseRFC2822DateString($sDateTime)
{
$sDateTime = \trim(\preg_replace('/ \([a-zA-Z0-9]+\)$/', '', \trim($sDateTime)));
$sDateTime = \trim($sDateTime);
if (empty($sDateTime))
{
return 0;
}
$sDateTime = \trim(\preg_replace('/ \([a-zA-Z0-9]+\)$/', '', $sDateTime));
$oDateTime = \DateTime::createFromFormat('D, d M Y H:i:s O', $sDateTime, \MailSo\Base\DateTimeHelper::GetUtcTimeZoneObject());
return $oDateTime ? $oDateTime->getTimestamp() : 0;
}
@ -65,7 +71,12 @@ class DateTimeHelper
public static function ParseInternalDateString($sDateTime)
{
$sDateTime = \trim($sDateTime);
if (\preg_match('/^[a-z]{2,4}, /i', $sDateTime)) // RFC2822
if (empty($sDateTime))
{
return 0;
}
if (\preg_match('/^[a-z]{2,4}, /i', $sDateTime)) // RFC2822 ~ "Thu, 10 Jun 2010 08:58:33 -0700 (PDT)"
{
return \MailSo\Base\DateTimeHelper::ParseRFC2822DateString($sDateTime);
}
@ -83,7 +94,13 @@ class DateTimeHelper
*/
public static function ParseDateStringType1($sDateTime)
{
$oDateTime = \DateTime::createFromFormat('Y-m-d H:i:s O', \trim($sDateTime), \MailSo\Base\DateTimeHelper::GetUtcTimeZoneObject());
$sDateTime = \trim($sDateTime);
if (empty($sDateTime))
{
return 0;
}
$oDateTime = \DateTime::createFromFormat('Y-m-d H:i:s O', $sDateTime, \MailSo\Base\DateTimeHelper::GetUtcTimeZoneObject());
return $oDateTime ? $oDateTime->getTimestamp() : 0;
}

View file

@ -2368,7 +2368,8 @@ END;
{
$aMatch = array();
return \preg_match('/.+(\.[a-zA-Z]+)$/', $sDomain, $aMatch) && !empty($aMatch[1]) && \in_array($aMatch[1], \explode(' ',
'.aero .asia .biz .cat .com .coop .edu .gov .info .int .jobs .mil .mobi .museum .name .net .org .pro .tel .travel .xxx .ac .ad .ae .af .ag .ai .al .am .an .ao .aq .ar .as .at .au .aw .ax .az .ba .bb .bd .be .bf .bg .bh .bi .bj .bm .bn .bo .br .bs .bt .bv .bw .by .bz .ca .cc .cd .cf .cg .ch .ci .ck .cl .cm .cn .co .cr .cs .cu .cv .cx .cy .cz .dd .de .dj .dk .dm .do .dz .ec .ee .eg .er .es .et .eu .fi .fj .fk .fm .fo .fr .ga .gb .gd .ge .gf .gg .gh .gi .gl .gm .gn .gp .gq .gr .gs .gt .gu .gw .gy .hk .hm .hn .hr .ht .hu .id .ie .il .im .in .io .iq .ir .is .it .je .jm .jo .jp .ke .kg .kh .ki .km .kn .kp .kr .kw .ky .kz .la .lb .lc .li .lk .lr .ls .lt .lu .lv .ly .ma .mc .md .me .mg .mh .mk .ml .mm .mn .mo .mp .mq .mr .ms .mt .mu .mv .mw .mx .my .mz .na .nc .ne .nf .ng .ni .nl .no .np .nr .nu .nz .om .pa .pe .pf .pg .ph .pk .pl .pm .pn .pr .ps .pt .pw .py .qa .re .ro .rs .ru . .rw .sa .sb .sc .sd .se .sg .sh .si .sj .sk .sl .sm .sn .so .sr .st .su .sv .sy .sz .tc .td .tf .tg .th .tj .tk .tl .tm .tn .to .tp .tr .tt .tv .tw .tz .ua .ug .uk .us .uy .uz .va .vc .ve .vg .vi .vn .vu .wf .ws .ye .yt .za .zm .zw'
'.academy .actor .agency .audio .bar .beer .bike .blue .boutique .cab .camera .camp .capital .cards .careers .cash .catering .center .cheap .city .cleaning .clinic .clothing .club .coffee .community .company .computer .construction .consulting .contractors .cool .credit .dance .dating .democrat .dental .diamonds .digital .direct .directory .discount .domains .education .email .energy .equipment .estate .events .expert .exposed .fail .farm .fish .fitness .florist .fund .futbol .gallery .gift .glass .graphics .guru .help .holdings .holiday .host .hosting .house .institute .international .kitchen .land .life .lighting .limo .link .management .market .marketing .media .menu .moda .partners .parts .photo .photography .photos .pics .pink .press .productions .pub .red .rentals .repair .report .rest .sexy .shoes .social .solar .solutions .space .support .systems .tattoo .tax .technology .tips .today .tools .town .toys .trade .training .university .uno .vacations .vision .vodka .voyage .watch .webcam .wiki .work .works .wtf .zone .aero .asia .biz .cat .com .coop .edu .gov .info .int .jobs .mil .mobi .museum .name .net .org .pro .tel .travel .xxx '.
'.ac .ad .ae .af .ag .ai .al .am .an .ao .aq .ar .as .at .au .aw .ax .az .ba .bb .bd .be .bf .bg .bh .bi .bj .bm .bn .bo .br .bs .bt .bv .bw .by .bz .ca .cc .cd .cf .cg .ch .ci .ck .cl .cm .cn .co .cr .cs .cu .cv .cx .cy .cz .dd .de .dj .dk .dm .do .dz .ec .ee .eg .er .es .et .eu .fi .fj .fk .fm .fo .fr .ga .gb .gd .ge .gf .gg .gh .gi .gl .gm .gn .gp .gq .gr .gs .gt .gu .gw .gy .hk .hm .hn .hr .ht .hu .id .ie .il .im .in .io .iq .ir .is .it .je .jm .jo .jp .ke .kg .kh .ki .km .kn .kp .kr .kw .ky .kz .la .lb .lc .li .lk .lr .ls .lt .lu .lv .ly .ma .mc .md .me .mg .mh .mk .ml .mm .mn .mo .mp .mq .mr .ms .mt .mu .mv .mw .mx .my .mz .na .nc .ne .nf .ng .ni .nl .no .np .nr .nu .nz .om .pa .pe .pf .pg .ph .pk .pl .pm .pn .pr .ps .pt .pw .py .qa .re .ro .rs .ru . .rw .sa .sb .sc .sd .se .sg .sh .si .sj .sk .sl .sm .sn .so .sr .st .su .sv .sy .sz .tc .td .tf .tg .th .tj .tk .tl .tm .tn .to .tp .tr .tt .tv .tw .tz .ua .ug .uk .us .uy .uz .va .vc .ve .vg .vi .vn .vu .wf .ws .ye .yt .za .zm .zw'
));
}

View file

@ -1889,7 +1889,7 @@ class ImapClient extends \MailSo\Net\NetClient
* @throws \MailSo\Net\Exceptions\Exception
*/
private function partialParseResponseBranch(&$oImapResponse, $iStackIndex = -1,
$bTreatAsAtom = false, $sParentToken = '')
$bTreatAsAtom = false, $sParentToken = '', $sOpenBracket = '')
{
$mNull = null;
@ -2020,7 +2020,7 @@ class ImapClient extends \MailSo\Net\NetClient
if ($bTreatAsAtom)
{
$sAtomBlock = $this->partialParseResponseBranch($mNull, $iStackIndex, true,
null === $sPreviousAtomUpperCase ? '' : \strtoupper($sPreviousAtomUpperCase));
null === $sPreviousAtomUpperCase ? '' : \strtoupper($sPreviousAtomUpperCase), $sOpenBracket);
$sAtomBuilder .= $sAtomBlock;
$iPos = $this->iResponseBufParsedPos;
@ -2035,7 +2035,7 @@ class ImapClient extends \MailSo\Net\NetClient
else if ($bIsGotoNotAtomBracket)
{
$aSubItems = $this->partialParseResponseBranch($mNull, $iStackIndex, false,
null === $sPreviousAtomUpperCase ? '' : \strtoupper($sPreviousAtomUpperCase));
null === $sPreviousAtomUpperCase ? '' : \strtoupper($sPreviousAtomUpperCase), $sOpenBracket);
$aList[] = $aSubItems;
$iPos = $this->iResponseBufParsedPos;
@ -2065,27 +2065,36 @@ class ImapClient extends \MailSo\Net\NetClient
$sChar = $this->sResponseBuffer[$iPos];
}
switch ($sChar)
switch (true)
{
case ']':
case ')':
case ']' === $sChar:
$iPos++;
$sPreviousAtomUpperCase = null;
$bIsEndOfList = true;
break;
case ' ':
case ')' === $sChar:
$iPos++;
$sPreviousAtomUpperCase = null;
$bIsEndOfList = true;
break;
case ' ' === $sChar:
if ($bTreatAsAtom)
{
$sAtomBuilder .= ' ';
}
$iPos++;
break;
case '[':
case '[' === $sChar:
$bIsClosingBracketSquare = true;
case '(':
case '(' === $sChar:
if ('(' === $sChar)
{
$bIsClosingBracketSquare = false;
}
if ($bTreatAsAtom)
{
$sAtomBuilder .= ($bIsClosingBracketSquare) ? '[' : '(';
$sAtomBuilder .= $bIsClosingBracketSquare ? '[' : '(';
}
$iPos++;
@ -2093,13 +2102,15 @@ class ImapClient extends \MailSo\Net\NetClient
if ($bTreatAsAtom)
{
$bIsGotoAtomBracket = true;
$sOpenBracket = $bIsClosingBracketSquare ? '[' : '(';
}
else
{
$bIsGotoNotAtomBracket = true;
$sOpenBracket = $bIsClosingBracketSquare ? '[' : '(';
}
break;
case '{':
case '{' === $sChar:
$bIsLiteralParsed = false;
$mLiteralEndPos = \strpos($this->sResponseBuffer, '}', $iPos);
if (false !== $mLiteralEndPos && $mLiteralEndPos > $iPos)
@ -2120,7 +2131,7 @@ class ImapClient extends \MailSo\Net\NetClient
}
$sPreviousAtomUpperCase = null;
break;
case '"':
case '"' === $sChar:
$bIsQuotedParsed = false;
while (true)
{
@ -2206,7 +2217,7 @@ class ImapClient extends \MailSo\Net\NetClient
$sPreviousAtomUpperCase = null;
break;
case 'GOTO_DEFAULT':
case 'GOTO_DEFAULT' === $sChar:
default:
$iCharBlockStartPos = $iPos;
@ -2214,7 +2225,7 @@ class ImapClient extends \MailSo\Net\NetClient
{
$iPos = $iBufferEndIndex;
while ($iPos > $iCharBlockStartPos && $this->sResponseBuffer[$iCharBlockStartPos] == ' ')
while ($iPos > $iCharBlockStartPos && $this->sResponseBuffer[$iCharBlockStartPos] === ' ')
{
$iCharBlockStartPos++;
}
@ -2224,9 +2235,9 @@ class ImapClient extends \MailSo\Net\NetClient
while (!$bIsAtomDone && ($iPos <= $iBufferEndIndex))
{
$sCharDef = $this->sResponseBuffer[$iPos];
switch ($sCharDef)
switch (true)
{
case '[':
case '[' === $sCharDef:
if (null === $sAtomBuilder)
{
$sAtomBuilder = '';
@ -2238,7 +2249,7 @@ class ImapClient extends \MailSo\Net\NetClient
$this->iResponseBufParsedPos = $iPos;
$sListBlock = $this->partialParseResponseBranch($mNull, $iStackIndex, true,
null === $sPreviousAtomUpperCase ? '' : \strtoupper($sPreviousAtomUpperCase));
null === $sPreviousAtomUpperCase ? '' : \strtoupper($sPreviousAtomUpperCase), '[');
if (null !== $sListBlock)
{
@ -2248,9 +2259,9 @@ class ImapClient extends \MailSo\Net\NetClient
$iPos = $this->iResponseBufParsedPos;
$iCharBlockStartPos = $iPos;
break;
case ' ':
case ']':
case ')':
case ' ' === $sCharDef:
case ')' === $sCharDef && '(' === $sOpenBracket:
case ']' === $sCharDef && '[' === $sOpenBracket:
$bIsAtomDone = true;
break;
default:

View file

@ -622,7 +622,7 @@ class Message
$this->sInReplyTo = $oHeaders->ValueByName(\MailSo\Mime\Enumerations\Header::IN_REPLY_TO);
$this->sReferences = \MailSo\Base\Utils::StripSpaces(
$oHeaders->ValueByName(\MailSo\Mime\Enumerations\Header::REFERENCES));
$sHeaderDate = $oHeaders->ValueByName(\MailSo\Mime\Enumerations\Header::DATE);
$this->sHeaderDate = $sHeaderDate;
$this->iHeaderTimeStampInUTC = \MailSo\Base\DateTimeHelper::ParseRFC2822DateString($sHeaderDate);

View file

@ -9411,14 +9411,23 @@ class Actions
{
$oAccount = \call_user_func($fGetAccount);
$iDateTimeStampInUTC = $mResponse->InternalTimeStampInUTC();
if (0 === $iDateTimeStampInUTC || !!$this->Config()->Get('labs', 'date_from_headers', false))
{
$iDateTimeStampInUTC = $mResponse->HeaderTimeStampInUTC();
if (0 === $iDateTimeStampInUTC)
{
$iDateTimeStampInUTC = $mResponse->InternalTimeStampInUTC();
}
}
$mResult = \array_merge($this->objectData($mResponse, $sParent, $aParameters), array(
'Folder' => $mResponse->Folder(),
'Uid' => (string) $mResponse->Uid(),
'Subject' => \trim(\MailSo\Base\Utils::Utf8Clear($mResponse->Subject())),
'MessageId' => $mResponse->MessageId(),
'Size' => $mResponse->Size(),
'DateTimeStampInUTC' => !!$this->Config()->Get('labs', 'date_from_headers', false)
? $mResponse->HeaderTimeStampInUTC() : $mResponse->InternalTimeStampInUTC(),
'DateTimeStampInUTC' => $iDateTimeStampInUTC,
'ReplyTo' => $this->responseObject($mResponse->ReplyTo(), $sParent, $aParameters),
'From' => $this->responseObject($mResponse->From(), $sParent, $aParameters),
'To' => $this->responseObject($mResponse->To(), $sParent, $aParameters),

View file

@ -98,6 +98,14 @@ class Property
return PropertyType::WEB_PAGE === $this->Type;
}
/**
* @return bool
*/
public function IsValueForLower()
{
return $this->IsEmail() || $this->IsName() || $this->IsWeb();
}
/**
* @return bool
*/
@ -142,7 +150,7 @@ class Property
}
// lower value for searching
if (\MailSo\Base\Utils::FunctionExistsAndEnabled('mb_strtolower'))
if ($this->IsValueForLower() && \MailSo\Base\Utils::FunctionExistsAndEnabled('mb_strtolower'))
{
$this->ValueLower = (string) @\mb_strtolower($this->Value, 'UTF-8');
}
@ -153,6 +161,7 @@ class Property
$sPhone = \trim($this->Value);
$sPhone = \preg_replace('/^[+]+/', '', $sPhone);
$sPhone = \preg_replace('/[^\d]/', '', $sPhone);
$this->ValueCustom = \trim($sPhone);
}
}

View file

@ -1895,6 +1895,11 @@ SQLITEINITIAL;
1 => $this->getInitialTablesArray($this->sDsnType),
2 => array(
'ALTER TABLE rainloop_ab_properties ADD prop_value_lower varchar(255) NOT NULL DEFAULT \'\' AFTER prop_value_custom;'
),
3 => array(
'ALTER TABLE rainloop_ab_properties CHANGE prop_value prop_value TEXT NOT NULL;',
'ALTER TABLE rainloop_ab_properties CHANGE prop_value_custom prop_value_custom TEXT NOT NULL;',
'ALTER TABLE rainloop_ab_properties CHANGE prop_value_lower prop_value_lower TEXT NOT NULL;'
)
));
break;
@ -1903,7 +1908,8 @@ SQLITEINITIAL;
1 => $this->getInitialTablesArray($this->sDsnType),
2 => array(
'ALTER TABLE rainloop_ab_properties ADD prop_value_lower text NOT NULL DEFAULT \'\';'
)
),
3 => array()
));
break;
case 'sqlite':
@ -1911,7 +1917,8 @@ SQLITEINITIAL;
1 => $this->getInitialTablesArray($this->sDsnType),
2 => array(
'ALTER TABLE rainloop_ab_properties ADD prop_value_lower text NOT NULL DEFAULT \'\';'
)
),
3 => array()
));
break;
}

View file

@ -149,6 +149,12 @@
<input type="text" size="70" autocomplete="off" data-bind="textInput: subject" />
</div>
</div>
<div class="e-row">
<div class="e-cell e-label">
</div>
<div class="e-cell e-value" data-bind="text: to">
</div>
</div>
<div class="e-row">
<div class="e-cell e-label"></div>
<div class="e-cell e-value">
@ -174,15 +180,18 @@
<div class="btn-group pull-right">
<a class="btn first" data-tooltip-join="bottom"
style="padding-left: 10px; padding-right: 10px;"
data-bind="visible: addAttachmentEnabled(), initDom: composeUploaderButton, tooltip: 'COMPOSE/ATTACH_FILES'">
data-bind="visible: addAttachmentEnabled(), initDom: composeUploaderButton, tooltip: 'COMPOSE/ATTACH_FILES',
css: {'last': !(driveEnabled() && driveVisible()) && !(dropboxEnabled())}">
<sup style="font-weight: bold; font-size: 100%; top: -0.3em;">+</sup><i class="icon-attachment"></i>
</a>
<a class="btn" data-tooltip-join="bottom"
data-bind="visible: dropboxEnabled, command: dropboxCommand, tooltip: 'COMPOSE/DROPBOX', css: {'first': !addAttachmentEnabled(), 'last': !driveEnabled()}">
data-bind="visible: dropboxEnabled, command: dropboxCommand, tooltip: 'COMPOSE/DROPBOX',
css: {'first': !addAttachmentEnabled(), 'last': !(driveEnabled() && driveVisible())}">
<i class="icon-dropbox"></i>
</a>
<a class="btn last" data-tooltip-join="bottom"
data-bind="visible: driveEnabled() && driveVisible(), command: driveCommand, tooltip: 'COMPOSE/GOOGLE_DRIVE'">
data-bind="visible: driveEnabled() && driveVisible(), command: driveCommand, tooltip: 'COMPOSE/GOOGLE_DRIVE',
css: {'first': !addAttachmentEnabled() && !(driveEnabled() && driveVisible())}">
<i class="icon-google-drive"></i>
</a>
</div>

View file

@ -36,7 +36,7 @@
<div class="control-group">
<label class="i18n control-label" data-i18n="POPUPS_GENERATE_OPEN_PGP_KEYS/LABEL_KEY_BIT_LENGTH"></label>
<div class="controls">
<select data-bind="value: keyBitLength, options: [1024, 2048]"></select>
<select data-bind="value: keyBitLength, options: [2048, 4096]"></select>
</div>
</div>
</div>

View file

@ -15,34 +15,37 @@
<br />
<br />
<br />
<table class="table table-hover list-table accounts-list" data-bind="i18nUpdate: accounts">
<colgroup>
<col />
<col style="width: 150px" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="sortable: {data: accounts, options: scrollableOptions(), afterMove: accountsAndIdentitiesAfterMove}">
<tr class="account-item">
<td class="e-action" data-bind="css: {'e-action': canBeEdit}">
<span class="account-img icon-user"></span>
<i class="icon-braille drag-handle"></i>
&nbsp;&nbsp;
<span class="account-name" data-bind="text: email"></span>
</td>
<td>
<span data-bind="visible: !canBeDeleted()"></span>
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete button-delete-transitions" data-bind="visible: canBeDeleted, css: {'delete-access': deleteAccess}, click: function(oAccount) { $root.deleteAccount(oAccount); }">
<span class="i18n" data-i18n="SETTINGS_ACCOUNTS/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-account" data-bind="visible: !deleteAccess() && canBeDeleted(), click: function (oAccount) { $root.accountForDeletion(oAccount); }">
<i class="icon-trash"></i>
</span>
</td>
</tr>
</tbody>
</table>
<div class="accounts-list-wrp">
<div class="accounts-list-top-padding"></div>
<table class="table table-hover list-table accounts-list" data-bind="i18nUpdate: accounts">
<colgroup>
<col />
<col style="width: 150px" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="sortable: {data: accounts, options: scrollableOptions('.accounts-list-wrp'), afterMove: accountsAndIdentitiesAfterMove}">
<tr class="account-item">
<td class="e-action" data-bind="css: {'e-action': canBeEdit}">
<span class="account-img icon-user"></span>
<i class="icon-braille drag-handle"></i>
&nbsp;&nbsp;
<span class="account-name" data-bind="text: email"></span>
</td>
<td>
<span data-bind="visible: !canBeDeleted()"></span>
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete button-delete-transitions" data-bind="visible: canBeDeleted, css: {'delete-access': deleteAccess}, click: function(oAccount) { $root.deleteAccount(oAccount); }">
<span class="i18n" data-i18n="SETTINGS_ACCOUNTS/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-account" data-bind="visible: !deleteAccess() && canBeDeleted(), click: function (oAccount) { $root.accountForDeletion(oAccount); }">
<i class="icon-trash"></i>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div data-bind="visible: allowIdentities">
<br />
@ -59,37 +62,40 @@
<br />
<br />
<br />
<table class="table table-hover list-table identities-list" data-bind="i18nUpdate: identities">
<colgroup>
<col />
<col style="width: 150px" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="sortable: {data: identities, options: scrollableOptions(), afterMove: accountsAndIdentitiesAfterMove}">
<tr class="identity-item">
<td class="e-action">
<span class="identity-img icon-user"></span>
<i class="icon-braille drag-handle"></i>
&nbsp;&nbsp;
<span class="identity-name" data-bind="text: formattedName()"></span>
&nbsp;&nbsp;
<span class="identity-default" data-bind="visible: 0 === $index()">
(<span class="i18n" data-i18n="SETTINGS_ACCOUNTS/DEFAULT_IDENTITY_LABEL"></span>)
</span>
</td>
<td>
<span data-bind="visible: !canBeDeleted()"></span>
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete button-delete-transitions" data-bind="visible: canBeDeleted, css: {'delete-access': deleteAccess}, click: function(oIdentity) { $root.deleteIdentity(oIdentity); }">
<span class="i18n" data-i18n="SETTINGS_ACCOUNTS/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-identity" data-bind="visible: !deleteAccess() && canBeDeleted(), click: function (oIdentity) { $root.identityForDeletion(oIdentity); }">
<i class="icon-trash"></i>
</span>
</td>
</tr>
</tbody>
</table>
<div class="identities-list-wrp">
<div class="identities-list-top-padding"></div>
<table class="table table-hover list-table identities-list" data-bind="i18nUpdate: identities">
<colgroup>
<col />
<col style="width: 150px" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="sortable: {data: identities, options: scrollableOptions('.identities-list-wrp'), afterMove: accountsAndIdentitiesAfterMove}">
<tr class="identity-item">
<td class="e-action">
<span class="identity-img icon-user"></span>
<i class="icon-braille drag-handle"></i>
&nbsp;&nbsp;
<span class="identity-name" data-bind="text: formattedName()"></span>
&nbsp;&nbsp;
<span class="identity-default" data-bind="visible: 0 === $index()">
(<span class="i18n" data-i18n="SETTINGS_ACCOUNTS/DEFAULT_IDENTITY_LABEL"></span>)
</span>
</td>
<td>
<span data-bind="visible: !canBeDeleted()"></span>
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete button-delete-transitions" data-bind="visible: canBeDeleted, css: {'delete-access': deleteAccess}, click: function(oIdentity) { $root.deleteIdentity(oIdentity); }">
<span class="i18n" data-i18n="SETTINGS_ACCOUNTS/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-identity" data-bind="visible: !deleteAccess() && canBeDeleted(), click: function (oIdentity) { $root.identityForDeletion(oIdentity); }">
<i class="icon-trash"></i>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View file

@ -60,43 +60,47 @@
data-bind="value: filterRaw, valueUpdate: 'afterkeydown'"></textarea>
</div>
</div>
<table class="table table-hover list-table g-ui-user-select-none"
data-bind="visible: inited() && (!filterRaw.active() || !filterRaw.active()), i18nUpdate: filters">
<colgroup>
<col style="width: 30px" />
<col style="width: 16px" />
<col />
<col style="width: 140px" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="sortable: {data: filters, options: scrollableOptions()}" style="width: 600px">
<tr class="filter-item">
<td>
<span class="disabled-filter" data-bind="click: function () { $root.haveChanges(true); enabled(!enabled()); }">
<i data-bind="css: {'icon-checkbox-checked': enabled, 'icon-checkbox-unchecked': !enabled()}"></i>
</span>
</td>
<td class="drag-wrapper">
<i class="icon-braille drag-handle"></i>
</td>
<td class="e-action">
<span class="filter-name" data-bind="text: name()"></span>
&nbsp;&nbsp;
<span class="filter-sub-name" data-bind="text: nameSub()"></span>
</td>
<td>
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess()}, click: function(oFilter) { $root.deleteFilter(oFilter); }">
<span class="i18n" data-i18n="SETTINGS_FILTERS/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-filter" data-bind="visible: !deleteAccess() && canBeDeleted(), click: function (oFilter) { $root.filterForDeletion(oFilter); }">
<i class="icon-trash"></i>
</span>
</td>
</tr>
</tbody>
</table>
<div class="filters-list-wrp">
<div class="filters-list-top-padding"></div>
<table class="table table-hover list-table filters-list g-ui-user-select-none"
data-bind="visible: inited() && (!filterRaw.active() || !filterRaw.active()), i18nUpdate: filters">
<colgroup>
<col style="width: 30px" />
<col style="width: 16px" />
<col />
<col style="width: 140px" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="sortable: {data: filters, options: scrollableOptions('.filters-list-wrp')}" style="width: 600px">
<tr class="filter-item">
<td>
<span class="disabled-filter" data-bind="click: function () { $root.haveChanges(true); enabled(!enabled()); }">
<i data-bind="css: {'icon-checkbox-checked': enabled, 'icon-checkbox-unchecked': !enabled()}"></i>
</span>
</td>
<td class="drag-wrapper">
<i class="icon-braille drag-handle"></i>
</td>
<td class="e-action">
<span class="filter-name" data-bind="text: name()"></span>
&nbsp;&nbsp;
<span class="filter-sub-name" data-bind="text: nameSub()"></span>
</td>
<td>
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess()}, click: function(oFilter) { $root.deleteFilter(oFilter); }">
<span class="i18n" data-i18n="SETTINGS_FILTERS/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-filter" data-bind="visible: !deleteAccess() && canBeDeleted(), click: function (oFilter) { $root.filterForDeletion(oFilter); }">
<i class="icon-trash"></i>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>

View file

@ -4,17 +4,19 @@
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/LEGEND_OPEN_PGP"></span>
</div>
</div>
<a class="btn" data-bind="click: addOpenPgpKey">
<button class="btn" data-bind="click: addOpenPgpKey">
<i class="icon-list-add"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/BUTTON_ADD_OPEN_PGP_KEY"></span>
</a>
<!-- &nbsp;&nbsp;
<a class="btn" data-bind="click: generateOpenPgpKey">
<i class="icon-key"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/BUTTON_GENERATE_OPEN_PGP_KEYS"></span>
</a>-->
</button>
&nbsp;&nbsp;
<div style="display: inline-block" data-tooltip-join="left" data-bind="tooltip: isHttps ? '' : 'SETTINGS_OPEN_PGP/GENERATE_ONLY_HTTPS'">
<button class="btn" data-bind="click: generateOpenPgpKey, disable: !isHttps">
<i class="icon-key"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/BUTTON_GENERATE_OPEN_PGP_KEYS"></span>
</button>
</div>
<br />
<br />
<br />

View file

@ -14,31 +14,35 @@
<br />
<br />
<br />
<table class="table table-hover list-table templates-list" data-bind="i18nUpdate: templates">
<colgroup>
<col />
<col style="width: 150px" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="sortable: {data: templates, options: scrollableOptions()}">
<tr class="template-item">
<td class="e-action">
<span class="template-img icon-user"></span>
<i class="icon-braille drag-handle"></i>
&nbsp;&nbsp;
<span class="template-name" data-bind="text: name"></span>
</td>
<td>
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess}, click: function(oTemplate) { $root.deleteTemplate(oTemplate); }">
<span class="i18n" data-i18n="SETTINGS_TEMPLATES/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-template" data-bind="visible: !deleteAccess(), click: function (oTemplate) { $root.templateForDeletion(oTemplate); }">
<i class="icon-trash"></i>
</span>
</td>
</tr>
</tbody>
</table>
<div class="templates-list-wrp">
<div class="templates-list-top-padding"></div>
<table class="table table-hover list-table templates-list" data-bind="i18nUpdate: templates">
<colgroup>
<col />
<col style="width: 150px" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="sortable: {data: templates, options: scrollableOptions('.templates-list-wrp')}">
<tr class="template-item">
<td class="e-action">
<span class="template-img icon-user"></span>
<i class="icon-braille drag-handle"></i>
&nbsp;&nbsp;
<span class="template-name" data-bind="text: name"></span>
</td>
<td>
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess}, click: function(oTemplate) { $root.deleteTemplate(oTemplate); }">
<span class="i18n" data-i18n="SETTINGS_TEMPLATES/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-template" data-bind="visible: !deleteAccess(), click: function (oTemplate) { $root.templateForDeletion(oTemplate); }">
<i class="icon-trash"></i>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View file

@ -70,7 +70,7 @@ Options -Indexes
define('APP_DATA_FOLDER_PATH_UNIX', str_replace('\\', '/', APP_DATA_FOLDER_PATH));
$sSalt = @file_get_contents(APP_DATA_FOLDER_PATH.'SALT.php');
$sData = @file_get_contents(APP_DATA_FOLDER_PATH.'DATA.php');
$sData = file_exists(APP_DATA_FOLDER_PATH.'DATA.php') ? @file_get_contents(APP_DATA_FOLDER_PATH.'DATA.php') : '';
$sInstalled = @file_get_contents(APP_DATA_FOLDER_PATH.'INSTALLED');
// installation checking data folder
@ -129,29 +129,20 @@ Options -Indexes
unset($sCheckName, $sCheckFilePath, $sCheckFolder, $sTest);
}
if (false === $sSalt || false === $sData)
if (false === $sSalt)
{
if (false === $sSalt)
{
// random salt
$sSalt = '<'.'?php //'
.md5(microtime(true).rand(1000, 5000))
.md5(microtime(true).rand(5000, 9999))
.md5(microtime(true).rand(1000, 5000));
// random salt
$sSalt = '<'.'?php //'
.md5(microtime(true).rand(1000, 5000))
.md5(microtime(true).rand(5000, 9999))
.md5(microtime(true).rand(1000, 5000));
@file_put_contents(APP_DATA_FOLDER_PATH.'SALT.php', $sSalt);
}
if (false === $sData)
{
// random data folder name
$sData = '<'.'?php //'.md5(microtime(true).rand(1000, 9999));
@file_put_contents(APP_DATA_FOLDER_PATH.'DATA.php', $sData);
}
@file_put_contents(APP_DATA_FOLDER_PATH.'SALT.php', $sSalt);
}
define('APP_SALT', md5($sSalt.APP_PRIVATE_DATA_NAME.$sSalt));
define('APP_PRIVATE_DATA', APP_DATA_FOLDER_PATH.'_data_'.md5($sData).'/'.APP_PRIVATE_DATA_NAME.'/');
define('APP_PRIVATE_DATA', APP_DATA_FOLDER_PATH.'_data_'.($sData ? md5($sData) : '').'/'.APP_PRIVATE_DATA_NAME.'/');
define('APP_PLUGINS_PATH', APP_PRIVATE_DATA.'plugins/');
if (APP_VERSION !== $sInstalled || (APP_MULTIPLY && !@is_dir(APP_PRIVATE_DATA)))

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Sign"
BUTTON_ENCRYPT = "Encrypt"
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "Двустъпков тест за удостоверяване"
LABEL_CODE = "Код"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP Keys"
TITLE_PRIVATE = "Private"
TITLE_PUBLIC = "Public"
DELETING_ASK = "Are you sure?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"

View file

@ -319,6 +319,12 @@ BUTTON_SIGN = "Podepsat"
BUTTON_ENCRYPT = "Šifrovat"
BUTTON_SIGN_AND_ENCRYPT = "Podepsat a šifrovat"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "Dvoufázové ověření"
LABEL_CODE = "Kód"
@ -600,6 +606,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generovat OpenPGP Klíče"
TITLE_PRIVATE = "Soukromý"
TITLE_PUBLIC = "Veřejný"
DELETING_ASK = "Opravdu to chcete?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Klávesové zkratky"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Unterschreiben"
BUTTON_ENCRYPT = "Verschlüsseln"
BUTTON_SIGN_AND_ENCRYPT = "Unterschreiben und verschlüsseln"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "Zwei-Faktor-Authentifizierung"
LABEL_CODE = "Code"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "OpenPGP-Schlüssel generieren"
TITLE_PRIVATE = "Privat"
TITLE_PUBLIC = "Öffentlich"
DELETING_ASK = "Sind Sie sicher?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Tastaturkürzel-Hilfe"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Sign"
BUTTON_ENCRYPT = "Encrypt"
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-Step verification test"
LABEL_CODE = "Code"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP Keys"
TITLE_PRIVATE = "Private"
TITLE_PUBLIC = "Public"
DELETING_ASK = "Are you sure?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"

View file

@ -607,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP Keys"
TITLE_PRIVATE = "Private"
TITLE_PUBLIC = "Public"
DELETING_ASK = "Are you sure?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Firmar"
BUTTON_ENCRYPT = "Encriptar"
BUTTON_SIGN_AND_ENCRYPT = "Firmar and encriptar"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "Prueba de verificación de 2 pasos"
LABEL_CODE = "Código"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generar llaves OpenPGP"
TITLE_PRIVATE = "Privado"
TITLE_PUBLIC = "Público"
DELETING_ASK = "¿Está usted seguro?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Ayuda de atajos de teclado"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Signer"
BUTTON_ENCRYPT = "Chiffrer"
BUTTON_SIGN_AND_ENCRYPT = "Signer et chiffrer"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "Test d'authentification en deux étapes"
LABEL_CODE = "Code"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Générer les clefs OpenPGP"
TITLE_PRIVATE = "Privé"
TITLE_PUBLIC = "Public"
DELETING_ASK = "Êtes-vous sûr ?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Aide pour les raccourcis clavier"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Aláírás"
BUTTON_ENCRYPT = "Titkosítás"
BUTTON_SIGN_AND_ENCRYPT = "Aláírás és titkosítás"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-lépés hitelesítés teszt"
LABEL_CODE = "Kód"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "OpenPGP kulcs generálás"
TITLE_PRIVATE = "Private"
TITLE_PUBLIC = "Public"
DELETING_ASK = "Are you sure?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Sign"
BUTTON_ENCRYPT = "Encrypt"
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-Step verification test"
LABEL_CODE = "Code"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP Keys"
TITLE_PRIVATE = "Private"
TITLE_PUBLIC = "Public"
DELETING_ASK = "Are you sure?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Firma"
BUTTON_ENCRYPT = "Cifra"
BUTTON_SIGN_AND_ENCRYPT = "Firma e cifra"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "Verifica a 2 fattori"
LABEL_CODE = "Codice"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Genera chiave OpenPGP"
TITLE_PRIVATE = "Privata"
TITLE_PUBLIC = "Pubblica"
DELETING_ASK = "Sei sicuro?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Aiuto sulle scorciatoie da tastiera"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Sign"
BUTTON_ENCRYPT = "Encrypt"
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-Step verification test"
LABEL_CODE = "Code"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP Keys"
TITLE_PRIVATE = "Private"
TITLE_PUBLIC = "Public"
DELETING_ASK = "Are you sure?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Sign"
BUTTON_ENCRYPT = "Encrypt"
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-Step verification test"
LABEL_CODE = "Code"
@ -598,6 +604,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP Keys"
TITLE_PRIVATE = "Private"
TITLE_PUBLIC = "Public"
DELETING_ASK = "Are you sure?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Pasirašyti"
BUTTON_ENCRYPT = "Šifruoti"
BUTTON_SIGN_AND_ENCRYPT = "Pasirašyti ir šifruoti"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-jų žingsnių patikrinimo bandymas"
LABEL_CODE = "Kodas"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Sukurti OpenPGP raktus"
TITLE_PRIVATE = "Privatus"
TITLE_PUBLIC = "Viešas"
DELETING_ASK = "Jūs įsitikinę?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Sparčiųjų klavišų pagalba"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Sign"
BUTTON_ENCRYPT = "Encrypt"
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-Step verification test"
LABEL_CODE = "Code"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP Keys"
TITLE_PRIVATE = "Private"
TITLE_PUBLIC = "Public"
DELETING_ASK = "Are you sure?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Ondertekenen"
BUTTON_ENCRYPT = "Versleutelen"
BUTTON_SIGN_AND_ENCRYPT = "Ondertekenen en versleutelen"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-Stap verificatie test"
LABEL_CODE = "Code"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Genereer OpenPGP sleutels"
TITLE_PRIVATE = "Privé sleutel"
TITLE_PUBLIC = "Publieke sleutel"
DELETING_ASK = "Weet u het zeker?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Hulp bij toetsenbord sneltoetsen"

View file

@ -319,6 +319,12 @@ BUTTON_SIGN = "Signer"
BUTTON_ENCRYPT = "Krypter"
BUTTON_SIGN_AND_ENCRYPT = "Signer og krypter"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-stegs verifiseringstest"
LABEL_CODE = "Kode"
@ -600,6 +606,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generer OpenPGP-nøkler"
TITLE_PRIVATE = "Privat"
TITLE_PUBLIC = "Offentlig"
DELETING_ASK = "Er du sikker?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Tastatursnarveier"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Podpisz"
BUTTON_ENCRYPT = "Szyfruj"
BUTTON_SIGN_AND_ENCRYPT = "Podpisz i szyfruj"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "Test autoryzacji dwuskładnikowej"
LABEL_CODE = "Kod"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generuj klucz OpenPGP"
TITLE_PRIVATE = "Prywatny"
TITLE_PUBLIC = "Publiczny"
DELETING_ASK = "Czy na pewno chcesz usunąć?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Skróty klawiaturowe"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Assinar"
BUTTON_ENCRYPT = "Criptografar"
BUTTON_SIGN_AND_ENCRYPT = "Assinar e criptografar"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "Testar verificação de duas etapas"
LABEL_CODE = "Código"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Gerar chave OpenPGP"
TITLE_PRIVATE = "Privado"
TITLE_PUBLIC = "Público"
DELETING_ASK = "Você tem certeza?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Ajuda com os atalhos de teclado"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Assinar"
BUTTON_ENCRYPT = "Encriptar"
BUTTON_SIGN_AND_ENCRYPT = "Assinar e encriptar"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "Teste de verificação em 2-Etapas"
LABEL_CODE = "Código"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Gerar chaves OpenPGP"
TITLE_PRIVATE = "Privada"
TITLE_PUBLIC = "Pública"
DELETING_ASK = "Tem a certeza?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Ajuda para atalhos de teclado"

View file

@ -319,6 +319,12 @@ BUTTON_SIGN = "Sign"
BUTTON_ENCRYPT = "Encrypt"
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-Step verification test"
LABEL_CODE = "Code"
@ -600,6 +606,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP Keys"
TITLE_PRIVATE = "Private"
TITLE_PUBLIC = "Public"
DELETING_ASK = "Are you sure?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Подпись"
BUTTON_ENCRYPT = "Шифрование"
BUTTON_SIGN_AND_ENCRYPT = "Подпись и шифрование"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "Тест двухфакторной верификации"
LABEL_CODE = "Код"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Новый OpenPGP ключ"
TITLE_PRIVATE = "Приватный"
TITLE_PUBLIC = "Публичный"
DELETING_ASK = "Точно?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Сочетания клавиш"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Sign"
BUTTON_ENCRYPT = "Encrypt"
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-Step verification test"
LABEL_CODE = "Code"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP Keys"
TITLE_PRIVATE = "Private"
TITLE_PUBLIC = "Public"
DELETING_ASK = "Are you sure?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Singera"
BUTTON_ENCRYPT = "Kryptera"
BUTTON_SIGN_AND_ENCRYPT = "Signera och kryptera"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-Stegs verifikations test"
LABEL_CODE = "Kod"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Skapa OpenPGP nycklar"
TITLE_PRIVATE = "Privat"
TITLE_PUBLIC = "Publik"
DELETING_ASK = "Är du säker?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Tangentbordsgenvägar hjälp"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Giriş Yap"
BUTTON_ENCRYPT = "Şifrele"
BUTTON_SIGN_AND_ENCRYPT = "Giriş Yap and şifrele"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-Basamaklı doğrulama testi"
LABEL_CODE = "Kod"
@ -599,6 +605,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "OpenPGP Key Oluştur"
TITLE_PRIVATE = "Private"
TITLE_PUBLIC = "Public"
DELETING_ASK = "Eminmisiniz?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Klavye kısayolları yardım"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Підпис"
BUTTON_ENCRYPT = "Шифрування"
BUTTON_SIGN_AND_ENCRYPT = "Підпис и шифрування"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "Тест двофакторної верифікації"
LABEL_CODE = "Код"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "Новий OpenPGP ключ"
TITLE_PRIVATE = "Приватний"
TITLE_PUBLIC = "Публічний"
DELETING_ASK = "Впевнені?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Сполучення клавіш"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Sign"
BUTTON_ENCRYPT = "Encrypt"
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "两步验证测试"
LABEL_CODE = "代码"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "生成 OpenPGP 密匙"
TITLE_PRIVATE = "私有"
TITLE_PUBLIC = "公开"
DELETING_ASK = "你确定吗?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"

View file

@ -320,6 +320,12 @@ BUTTON_SIGN = "Sign"
BUTTON_ENCRYPT = "Encrypt"
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
[POPUPS_MESSAGE_OPEN_PGP]
TITLE_MESSAGE_OPEN_PGP = "OpenPGP Decrypt"
LABEL_KEY = "Private Key"
LABEL_PASSWORD = "Password"
BUTTON_DECRYPT = "Decrypt"
[POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "兩步驗證測試"
LABEL_CODE = "代碼"
@ -601,6 +607,7 @@ BUTTON_GENERATE_OPEN_PGP_KEYS = "生成 OpenPGP 密鑰"
TITLE_PRIVATE = "私有"
TITLE_PUBLIC = "公開"
DELETING_ASK = "你確定嗎?"
GENERATE_ONLY_HTTPS = "HTTPS only"
[SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"

View file

@ -0,0 +1 @@
/*! OpenPGPjs.org this is LGPL licensed code, see LICENSE/our website for more information.- v0.10.1 - 2015-02-13 */!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(){function a(a){window.openpgp.crypto.random.randomBuffer.size<d&&postMessage({event:"request-seed"}),postMessage(a)}function b(a){var b=window.openpgp.packet.List.fromStructuredClone(a);return new window.openpgp.key.Key(b)}function c(a){var b=window.openpgp.packet.List.fromStructuredClone(a);return new window.openpgp.message.Message(b)}window={},Function.prototype.bind||(Function.prototype.bind=function(a){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var b=Array.prototype.slice.call(arguments,1),c=this,d=function(){},e=function(){return c.apply(this instanceof d&&a?this:a,b.concat(Array.prototype.slice.call(arguments)))};return d.prototype=this.prototype,e.prototype=new d,e}),importScripts("openpgp.min.js");var d=4e4,e=6e4;window.openpgp.crypto.random.randomBuffer.init(e),self.onmessage=function(d){var e=null,f=null,g=d.data,h=!1;switch(g.event){case"configure":for(var i in g.config)window.openpgp.config[i]=g.config[i];break;case"seed-random":g.buf instanceof Uint8Array||(g.buf=new Uint8Array(g.buf)),window.openpgp.crypto.random.randomBuffer.set(g.buf);break;case"encrypt-message":g.keys.length||(g.keys=[g.keys]),g.keys=g.keys.map(b),window.openpgp.encryptMessage(g.keys,g.text).then(function(b){a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"sign-and-encrypt-message":g.publicKeys.length||(g.publicKeys=[g.publicKeys]),g.publicKeys=g.publicKeys.map(b),g.privateKey=b(g.privateKey),window.openpgp.signAndEncryptMessage(g.publicKeys,g.privateKey,g.text).then(function(b){a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"decrypt-message":g.privateKey=b(g.privateKey),g.message=c(g.message.packets),window.openpgp.decryptMessage(g.privateKey,g.message).then(function(b){a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"decrypt-and-verify-message":g.privateKey=b(g.privateKey),g.publicKeys.length||(g.publicKeys=[g.publicKeys]),g.publicKeys=g.publicKeys.map(b),g.message=c(g.message.packets),window.openpgp.decryptAndVerifyMessage(g.privateKey,g.publicKeys,g.message).then(function(b){a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"sign-clear-message":g.privateKeys=g.privateKeys.map(b),window.openpgp.signClearMessage(g.privateKeys,g.text).then(function(b){a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"verify-clear-signed-message":g.publicKeys.length||(g.publicKeys=[g.publicKeys]),g.publicKeys=g.publicKeys.map(b);var j=window.openpgp.packet.List.fromStructuredClone(g.message.packets);g.message=new window.openpgp.cleartext.CleartextMessage(g.message.text,j),window.openpgp.verifyClearSignedMessage(g.publicKeys,g.message).then(function(b){a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"generate-key-pair":window.openpgp.generateKeyPair(g.options).then(function(b){b.key=b.key.toPacketlist(),a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"decrypt-key":try{g.privateKey=b(g.privateKey),h=g.privateKey.decrypt(g.password),h?e=g.privateKey.toPacketlist():f="Wrong password"}catch(k){f=k.message}a({event:"method-return",data:e,err:f});break;case"decrypt-key-packet":try{g.privateKey=b(g.privateKey),g.keyIds=g.keyIds.map(window.openpgp.Keyid.fromClone),h=g.privateKey.decryptKeyPacket(g.keyIds,g.password),h?e=g.privateKey.toPacketlist():f="Wrong password"}catch(k){f=k.message}a({event:"method-return",data:e,err:f});break;default:throw new Error("Unknown Worker Event.")}}},{}]},{},[1]);