mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-01-23 23:28:49 +08:00
Add github action
This commit is contained in:
parent
1979f84dab
commit
20e0c1417d
17 changed files with 2038 additions and 2040 deletions
4
.cmds
4
.cmds
|
@ -15,5 +15,5 @@ webpack --color --watch
|
|||
|
||||
#
|
||||
gpg --import x
|
||||
gpg --detach-sign --armor --openpgp -u 87DA4591 x
|
||||
for ff in `ls *.zip`; do gpg --detach-sign --armor --openpgp -u 87DA4591 $ff; done
|
||||
gpg --detach-sign --armor --openpgp -u 87DA4591 --passphrase ?? x
|
||||
for ff in `ls ./build/dist/releases/**/**/*.zip | xargs`; do gpg --detach-sign --no-tty --yes --armor --openpgp -u 87DA4591 --passphrase ?? $ff; done
|
||||
|
|
|
@ -1,20 +1,22 @@
|
|||
FROM php:7.3-fpm
|
||||
# FROM php:7.3-fpm
|
||||
# FROM php:7.4-fpm
|
||||
FROM php:8.0-fpm
|
||||
|
||||
RUN apt-get update
|
||||
|
||||
RUN apt-get install -y \
|
||||
git unzip wget zip curl mlocate \
|
||||
libmcrypt-dev libicu-dev libpcre3-dev libicu-dev \
|
||||
libmcrypt-dev libicu-dev libpcre3-dev \
|
||||
build-essential chrpath libssl-dev \
|
||||
libxft-dev libfreetype6 libfreetype6-dev \
|
||||
libpng-dev libjpeg62-turbo-dev \
|
||||
libfontconfig1 libfontconfig1-dev libzip-dev
|
||||
|
||||
RUN pecl install mcrypt-1.0.2 && \
|
||||
RUN pecl install mcrypt && \
|
||||
docker-php-ext-enable mcrypt
|
||||
|
||||
RUN docker-php-ext-configure intl && \
|
||||
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \
|
||||
docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ && \
|
||||
docker-php-ext-install opcache pdo_mysql zip intl gd
|
||||
|
||||
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
||||
|
|
57
.github/workflows/builder.yml
vendored
Normal file
57
.github/workflows/builder.yml
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
name: Builder
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 12.x
|
||||
|
||||
- name: Create Cache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: os-${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
|
||||
|
||||
- run: yarn install --frozen-lockfile --check-files
|
||||
- run: yarn build
|
||||
- run: yarn build-pro
|
||||
|
||||
- name: Configure GPG Key
|
||||
run: |
|
||||
mkdir -p ~/.gnupg/
|
||||
printf "$GPG_SIGNING_KEY" | base64 --decode > ~/.gnupg/private.key
|
||||
gpg --import ~/.gnupg/private.key
|
||||
for ff in `ls ./build/dist/releases/**/**/*.zip | xargs`; do gpg --detach-sign --no-tty --yes --armor --openpgp -u 87DA4591 --passphrase $GPG_PASSPHRASE $ff; done
|
||||
env:
|
||||
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
|
||||
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
|
||||
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: ${{ github.ref }}
|
||||
release_name: ${{ github.ref }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
|
||||
- name: Upload Release Asset
|
||||
uses: alexellis/upload-assets@0.2.2
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
asset_paths: '["./build/dist/releases/*"]'
|
16
package.json
16
package.json
|
@ -3,8 +3,8 @@
|
|||
"title": "RainLoop Webmail",
|
||||
"description": "Simple, modern & fast web-based email client",
|
||||
"private": true,
|
||||
"version": "1.14.0",
|
||||
"ownCloudVersion": "5.3.0",
|
||||
"version": "1.15.0",
|
||||
"ownCloudVersion": "5.4.0",
|
||||
"homepage": "https://www.rainloop.net",
|
||||
"author": {
|
||||
"name": "RainLoop Team",
|
||||
|
@ -17,7 +17,9 @@
|
|||
},
|
||||
"scripts": {
|
||||
"watch-css": "gulp watchCss",
|
||||
"watch-js": "webpack --color --watch"
|
||||
"watch-js": "webpack --color --watch",
|
||||
"build": "gulp all",
|
||||
"build-pro": "gulp all --pro"
|
||||
},
|
||||
"license": "SEE LICENSE IN LICENSE",
|
||||
"licenses": [
|
||||
|
@ -86,6 +88,7 @@
|
|||
"gulp-size": "3.0.0",
|
||||
"gulp-sourcemaps": "2.6.5",
|
||||
"gulp-stripbom": "1.0.5",
|
||||
"gulp-terser": "^1.2.0",
|
||||
"gulp-through": "0.4.0",
|
||||
"gulp-util": "3.0.8",
|
||||
"gulp-zip": "5.0.1",
|
||||
|
@ -115,11 +118,8 @@
|
|||
"rimraf": "3.0.2",
|
||||
"simplestatemanager": "4.1.1",
|
||||
"style-loader": "1.1.3",
|
||||
"underscore": "1.9.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"gulp-terser": "^1.2.0",
|
||||
"webpack": "4.42.0",
|
||||
"webpack-cli": "3.3.11"
|
||||
"webpack-cli": "3.3.11",
|
||||
"underscore": "1.9.2"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ if (!\defined('RAINLOOP_APP_LIBRARIES_PATH'))
|
|||
return false;
|
||||
}
|
||||
|
||||
\spl_autoload_register('rainLoopSplAutoloadRegisterFunction', false);
|
||||
\spl_autoload_register('rainLoopSplAutoloadRegisterFunction');
|
||||
}
|
||||
|
||||
if (\class_exists('RainLoop\Api'))
|
||||
|
|
|
@ -2249,21 +2249,6 @@ END;
|
|||
|
||||
$aCache = \explode(',', $sDisableFunctions);
|
||||
$aCache = \is_array($aCache) && 0 < \count($aCache) ? $aCache : array();
|
||||
|
||||
if (\extension_loaded('suhosin'))
|
||||
{
|
||||
$sSuhosin = @\ini_get('suhosin.executor.func.blacklist');
|
||||
$sSuhosin = \is_string($sSuhosin) && 0 < \strlen($sSuhosin) ? $sSuhosin : '';
|
||||
|
||||
$aSuhosinCache = \explode(',', $sSuhosin);
|
||||
$aSuhosinCache = \is_array($aSuhosinCache) && 0 < \count($aSuhosinCache) ? $aSuhosinCache : array();
|
||||
|
||||
if (0 < \count($aSuhosinCache))
|
||||
{
|
||||
$aCache = \array_merge($aCache, $aSuhosinCache);
|
||||
$aCache = \array_unique($aCache);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return !\in_array($mFunctionNameOrNames, $aCache);
|
||||
|
|
|
@ -27,7 +27,7 @@ if (!\defined('MAILSO_LIBRARY_ROOT_PATH'))
|
|||
include MAILSO_LIBRARY_ROOT_PATH.\str_replace('\\', '/', \substr($sClassName, 7)).'.php' : false;
|
||||
}
|
||||
|
||||
\spl_autoload_register('MailSo\MailSoSplAutoloadRegisterFunction', false);
|
||||
\spl_autoload_register('MailSo\MailSoSplAutoloadRegisterFunction');
|
||||
|
||||
if (\class_exists('MailSo\Base\Loader'))
|
||||
{
|
||||
|
|
|
@ -493,15 +493,20 @@ class Message
|
|||
|
||||
/**
|
||||
* @param string $sContentType
|
||||
* @param string|resource $mData
|
||||
* @param string $sData
|
||||
* @param string $sContentTransferEncoding = ''
|
||||
* @param array $aCustomContentTypeParams = array()
|
||||
*
|
||||
* @return \MailSo\Mime\Message
|
||||
*/
|
||||
public function AddAlternative($sContentType, $mData, $sContentTransferEncoding = '', $aCustomContentTypeParams = array())
|
||||
public function AddAlternative($sContentType, $sData, $sContentTransferEncoding = '')
|
||||
{
|
||||
$this->aAlternativeParts[] = array($sContentType, $mData, $sContentTransferEncoding, $aCustomContentTypeParams);
|
||||
$this->aAlternativeParts[] = array(
|
||||
$sContentType,
|
||||
\preg_replace('/\\r?\\n/', Enumerations\Constants::CRLF, \trim($sData)),
|
||||
$sContentTransferEncoding,
|
||||
array()
|
||||
);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
@ -712,7 +717,7 @@ class Message
|
|||
private function createNewMessageSimpleOrAlternativeBody()
|
||||
{
|
||||
$oResultPart = null;
|
||||
if (1 < count($this->aAlternativeParts))
|
||||
if (1 < \count($this->aAlternativeParts))
|
||||
{
|
||||
$oResultPart = Part::NewInstance();
|
||||
|
||||
|
@ -739,7 +744,7 @@ class Message
|
|||
}
|
||||
|
||||
}
|
||||
else if (1 === count($this->aAlternativeParts))
|
||||
else if (1 === \count($this->aAlternativeParts))
|
||||
{
|
||||
$oAlternativePart = $this->createNewMessageAlternativePartBody($this->aAlternativeParts[0]);
|
||||
if ($oAlternativePart)
|
||||
|
@ -759,7 +764,7 @@ class Message
|
|||
else
|
||||
{
|
||||
$aAttachments = $this->oAttachmentCollection->CloneAsArray();
|
||||
if (\is_array($aAttachments) && 1 === count($aAttachments) && isset($aAttachments[0]))
|
||||
if (\is_array($aAttachments) && 1 === \count($aAttachments) && isset($aAttachments[0]))
|
||||
{
|
||||
$this->oAttachmentCollection->Clear();
|
||||
|
||||
|
@ -784,7 +789,7 @@ class Message
|
|||
$oResultPart = null;
|
||||
|
||||
$aAttachments = $this->oAttachmentCollection->LinkedAttachments();
|
||||
if (0 < count($aAttachments))
|
||||
if (0 < \count($aAttachments))
|
||||
{
|
||||
$oResultPart = Part::NewInstance();
|
||||
|
||||
|
@ -824,7 +829,7 @@ class Message
|
|||
$oResultPart = null;
|
||||
|
||||
$aAttachments = $this->oAttachmentCollection->UnlinkedAttachments();
|
||||
if (0 < count($aAttachments))
|
||||
if (0 < \count($aAttachments))
|
||||
{
|
||||
$oResultPart = Part::NewInstance();
|
||||
|
||||
|
|
|
@ -1154,8 +1154,7 @@ class Actions
|
|||
$sPdo = empty($sPdo) ? '~' : $sPdo;
|
||||
|
||||
$this->oLogger->Write('['.
|
||||
'Suhosin:'.(\extension_loaded('suhosin') || @\ini_get('suhosin.get.max_value_length') ? 'on' : 'off').
|
||||
'][APC:'.(\MailSo\Base\Utils::FunctionExistsAndEnabled('apc_fetch') ? 'on' : 'off').
|
||||
'APC:'.(\MailSo\Base\Utils::FunctionExistsAndEnabled('apc_fetch') ? 'on' : 'off').
|
||||
'][MB:'.(\MailSo\Base\Utils::FunctionExistsAndEnabled('mb_convert_encoding') ? 'on' : 'off').
|
||||
'][PDO:'.$sPdo.
|
||||
(\RainLoop\Utils::IsOwnCloud() ? '][cloud:true' : '').
|
||||
|
@ -1845,7 +1844,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
$aResult['AllowLanguagesOnSettings'] = (bool) $oConfig->Get('webmail', 'allow_languages_on_settings', true);
|
||||
$aResult['AllowLanguagesOnLogin'] = (bool) $oConfig->Get('login', 'allow_languages_on_login', true);
|
||||
$aResult['AttachmentLimit'] = ((int) $oConfig->Get('webmail', 'attachment_size_limit', 10)) * 1024 * 1024;
|
||||
$aResult['SignMe'] = (string) $oConfig->Get('login', 'sign_me_auto', \RainLoop\Enumerations\SignMeType::DEFAILT_OFF);
|
||||
$aResult['SignMe'] = (string) $oConfig->Get('login', 'sign_me_auto', \RainLoop\Enumerations\SignMeType::DEFAULT_OFF);
|
||||
$aResult['UseLocalProxyForExternalImages'] = (bool) $oConfig->Get('labs', 'use_local_proxy_for_external_images', false);
|
||||
|
||||
// user
|
||||
|
@ -1997,7 +1996,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
// Mobile override
|
||||
if ($bMobile)
|
||||
{
|
||||
$aResult['Layout'] = \RainLoop\Enumerations\Layout::NO_PREVIW;
|
||||
$aResult['Layout'] = \RainLoop\Enumerations\Layout::NO_PREVIEW;
|
||||
|
||||
$aResult['SoundNotification'] = false;
|
||||
$aResult['DesktopNotifications'] = false;
|
||||
|
@ -5086,7 +5085,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
});
|
||||
|
||||
$this->setSettingsFromParams($oSettings, 'Layout', 'int', function ($iValue) {
|
||||
return (int) (\in_array((int) $iValue, array(\RainLoop\Enumerations\Layout::NO_PREVIW,
|
||||
return (int) (\in_array((int) $iValue, array(\RainLoop\Enumerations\Layout::NO_PREVIEW,
|
||||
\RainLoop\Enumerations\Layout::SIDE_PREVIEW, \RainLoop\Enumerations\Layout::BOTTOM_PREVIEW)) ?
|
||||
$iValue : \RainLoop\Enumerations\Layout::SIDE_PREVIEW);
|
||||
});
|
||||
|
|
|
@ -97,10 +97,13 @@ abstract class AbstractConfig
|
|||
switch ($sType)
|
||||
{
|
||||
default:
|
||||
case 'float':
|
||||
case 'string':
|
||||
$this->aData[$sSectionKey][$sParamKey][0] = (string) $mParamValue;
|
||||
break;
|
||||
case 'float':
|
||||
case 'double':
|
||||
$this->aData[$sSectionKey][$sParamKey][0] = (float) $mParamValue;
|
||||
break;
|
||||
case 'int':
|
||||
case 'integer':
|
||||
$this->aData[$sSectionKey][$sParamKey][0] = (int) $mParamValue;
|
||||
|
@ -321,6 +324,7 @@ abstract class AbstractConfig
|
|||
break;
|
||||
case 'int':
|
||||
case 'integer':
|
||||
case 'double':
|
||||
$sValue = $mParamValue[0];
|
||||
break;
|
||||
case 'bool':
|
||||
|
|
|
@ -276,7 +276,7 @@ class Application extends \RainLoop\Config\AbstractConfig
|
|||
|
||||
'login_lowercase' => array(true, ''),
|
||||
|
||||
'sign_me_auto' => array(\RainLoop\Enumerations\SignMeType::DEFAILT_OFF,
|
||||
'sign_me_auto' => array(\RainLoop\Enumerations\SignMeType::DEFAULT_OFF,
|
||||
'This option allows webmail to remember the logged in user
|
||||
once they closed the browser window.
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ namespace RainLoop\Enumerations;
|
|||
|
||||
class Layout
|
||||
{
|
||||
const NO_PREVIW = 0;
|
||||
const NO_PREVIEW = 0;
|
||||
const SIDE_PREVIEW = 1;
|
||||
const BOTTOM_PREVIEW = 2;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ namespace RainLoop\Enumerations;
|
|||
|
||||
class SignMeType
|
||||
{
|
||||
const DEFAILT_OFF = 'DefaultOff';
|
||||
const DEFAILT_ON = 'DefaultOn';
|
||||
const DEFAULT_OFF = 'DefaultOff';
|
||||
const DEFAULT_ON = 'DefaultOn';
|
||||
const UNUSED = 'Unused';
|
||||
}
|
|
@ -506,7 +506,7 @@ class ServiceActions
|
|||
if (\method_exists($this->oActions, $sMethodName))
|
||||
{
|
||||
@\header('X-Raw-Action: '.$sMethodName, true);
|
||||
@\header('Content-Security-Policy: script-src \'none\'; frame-src \'none\'; child-src \'none\'', true);
|
||||
@\header('Content-Security-Policy: script-src \'none\'; child-src \'none\'', true);
|
||||
|
||||
$sRawError = '';
|
||||
$this->oActions->SetActionParams(array(
|
||||
|
|
|
@ -21,8 +21,8 @@
|
|||
{{BaseAppHeadScriptLink}}
|
||||
{{BaseAppFaviconPngLinkTag}}
|
||||
{{BaseAppFaviconTouchLinkTag}}
|
||||
<link type="text/css" rel="stylesheet" href="{{BaseAppMainCssLink}}" />
|
||||
<link type="text/css" rel="stylesheet" href="{{BaseAppThemeCssLink}}" id="app-theme-link" />
|
||||
<link type="text/css" rel="stylesheet" href="{{BaseAppMainCssLink}}" rel="preload" />
|
||||
<link type="text/css" rel="stylesheet" href="{{BaseAppThemeCssLink}}" id="app-theme-link" rel="preload" />
|
||||
<link rel="manifest" href="{{BaseAppManifestLink}}" />
|
||||
</head>
|
||||
|
||||
|
|
|
@ -66,7 +66,9 @@ const jsMin = () =>
|
|||
.pipe(rename({ suffix: '.min' }))
|
||||
.pipe(
|
||||
terser({
|
||||
output: {comments: false}
|
||||
output: {
|
||||
comments: false
|
||||
}
|
||||
})
|
||||
)
|
||||
.pipe(eol('\n', true))
|
||||
|
|
Loading…
Reference in a new issue