mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-25 10:09:20 +03:00
Fix infinite loop with sign me
Added data-cfasync="false" for CloudFlare Rocketscript
This commit is contained in:
parent
be77754286
commit
b6a06d74a9
12 changed files with 787 additions and 751 deletions
|
|
@ -2,7 +2,7 @@
|
||||||
"name": "RainLoop",
|
"name": "RainLoop",
|
||||||
"title": "RainLoop Webmail",
|
"title": "RainLoop Webmail",
|
||||||
"version": "1.6.6",
|
"version": "1.6.6",
|
||||||
"release": "929",
|
"release": "930",
|
||||||
"description": "Simple, modern & fast web-based email client",
|
"description": "Simple, modern & fast web-based email client",
|
||||||
"homepage": "http://rainloop.net",
|
"homepage": "http://rainloop.net",
|
||||||
"main": "Gruntfile.js",
|
"main": "Gruntfile.js",
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,7 @@ function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false)
|
||||||
if ($pubkey == null || $pubkey == '') {
|
if ($pubkey == null || $pubkey == '') {
|
||||||
die ("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>");
|
die ("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($use_ssl) {
|
if ($use_ssl) {
|
||||||
$server = RECAPTCHA_API_SECURE_SERVER;
|
$server = RECAPTCHA_API_SECURE_SERVER;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -119,7 +119,7 @@ function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false)
|
||||||
if ($error) {
|
if ($error) {
|
||||||
$errorpart = "&error=" . $error;
|
$errorpart = "&error=" . $error;
|
||||||
}
|
}
|
||||||
return '<script type="text/javascript" src="'. $server . '/challenge?k=' . $pubkey . $errorpart . '"></script>
|
return '<script type="text/javascript" data-cfasync="false" src="'. $server . '/challenge?k=' . $pubkey . $errorpart . '"></script>
|
||||||
|
|
||||||
<noscript>
|
<noscript>
|
||||||
<iframe src="'. $server . '/noscript?k=' . $pubkey . $errorpart . '" height="300" width="500" frameborder="0"></iframe><br/>
|
<iframe src="'. $server . '/noscript?k=' . $pubkey . $errorpart . '" height="300" width="500" frameborder="0"></iframe><br/>
|
||||||
|
|
@ -219,7 +219,7 @@ function _recaptcha_aes_encrypt($val,$ky) {
|
||||||
if (! function_exists ("mcrypt_encrypt")) {
|
if (! function_exists ("mcrypt_encrypt")) {
|
||||||
die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed.");
|
die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed.");
|
||||||
}
|
}
|
||||||
$mode=MCRYPT_MODE_CBC;
|
$mode=MCRYPT_MODE_CBC;
|
||||||
$enc=MCRYPT_RIJNDAEL_128;
|
$enc=MCRYPT_RIJNDAEL_128;
|
||||||
$val=_recaptcha_aes_pad($val);
|
$val=_recaptcha_aes_pad($val);
|
||||||
return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
|
return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
|
||||||
|
|
@ -236,11 +236,11 @@ function recaptcha_mailhide_url($pubkey, $privkey, $email) {
|
||||||
die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " .
|
die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " .
|
||||||
"you can do so at <a href='http://www.google.com/recaptcha/mailhide/apikey'>http://www.google.com/recaptcha/mailhide/apikey</a>");
|
"you can do so at <a href='http://www.google.com/recaptcha/mailhide/apikey'>http://www.google.com/recaptcha/mailhide/apikey</a>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$ky = pack('H*', $privkey);
|
$ky = pack('H*', $privkey);
|
||||||
$cryptmail = _recaptcha_aes_encrypt ($email, $ky);
|
$cryptmail = _recaptcha_aes_encrypt ($email, $ky);
|
||||||
|
|
||||||
return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail);
|
return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -271,7 +271,7 @@ function _recaptcha_mailhide_email_parts ($email) {
|
||||||
function recaptcha_mailhide_html($pubkey, $privkey, $email) {
|
function recaptcha_mailhide_html($pubkey, $privkey, $email) {
|
||||||
$emailparts = _recaptcha_mailhide_email_parts ($email);
|
$emailparts = _recaptcha_mailhide_email_parts ($email);
|
||||||
$url = recaptcha_mailhide_url ($pubkey, $privkey, $email);
|
$url = recaptcha_mailhide_url ($pubkey, $privkey, $email);
|
||||||
|
|
||||||
return htmlentities($emailparts[0]) . "<a href='" . htmlentities ($url) .
|
return htmlentities($emailparts[0]) . "<a href='" . htmlentities ($url) .
|
||||||
"' onclick=\"window.open('" . htmlentities ($url) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities ($emailparts [1]);
|
"' onclick=\"window.open('" . htmlentities ($url) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities ($emailparts [1]);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1360,6 +1360,35 @@ class Actions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \RainLoop\Account $oAccount
|
||||||
|
*
|
||||||
|
* @throws \RainLoop\Exceptions\ClientException
|
||||||
|
*/
|
||||||
|
public function CheckMailConnection($oAccount)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$this->MailClient()
|
||||||
|
->Connect($oAccount->Domain()->IncHost(\MailSo\Base\Utils::GetDomainFromEmail($oAccount->Email())),
|
||||||
|
$oAccount->Domain()->IncPort(), $oAccount->Domain()->IncSecure())
|
||||||
|
->Login($oAccount->IncLogin(), $oAccount->Password())
|
||||||
|
;
|
||||||
|
}
|
||||||
|
catch (\RainLoop\Exceptions\ClientException $oException)
|
||||||
|
{
|
||||||
|
throw $oException;
|
||||||
|
}
|
||||||
|
catch (\MailSo\Net\Exceptions\ConnectionException $oException)
|
||||||
|
{
|
||||||
|
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::ConnectionError, $oException);
|
||||||
|
}
|
||||||
|
catch (\Exception $oException)
|
||||||
|
{
|
||||||
|
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::AuthError, $oException);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $sEmail
|
* @param string $sEmail
|
||||||
* @param string $sLogin
|
* @param string $sLogin
|
||||||
|
|
@ -1461,26 +1490,12 @@ class Actions
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$this->MailClient()
|
$this->CheckMailConnection($oAccount);
|
||||||
->Connect($oAccount->Domain()->IncHost(\MailSo\Base\Utils::GetDomainFromEmail($oAccount->Email())),
|
|
||||||
$oAccount->Domain()->IncPort(), $oAccount->Domain()->IncSecure())
|
|
||||||
->Login($oAccount->IncLogin(), $oAccount->Password())
|
|
||||||
;
|
|
||||||
}
|
|
||||||
catch (\RainLoop\Exceptions\ClientException $oException)
|
|
||||||
{
|
|
||||||
$this->loginErrorDelay();
|
|
||||||
throw $oException;
|
|
||||||
}
|
|
||||||
catch (\MailSo\Net\Exceptions\ConnectionException $oException)
|
|
||||||
{
|
|
||||||
$this->loginErrorDelay();
|
|
||||||
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::ConnectionError, $oException);
|
|
||||||
}
|
}
|
||||||
catch (\Exception $oException)
|
catch (\Exception $oException)
|
||||||
{
|
{
|
||||||
$this->loginErrorDelay();
|
$this->loginErrorDelay();
|
||||||
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::AuthError, $oException);
|
throw $oException;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $oAccount;
|
return $oAccount;
|
||||||
|
|
@ -1890,6 +1905,21 @@ class Actions
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \RainLoop\Account $oAccount
|
||||||
|
*/
|
||||||
|
public function ClearSignMeData($oAccount)
|
||||||
|
{
|
||||||
|
if ($oAccount)
|
||||||
|
{
|
||||||
|
\RainLoop\Utils::ClearCookie(\RainLoop\Actions::AUTH_SIGN_ME_TOKEN_KEY);
|
||||||
|
|
||||||
|
$this->StorageProvider()->Clear(null,
|
||||||
|
\RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY,
|
||||||
|
'SignMe/UserToken/'.$oAccount->SignMeToken());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
|
@ -1898,11 +1928,7 @@ class Actions
|
||||||
$oAccount = $this->getAccountFromToken(false);
|
$oAccount = $this->getAccountFromToken(false);
|
||||||
if ($oAccount && $oAccount->SignMe())
|
if ($oAccount && $oAccount->SignMe())
|
||||||
{
|
{
|
||||||
\RainLoop\Utils::ClearCookie(\RainLoop\Actions::AUTH_SIGN_ME_TOKEN_KEY);
|
$this->ClearSignMeData($oAccount);
|
||||||
|
|
||||||
$this->StorageProvider()->Clear(null,
|
|
||||||
\RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY,
|
|
||||||
'SignMe/UserToken/'.$oAccount->SignMeToken());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->TrueResponse(__FUNCTION__);
|
return $this->TrueResponse(__FUNCTION__);
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -994,8 +994,18 @@ class ServiceActions
|
||||||
$oAccount = $this->oActions->GetAccountFromSignMeToken();
|
$oAccount = $this->oActions->GetAccountFromSignMeToken();
|
||||||
if ($oAccount)
|
if ($oAccount)
|
||||||
{
|
{
|
||||||
$this->oActions->AuthProcess($oAccount);
|
try
|
||||||
$sAuthAccountHash = $this->oActions->GetSpecAuthToken();
|
{
|
||||||
|
$this->oActions->CheckMailConnection($oAccount);
|
||||||
|
|
||||||
|
$this->oActions->AuthProcess($oAccount);
|
||||||
|
|
||||||
|
$sAuthAccountHash = $this->oActions->GetSpecAuthToken();
|
||||||
|
}
|
||||||
|
catch (\Exception $oException)
|
||||||
|
{
|
||||||
|
$this->oActions->ClearSignMeData($oAccount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1021,7 +1031,7 @@ class ServiceActions
|
||||||
$this->oActions->Plugins()->CompileTemplate($bAdmin);
|
$this->oActions->Plugins()->CompileTemplate($bAdmin);
|
||||||
|
|
||||||
return
|
return
|
||||||
($bWrapByScriptTag ? '<script type="text/javascript">' : '').
|
($bWrapByScriptTag ? '<script type="text/javascript" data-cfasync="false">' : '').
|
||||||
'window.rainloopTEMPLATES='.\MailSo\Base\Utils::Php2js(array($sHtml)).';'.
|
'window.rainloopTEMPLATES='.\MailSo\Base\Utils::Php2js(array($sHtml)).';'.
|
||||||
($bWrapByScriptTag ? '</script>' : '')
|
($bWrapByScriptTag ? '</script>' : '')
|
||||||
;
|
;
|
||||||
|
|
@ -1064,7 +1074,7 @@ class ServiceActions
|
||||||
$sResult = empty($sLangJs) ? 'null' : '{'.\substr($sLangJs, 0, -1).'}';
|
$sResult = empty($sLangJs) ? 'null' : '{'.\substr($sLangJs, 0, -1).'}';
|
||||||
|
|
||||||
return
|
return
|
||||||
($bWrapByScriptTag ? '<script type="text/javascript">' : '').
|
($bWrapByScriptTag ? '<script type="text/javascript" data-cfasync="false">' : '').
|
||||||
'window.rainloopI18N='.$sResult.';'.$sMoment.
|
'window.rainloopI18N='.$sResult.';'.$sMoment.
|
||||||
($bWrapByScriptTag ? '</script>' : '')
|
($bWrapByScriptTag ? '</script>' : '')
|
||||||
;
|
;
|
||||||
|
|
@ -1079,7 +1089,7 @@ class ServiceActions
|
||||||
private function compileAppData($aAppData, $bWrapByScriptTag = true)
|
private function compileAppData($aAppData, $bWrapByScriptTag = true)
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
($bWrapByScriptTag ? '<script>' : '').
|
($bWrapByScriptTag ? '<script type="text/javascript" data-cfasync="false">' : '').
|
||||||
'window.rainloopAppData='.\json_encode($aAppData).';'.
|
'window.rainloopAppData='.\json_encode($aAppData).';'.
|
||||||
'if(window.__rlah_set){__rlah_set()};'.
|
'if(window.__rlah_set){__rlah_set()};'.
|
||||||
($bWrapByScriptTag ? '</script>' : '')
|
($bWrapByScriptTag ? '</script>' : '')
|
||||||
|
|
|
||||||
|
|
@ -311,7 +311,7 @@ class Social
|
||||||
$sCheckToken = !empty($aParts[0]) ? $aParts[0] : '';
|
$sCheckToken = !empty($aParts[0]) ? $aParts[0] : '';
|
||||||
$sCheckAuth = !empty($aParts[1]) ? $aParts[1] : '';
|
$sCheckAuth = !empty($aParts[1]) ? $aParts[1] : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$sRedirectUrl = $this->oHttp->GetFullUrl().'?SocialGoogle';
|
$sRedirectUrl = $this->oHttp->GetFullUrl().'?SocialGoogle';
|
||||||
if (!$this->oHttp->HasQuery('code'))
|
if (!$this->oHttp->HasQuery('code'))
|
||||||
{
|
{
|
||||||
|
|
@ -415,7 +415,7 @@ class Social
|
||||||
@\header('Content-Type: text/html; charset=utf-8');
|
@\header('Content-Type: text/html; charset=utf-8');
|
||||||
$sCallBackType = $bLogin ? '_login' : '';
|
$sCallBackType = $bLogin ? '_login' : '';
|
||||||
$sConnectionFunc = 'rl_'.\md5(\RainLoop\Utils::GetConnectionToken()).'_google'.$sCallBackType.'_service';
|
$sConnectionFunc = 'rl_'.\md5(\RainLoop\Utils::GetConnectionToken()).'_google'.$sCallBackType.'_service';
|
||||||
$sResult = '<script>opener && opener.'.$sConnectionFunc.' && opener.'.
|
$sResult = '<script type="text/javascript" data-cfasync="false">opener && opener.'.$sConnectionFunc.' && opener.'.
|
||||||
$sConnectionFunc.'('.$iErrorCode.'); self && self.close && self.close();</script>';
|
$sConnectionFunc.'('.$iErrorCode.'); self && self.close && self.close();</script>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -451,7 +451,7 @@ class Social
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$oAccount = $this->oActions->GetAccount();
|
$oAccount = $this->oActions->GetAccount();
|
||||||
|
|
||||||
$oFacebook = $this->FacebookConnector($oAccount ? $oAccount : null);
|
$oFacebook = $this->FacebookConnector($oAccount ? $oAccount : null);
|
||||||
if ($oFacebook)
|
if ($oFacebook)
|
||||||
{
|
{
|
||||||
|
|
@ -537,7 +537,7 @@ class Social
|
||||||
$aUserData = \RainLoop\Utils::DecodeKeyValues($sUserData);
|
$aUserData = \RainLoop\Utils::DecodeKeyValues($sUserData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($aUserData && \is_array($aUserData) &&
|
if ($aUserData && \is_array($aUserData) &&
|
||||||
!empty($aUserData['Email']) &&
|
!empty($aUserData['Email']) &&
|
||||||
!empty($aUserData['Login']) &&
|
!empty($aUserData['Login']) &&
|
||||||
|
|
@ -547,7 +547,7 @@ class Social
|
||||||
if ($oAccount instanceof \RainLoop\Account)
|
if ($oAccount instanceof \RainLoop\Account)
|
||||||
{
|
{
|
||||||
$this->oActions->AuthProcess($oAccount);
|
$this->oActions->AuthProcess($oAccount);
|
||||||
|
|
||||||
$iErrorCode = 0;
|
$iErrorCode = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -580,7 +580,7 @@ class Social
|
||||||
@\header('Content-Type: text/html; charset=utf-8');
|
@\header('Content-Type: text/html; charset=utf-8');
|
||||||
$sCallBackType = $bLogin ? '_login' : '';
|
$sCallBackType = $bLogin ? '_login' : '';
|
||||||
$sConnectionFunc = 'rl_'.\md5(\RainLoop\Utils::GetConnectionToken()).'_facebook'.$sCallBackType.'_service';
|
$sConnectionFunc = 'rl_'.\md5(\RainLoop\Utils::GetConnectionToken()).'_facebook'.$sCallBackType.'_service';
|
||||||
$sResult = '<script>opener && opener.'.$sConnectionFunc.' && opener.'.
|
$sResult = '<script type="text/javascript" data-cfasync="false">opener && opener.'.$sConnectionFunc.' && opener.'.
|
||||||
$sConnectionFunc.'('.$iErrorCode.'); self && self.close && self.close();</script>';
|
$sConnectionFunc.'('.$iErrorCode.'); self && self.close && self.close();</script>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -729,7 +729,7 @@ class Social
|
||||||
if ($oAccount instanceof \RainLoop\Account)
|
if ($oAccount instanceof \RainLoop\Account)
|
||||||
{
|
{
|
||||||
$this->oActions->AuthProcess($oAccount);
|
$this->oActions->AuthProcess($oAccount);
|
||||||
|
|
||||||
$iErrorCode = 0;
|
$iErrorCode = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -778,7 +778,7 @@ class Social
|
||||||
@\header('Content-Type: text/html; charset=utf-8');
|
@\header('Content-Type: text/html; charset=utf-8');
|
||||||
$sCallBackType = $bLogin ? '_login' : '';
|
$sCallBackType = $bLogin ? '_login' : '';
|
||||||
$sConnectionFunc = 'rl_'.\md5(\RainLoop\Utils::GetConnectionToken()).'_twitter'.$sCallBackType.'_service';
|
$sConnectionFunc = 'rl_'.\md5(\RainLoop\Utils::GetConnectionToken()).'_twitter'.$sCallBackType.'_service';
|
||||||
$sResult = '<script>opener && opener.'.$sConnectionFunc.' && opener.'.
|
$sResult = '<script type="text/javascript" data-cfasync="false">opener && opener.'.$sConnectionFunc.' && opener.'.
|
||||||
$sConnectionFunc.'('.$iErrorCode.'); self && self.close && self.close();</script>';
|
$sConnectionFunc.'('.$iErrorCode.'); self && self.close && self.close();</script>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ namespace RainLoop;
|
||||||
class Utils
|
class Utils
|
||||||
{
|
{
|
||||||
static $Cookies = null;
|
static $Cookies = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
|
@ -34,7 +34,7 @@ class Utils
|
||||||
{
|
{
|
||||||
return \MailSo\Base\Crypt::XxteaDecrypt($sEncriptedString, $sKey);
|
return \MailSo\Base\Crypt::XxteaDecrypt($sEncriptedString, $sKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $aValues
|
* @param array $aValues
|
||||||
* @param string $sCustomKey = ''
|
* @param string $sCustomKey = ''
|
||||||
|
|
@ -258,7 +258,7 @@ class Utils
|
||||||
foreach ($aList as $sName)
|
foreach ($aList as $sName)
|
||||||
{
|
{
|
||||||
$sTemplateName = \substr($sName, 0, -5);
|
$sTemplateName = \substr($sName, 0, -5);
|
||||||
$sResult .= '<script id="'.\preg_replace('/[^a-zA-Z0-9]/', '', $sTemplateName).'" type="text/html">'.
|
$sResult .= '<script id="'.\preg_replace('/[^a-zA-Z0-9]/', '', $sTemplateName).'" type="text/html" data-cfasync="false">'.
|
||||||
$oAction->ProcessTemplate($sTemplateName, \file_get_contents($sDirName.'/'.$sName)).'</script>';
|
$oAction->ProcessTemplate($sTemplateName, \file_get_contents($sDirName.'/'.$sName)).'</script>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -366,12 +366,12 @@ class Utils
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function CustomBaseConvert($sNumberInput, $sFromBaseInput = '0123456789', $sToBaseInput = '0123456789')
|
public static function CustomBaseConvert($sNumberInput, $sFromBaseInput = '0123456789', $sToBaseInput = '0123456789')
|
||||||
{
|
{
|
||||||
if ($sFromBaseInput === $sToBaseInput)
|
if ($sFromBaseInput === $sToBaseInput)
|
||||||
{
|
{
|
||||||
return $sNumberInput;
|
return $sNumberInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
$mFromBase = \str_split($sFromBaseInput, 1);
|
$mFromBase = \str_split($sFromBaseInput, 1);
|
||||||
$mToBase = \str_split($sToBaseInput, 1);
|
$mToBase = \str_split($sToBaseInput, 1);
|
||||||
$aNumber = \str_split($sNumberInput, 1);
|
$aNumber = \str_split($sNumberInput, 1);
|
||||||
|
|
@ -387,10 +387,10 @@ class Utils
|
||||||
{
|
{
|
||||||
$mRetVal = \bcadd($mRetVal, \bcmul(\array_search($aNumber[$iIndex - 1], $mFromBase), \bcpow($iFromLen, $numberLen - $iIndex)));
|
$mRetVal = \bcadd($mRetVal, \bcmul(\array_search($aNumber[$iIndex - 1], $mFromBase), \bcpow($iFromLen, $numberLen - $iIndex)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $mRetVal;
|
return $mRetVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($sFromBaseInput != '0123456789')
|
if ($sFromBaseInput != '0123456789')
|
||||||
{
|
{
|
||||||
$sBase10 = \RainLoop\Utils::CustomBaseConvert($sNumberInput, $sFromBaseInput, '0123456789');
|
$sBase10 = \RainLoop\Utils::CustomBaseConvert($sNumberInput, $sFromBaseInput, '0123456789');
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,9 @@
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function __fIncludeScr(sSrc) {
|
function __fIncludeScr(sSrc) {
|
||||||
document.write(unescape('%3Csc' + 'ript type="text/jav' + 'ascr' + 'ipt" sr' + 'c="' + sSrc + '"%3E%3C/' + 'scr' + 'ipt%3E'));
|
document.write(unescape('%3Csc' + 'ript data-cfasync="false" type="text/jav' + 'ascr' + 'ipt" sr' + 'c="' + sSrc + '"%3E%3C/' + 'scr' + 'ipt%3E'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!navigator || !navigator.cookieEnabled) {
|
if (!navigator || !navigator.cookieEnabled) {
|
||||||
document.location.replace('{{BaseAppIndexFile}}?/NoCookie');
|
document.location.replace('{{BaseAppIndexFile}}?/NoCookie');
|
||||||
}
|
}
|
||||||
|
|
@ -28,11 +28,11 @@
|
||||||
<link rel="apple-touch-icon" href="{{BaseAppAppleTouchFile}}" type="image/png" />
|
<link rel="apple-touch-icon" href="{{BaseAppAppleTouchFile}}" type="image/png" />
|
||||||
<link type="text/css" rel="stylesheet" href="{{BaseAppMainCssLink}}" />
|
<link type="text/css" rel="stylesheet" href="{{BaseAppMainCssLink}}" />
|
||||||
<link type="text/css" rel="stylesheet" id="rlThemeLink" />
|
<link type="text/css" rel="stylesheet" id="rlThemeLink" />
|
||||||
<script type="text/javascript">{{BaseAppBootScriptSource}}</script>
|
<script type="text/javascript" data-cfasync="false">{{BaseAppBootScriptSource}}</script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript" data-cfasync="false">
|
||||||
__fIncludeScr('{{BaseAppDataScriptLink}}' + (window.__rlah ? window.__rlah() || '0' : '0') + '/{{BaseRandHash}}/');
|
__fIncludeScr('{{BaseAppDataScriptLink}}' + (window.__rlah ? window.__rlah() || '0' : '0') + '/{{BaseRandHash}}/');
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript" data-cfasync="false">
|
||||||
if (window.rainloopAppData && window.rainloopAppData['NewThemeLink']) {
|
if (window.rainloopAppData && window.rainloopAppData['NewThemeLink']) {
|
||||||
document.getElementById('rlThemeLink').href = window.rainloopAppData['NewThemeLink'];
|
document.getElementById('rlThemeLink').href = window.rainloopAppData['NewThemeLink'];
|
||||||
}
|
}
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
<div class="e-bounce bounce3"></div>
|
<div class="e-bounce bounce3"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript" data-cfasync="false">
|
||||||
var oE = document.getElementById('rl-loading');
|
var oE = document.getElementById('rl-loading');
|
||||||
if (oE) {
|
if (oE) {
|
||||||
oE.style.opacity = 0;
|
oE.style.opacity = 0;
|
||||||
|
|
@ -71,25 +71,25 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="rl-templates"></div>
|
<div id="rl-templates"></div>
|
||||||
<div id="rl-hidden"></div>
|
<div id="rl-hidden"></div>
|
||||||
<script type="text/javascript" src="{{BaseAppLibsScriptLink}}"></script>
|
<script type="text/javascript" src="{{BaseAppLibsScriptLink}}" data-cfasync="false"></script>
|
||||||
<script type="text/javascript" src="{{BaseAppEditorScriptLink}}"></script>
|
<script type="text/javascript" src="{{BaseAppEditorScriptLink}}" data-cfasync="false"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript" data-cfasync="false">
|
||||||
if (window.rainloopAppData && window.rainloopAppData['TemplatesLink']) {
|
if (window.rainloopAppData && window.rainloopAppData['TemplatesLink']) {
|
||||||
__fIncludeScr(window.rainloopAppData['TemplatesLink']);
|
__fIncludeScr(window.rainloopAppData['TemplatesLink']);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript" data-cfasync="false">
|
||||||
if (window.rainloopAppData && window.rainloopAppData['LangLink']) {
|
if (window.rainloopAppData && window.rainloopAppData['LangLink']) {
|
||||||
__fIncludeScr(window.rainloopAppData['LangLink']);
|
__fIncludeScr(window.rainloopAppData['LangLink']);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="{{BaseAppMainScriptLink}}"></script>
|
<script type="text/javascript" src="{{BaseAppMainScriptLink}}" data-cfasync="false"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript" data-cfasync="false">
|
||||||
if (window.rainloopAppData && window.rainloopAppData['PluginsLink']) {
|
if (window.rainloopAppData && window.rainloopAppData['PluginsLink']) {
|
||||||
__fIncludeScr(window.rainloopAppData['PluginsLink']);
|
__fIncludeScr(window.rainloopAppData['PluginsLink']);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript" data-cfasync="false">
|
||||||
function __showError() {
|
function __showError() {
|
||||||
var oR = document.getElementById('rl-loading'),
|
var oR = document.getElementById('rl-loading'),
|
||||||
oL = document.getElementById('rl-loading-error');
|
oL = document.getElementById('rl-loading-error');
|
||||||
|
|
|
||||||
|
|
@ -637,7 +637,7 @@
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*! normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */
|
/*! normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */
|
||||||
|
|
||||||
/* =============================================================================
|
/* =============================================================================
|
||||||
|
|
@ -1142,7 +1142,7 @@ table {
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
border-spacing: 0;
|
border-spacing: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@charset "UTF-8";
|
@charset "UTF-8";
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
|
|
@ -1513,7 +1513,7 @@ table {
|
||||||
.icon-resize-out:before {
|
.icon-resize-out:before {
|
||||||
content: "\e06d";
|
content: "\e06d";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** initial setup **/
|
/** initial setup **/
|
||||||
.nano {
|
.nano {
|
||||||
/*
|
/*
|
||||||
|
|
@ -1630,7 +1630,7 @@ table {
|
||||||
.nano > .pane2:hover > .slider2, .nano > .pane2.active > .slider2 {
|
.nano > .pane2:hover > .slider2, .nano > .pane2.active > .slider2 {
|
||||||
background-color: rgba(0, 0, 0, 0.4);
|
background-color: rgba(0, 0, 0, 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Magnific Popup CSS */
|
/* Magnific Popup CSS */
|
||||||
.mfp-bg {
|
.mfp-bg {
|
||||||
top: 0;
|
top: 0;
|
||||||
|
|
@ -1995,7 +1995,7 @@ img.mfp-img {
|
||||||
right: 0;
|
right: 0;
|
||||||
padding-top: 0; }
|
padding-top: 0; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* overlay at start */
|
/* overlay at start */
|
||||||
.mfp-fade.mfp-bg {
|
.mfp-fade.mfp-bg {
|
||||||
|
|
@ -2041,7 +2041,7 @@ img.mfp-img {
|
||||||
-moz-transform: translateX(50px);
|
-moz-transform: translateX(50px);
|
||||||
transform: translateX(50px);
|
transform: translateX(50px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.simple-pace {
|
.simple-pace {
|
||||||
-webkit-pointer-events: none;
|
-webkit-pointer-events: none;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
|
|
@ -2112,7 +2112,7 @@ img.mfp-img {
|
||||||
@keyframes simple-pace-stripe-animation {
|
@keyframes simple-pace-stripe-animation {
|
||||||
0% { transform: none; transform: none; }
|
0% { transform: none; transform: none; }
|
||||||
100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }
|
100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }
|
||||||
}
|
}
|
||||||
.inputosaurus-container {
|
.inputosaurus-container {
|
||||||
background-color:#fff;
|
background-color:#fff;
|
||||||
border:1px solid #bcbec0;
|
border:1px solid #bcbec0;
|
||||||
|
|
@ -2180,7 +2180,7 @@ img.mfp-img {
|
||||||
box-shadow:none;
|
box-shadow:none;
|
||||||
}
|
}
|
||||||
.inputosaurus-input-hidden { display:none; }
|
.inputosaurus-input-hidden { display:none; }
|
||||||
|
|
||||||
.flag-wrapper {
|
.flag-wrapper {
|
||||||
width: 24px;
|
width: 24px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
|
|
@ -2224,7 +2224,7 @@ img.mfp-img {
|
||||||
.flag.flag-pt-br {background-position: -192px -11px}
|
.flag.flag-pt-br {background-position: -192px -11px}
|
||||||
|
|
||||||
.flag.flag-cn, .flag.flag-zh-tw, .flag.flag-zh-cn, .flag.flag-zh-hk {background-position: -208px -22px}
|
.flag.flag-cn, .flag.flag-zh-tw, .flag.flag-zh-cn, .flag.flag-zh-hk {background-position: -208px -22px}
|
||||||
|
|
||||||
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
|
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
|
||||||
.clearfix {
|
.clearfix {
|
||||||
*zoom: 1;
|
*zoom: 1;
|
||||||
|
|
|
||||||
BIN
rainloop/v/0.0.0/static/favicon.ico
Normal file
BIN
rainloop/v/0.0.0/static/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
8
rainloop/v/0.0.0/static/js/admin.min.js
vendored
8
rainloop/v/0.0.0/static/js/admin.min.js
vendored
File diff suppressed because one or more lines are too long
16
rainloop/v/0.0.0/static/js/app.min.js
vendored
16
rainloop/v/0.0.0/static/js/app.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue