File manager - Edit - /usr/local/CyberCP/public/snappymail/snappymail/v/2.38.2/app/libraries/RainLoop/Utils.php
Back
<?php namespace RainLoop; class Utils { const /** * 30 days cookie * Used by: ServiceProxyExternal, compileLogParams, GetCsrfToken */ CONNECTION_TOKEN = 'smtoken', /** * Session cookie * Used by: EncodeKeyValuesQ, DecodeKeyValuesQ */ SESSION_TOKEN = 'smsession'; /** * @param mixed $value * @param int $flags Bitmask */ public static function jsonEncode($value, int $flags = \JSON_INVALID_UTF8_SUBSTITUTE) : string { try { /* Issue with \SnappyMail\HTTP\Stream if (Api::Config()->Get('debug', 'enable', false)) { $flags |= \JSON_PRETTY_PRINT; } */ return \json_encode($value, $flags | \JSON_UNESCAPED_UNICODE | \JSON_THROW_ON_ERROR); } catch (\Throwable $e) { Api::Logger()->WriteException($e, \LOG_ERR, 'JSON'); } return ''; } public static function EncodeKeyValuesQ(array $aValues, string $sCustomKey = '') : string { return \SnappyMail\Crypt::EncryptUrlSafe( $aValues, \sha1(APP_SALT.$sCustomKey.'Q'.static::GetSessionToken()) ); } public static function DecodeKeyValuesQ(string $sEncodedValues, string $sCustomKey = '') : array { return \SnappyMail\Crypt::DecryptUrlSafe( $sEncodedValues, \sha1(APP_SALT.$sCustomKey.'Q'.static::GetSessionToken(false)) ) ?: array(); } public static function GetSessionToken(bool $generate = true) : ?string { $sToken = \SnappyMail\Cookies::get(self::SESSION_TOKEN); if (!$sToken) { if (!$generate) { return null; } \SnappyMail\Log::debug('TOKENS', 'New SESSION_TOKEN'); $sToken = \MailSo\Base\Utils::Sha1Rand(APP_SALT); \SnappyMail\Cookies::set(self::SESSION_TOKEN, $sToken); } return \sha1('Session'.APP_SALT.$sToken.'Token'.APP_SALT); } public static function GetConnectionToken() : string { $oActions = \RainLoop\Api::Actions(); $oAccount = $oActions->getAccountFromToken(false); // $oAccount = $oActions->getMainAccountFromToken(false); if ($oAccount) { if ($oAccount instanceof \RainLoop\Model\AdditionalAccount) { return '2-' . \sha1(APP_SALT.$oAccount->Hash()); } return '1-' . \sha1(APP_SALT.$oAccount->Hash()); } $sToken = \SnappyMail\Cookies::get(self::CONNECTION_TOKEN); if (!$sToken) { $sToken = \MailSo\Base\Utils::Sha1Rand(APP_SALT); \SnappyMail\Cookies::set(self::CONNECTION_TOKEN, $sToken, \time() + 3600 * 24 * 30); } return '0-' . \sha1('Connection'.APP_SALT.$sToken.'Token'.APP_SALT); } public static function GetCsrfToken() : string { return self::GetConnectionToken(); // return \sha1('Csrf'.APP_SALT.self::GetConnectionToken().'Token'.APP_SALT); } public static function UpdateConnectionToken() : void { $sToken = \SnappyMail\Cookies::get(self::CONNECTION_TOKEN); if ($sToken) { \SnappyMail\Cookies::set(self::CONNECTION_TOKEN, $sToken, \time() + 3600 * 24 * 30); } } public static function ClearHtmlOutput(string $sHtml) : string { // return $sHtml; return \preg_replace('/>\\s+</', '> <', \preg_replace( ['@\\s*/>@', '/\\s* /i', '/ \\s*/i', '/[\\r\\n\\t]+/'], ['>', "\xC2\xA0", "\xC2\xA0", ' '], \trim($sHtml) )); } public static function WebPath() : string { static $sAppPath; if (!$sAppPath) { $sAppPath = \rtrim(Api::Config()->Get('webmail', 'app_path', '') ?: \preg_replace('#index\\.php.*$#D', '', $_SERVER['SCRIPT_NAME']), '/') . '/'; } return $sAppPath; } public static function WebVersionPath() : string { return self::WebPath() . 'snappymail/v/' . APP_VERSION . '/'; /** * TODO: solve this to support other paths. * https://github.com/the-djmaze/snappymail/issues/685 */ // return self::WebPath() . \str_replace(APP_INDEX_ROOT_PATH, '', APP_VERSION_ROOT_PATH); } public static function WebStaticPath(string $path = '') : string { return self::WebVersionPath() . 'static/' . $path; } public static function inOpenBasedir(string $name) : string { static $open_basedir; if (null === $open_basedir) { $open_basedir = \array_filter(\explode(PATH_SEPARATOR, \ini_get('open_basedir'))); } if ($open_basedir) { foreach ($open_basedir as $dir) { if (\str_starts_with($name, $dir)) { return true; } } // \SnappyMail\Log::warning('OpenBasedir', "open_basedir restriction in effect. {$name} is not within the allowed path(s): " . \ini_get('open_basedir')); return false; } return true; } public static function saveFile(string $filename, string $data) : void { $dir = \dirname($filename); if (!\is_dir($dir) && !\mkdir($dir, 0700, true)) { throw new \RuntimeException('Failed to create directory "'.$dir.'"'); } if (false === \file_put_contents($filename, $data)) { throw new \RuntimeException('Failed to save file "'.$filename.'"'); } \clearstatcache(); \chmod($filename, 0600); /* try { } catch (\Throwable $oException) { throw new \RuntimeException($oException->getMessage() . ': ' . \error_get_last()['message']); } */ } }
| ver. 1.4 |
Github
|
.
| PHP 8.2.28 | Generation time: 0.03 |
proxy
|
phpinfo
|
Settings