Added support for Mysql SSL connection
This commit is contained in:
@@ -12,6 +12,7 @@ New features:
|
|||||||
|
|
||||||
Improvements:
|
Improvements:
|
||||||
|
|
||||||
|
* Added support for Mysql SSL connection
|
||||||
* Improve web page title on the task view
|
* Improve web page title on the task view
|
||||||
* Unify task drop-down menu between different views
|
* Unify task drop-down menu between different views
|
||||||
* Improve LDAP user group membership synchronization
|
* Improve LDAP user group membership synchronization
|
||||||
|
|||||||
@@ -10,6 +10,13 @@ use PicoDb\Database;
|
|||||||
|
|
||||||
class DatabaseProvider implements ServiceProviderInterface
|
class DatabaseProvider implements ServiceProviderInterface
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Register provider
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @param Container $container
|
||||||
|
* @return Container
|
||||||
|
*/
|
||||||
public function register(Container $container)
|
public function register(Container $container)
|
||||||
{
|
{
|
||||||
$container['db'] = $this->getInstance();
|
$container['db'] = $this->getInstance();
|
||||||
@@ -83,6 +90,9 @@ class DatabaseProvider implements ServiceProviderInterface
|
|||||||
'database' => DB_NAME,
|
'database' => DB_NAME,
|
||||||
'charset' => 'utf8',
|
'charset' => 'utf8',
|
||||||
'port' => DB_PORT,
|
'port' => DB_PORT,
|
||||||
|
'ssl_key' => DB_SSL_KEY,
|
||||||
|
'ssl_ca' => DB_SSL_CA,
|
||||||
|
'ssl_cert' => DB_SSL_CERT,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,16 +2,17 @@
|
|||||||
|
|
||||||
require __DIR__.'/../vendor/autoload.php';
|
require __DIR__.'/../vendor/autoload.php';
|
||||||
|
|
||||||
// Automatically parse environment configuration (Heroku)
|
$dbUrlParser = new PicoDb\UrlParser();
|
||||||
if (getenv('DATABASE_URL')) {
|
|
||||||
$dbopts = parse_url(getenv('DATABASE_URL'));
|
|
||||||
|
|
||||||
define('DB_DRIVER', $dbopts['scheme']);
|
if ($dbUrlParser->isEnvironmentVariableDefined()) {
|
||||||
define('DB_USERNAME', $dbopts["user"]);
|
$dbSettings = $dbUrlParser->getSettings();
|
||||||
define('DB_PASSWORD', $dbopts["pass"]);
|
|
||||||
define('DB_HOSTNAME', $dbopts["host"]);
|
define('DB_DRIVER', $dbSettings['driver']);
|
||||||
define('DB_PORT', isset($dbopts["port"]) ? $dbopts["port"] : null);
|
define('DB_USERNAME', $dbSettings['username']);
|
||||||
define('DB_NAME', ltrim($dbopts["path"], '/'));
|
define('DB_PASSWORD', $dbSettings['password']);
|
||||||
|
define('DB_HOSTNAME', $dbSettings['hostname']);
|
||||||
|
define('DB_PORT', $dbSettings['port']);
|
||||||
|
define('DB_NAME', $dbSettings['database']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$config_file = implode(DIRECTORY_SEPARATOR, array(__DIR__, '..', 'config.php'));
|
$config_file = implode(DIRECTORY_SEPARATOR, array(__DIR__, '..', 'config.php'));
|
||||||
@@ -30,18 +31,18 @@ require __DIR__.'/constants.php';
|
|||||||
require __DIR__.'/check_setup.php';
|
require __DIR__.'/check_setup.php';
|
||||||
|
|
||||||
$container = new Pimple\Container;
|
$container = new Pimple\Container;
|
||||||
$container->register(new Kanboard\ServiceProvider\HelperProvider);
|
$container->register(new Kanboard\ServiceProvider\HelperProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\SessionProvider);
|
$container->register(new Kanboard\ServiceProvider\SessionProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\LoggingProvider);
|
$container->register(new Kanboard\ServiceProvider\LoggingProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\DatabaseProvider);
|
$container->register(new Kanboard\ServiceProvider\DatabaseProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\AuthenticationProvider);
|
$container->register(new Kanboard\ServiceProvider\AuthenticationProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\NotificationProvider);
|
$container->register(new Kanboard\ServiceProvider\NotificationProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\ClassProvider);
|
$container->register(new Kanboard\ServiceProvider\ClassProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\EventDispatcherProvider);
|
$container->register(new Kanboard\ServiceProvider\EventDispatcherProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\GroupProvider);
|
$container->register(new Kanboard\ServiceProvider\GroupProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\RouteProvider);
|
$container->register(new Kanboard\ServiceProvider\RouteProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\ActionProvider);
|
$container->register(new Kanboard\ServiceProvider\ActionProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\ExternalLinkProvider);
|
$container->register(new Kanboard\ServiceProvider\ExternalLinkProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\AvatarProvider);
|
$container->register(new Kanboard\ServiceProvider\AvatarProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\FilterProvider);
|
$container->register(new Kanboard\ServiceProvider\FilterProvider());
|
||||||
$container->register(new Kanboard\ServiceProvider\PluginProvider);
|
$container->register(new Kanboard\ServiceProvider\PluginProvider());
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ defined('DB_PASSWORD') or define('DB_PASSWORD', '');
|
|||||||
defined('DB_HOSTNAME') or define('DB_HOSTNAME', 'localhost');
|
defined('DB_HOSTNAME') or define('DB_HOSTNAME', 'localhost');
|
||||||
defined('DB_NAME') or define('DB_NAME', 'kanboard');
|
defined('DB_NAME') or define('DB_NAME', 'kanboard');
|
||||||
defined('DB_PORT') or define('DB_PORT', null);
|
defined('DB_PORT') or define('DB_PORT', null);
|
||||||
|
defined('DB_SSL_KEY') or define('DB_SSL_KEY', null);
|
||||||
|
defined('DB_SSL_CERT') or define('DB_SSL_CERT', null);
|
||||||
|
defined('DB_SSL_CA') or define('DB_SSL_CA', null);
|
||||||
|
|
||||||
// Database backend group provider
|
// Database backend group provider
|
||||||
defined('DB_GROUP_PROVIDER') or define('DB_GROUP_PROVIDER', true);
|
defined('DB_GROUP_PROVIDER') or define('DB_GROUP_PROVIDER', true);
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
"eluceo/ical": "0.8.0",
|
"eluceo/ical": "0.8.0",
|
||||||
"erusev/parsedown" : "1.6.0",
|
"erusev/parsedown" : "1.6.0",
|
||||||
"fguillot/json-rpc" : "1.1.0",
|
"fguillot/json-rpc" : "1.1.0",
|
||||||
"fguillot/picodb" : "1.0.8",
|
"fguillot/picodb" : "1.0.10",
|
||||||
"fguillot/simpleLogger" : "1.0.0",
|
"fguillot/simpleLogger" : "1.0.0",
|
||||||
"fguillot/simple-validator" : "1.0.0",
|
"fguillot/simple-validator" : "1.0.0",
|
||||||
"paragonie/random_compat": "@stable",
|
"paragonie/random_compat": "@stable",
|
||||||
|
|||||||
56
composer.lock
generated
56
composer.lock
generated
@@ -4,21 +4,21 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"hash": "715601e3833e0ee04d8d00d266302f8b",
|
"hash": "d3e42867a9978b7e3f2dbf0861e73519",
|
||||||
"content-hash": "ef38cdd1e92bd2cd299db9c6d429d24f",
|
"content-hash": "3f031c0bd8d109e424d67a4d59cde8e3",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "christian-riesen/base32",
|
"name": "christian-riesen/base32",
|
||||||
"version": "1.3.0",
|
"version": "1.3.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/ChristianRiesen/base32.git",
|
"url": "https://github.com/ChristianRiesen/base32.git",
|
||||||
"reference": "fde061a370b0a97fdcd33d9d5f7b1b70ce1f79d4"
|
"reference": "0a31e50c0fa9b1692d077c86ac188eecdcbaf7fa"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/ChristianRiesen/base32/zipball/fde061a370b0a97fdcd33d9d5f7b1b70ce1f79d4",
|
"url": "https://api.github.com/repos/ChristianRiesen/base32/zipball/0a31e50c0fa9b1692d077c86ac188eecdcbaf7fa",
|
||||||
"reference": "fde061a370b0a97fdcd33d9d5f7b1b70ce1f79d4",
|
"reference": "0a31e50c0fa9b1692d077c86ac188eecdcbaf7fa",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
"encode",
|
"encode",
|
||||||
"rfc4648"
|
"rfc4648"
|
||||||
],
|
],
|
||||||
"time": "2016-04-07 07:45:31"
|
"time": "2016-05-05 11:49:03"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "christian-riesen/otp",
|
"name": "christian-riesen/otp",
|
||||||
@@ -239,16 +239,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fguillot/picodb",
|
"name": "fguillot/picodb",
|
||||||
"version": "v1.0.8",
|
"version": "v1.0.10",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/fguillot/picoDb.git",
|
"url": "https://github.com/fguillot/picoDb.git",
|
||||||
"reference": "672a819ba2757a9e22a3572a230e735e84bcf625"
|
"reference": "99a9d271b08236c3035781db039ab7da25ff668d"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/fguillot/picoDb/zipball/672a819ba2757a9e22a3572a230e735e84bcf625",
|
"url": "https://api.github.com/repos/fguillot/picoDb/zipball/99a9d271b08236c3035781db039ab7da25ff668d",
|
||||||
"reference": "672a819ba2757a9e22a3572a230e735e84bcf625",
|
"reference": "99a9d271b08236c3035781db039ab7da25ff668d",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -272,7 +272,7 @@
|
|||||||
],
|
],
|
||||||
"description": "Minimalist database query builder",
|
"description": "Minimalist database query builder",
|
||||||
"homepage": "https://github.com/fguillot/picoDb",
|
"homepage": "https://github.com/fguillot/picoDb",
|
||||||
"time": "2016-03-27 20:15:25"
|
"time": "2016-05-06 22:49:08"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fguillot/simple-validator",
|
"name": "fguillot/simple-validator",
|
||||||
@@ -574,16 +574,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "swiftmailer/swiftmailer",
|
"name": "swiftmailer/swiftmailer",
|
||||||
"version": "v5.4.1",
|
"version": "v5.4.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/swiftmailer/swiftmailer.git",
|
"url": "https://github.com/swiftmailer/swiftmailer.git",
|
||||||
"reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421"
|
"reference": "d8db871a54619458a805229a057ea2af33c753e8"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0697e6aa65c83edf97bb0f23d8763f94e3f11421",
|
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/d8db871a54619458a805229a057ea2af33c753e8",
|
||||||
"reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421",
|
"reference": "d8db871a54619458a805229a057ea2af33c753e8",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -623,20 +623,20 @@
|
|||||||
"mail",
|
"mail",
|
||||||
"mailer"
|
"mailer"
|
||||||
],
|
],
|
||||||
"time": "2015-06-06 14:19:39"
|
"time": "2016-05-01 08:45:47"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/console",
|
"name": "symfony/console",
|
||||||
"version": "v2.8.4",
|
"version": "v2.8.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/console.git",
|
"url": "https://github.com/symfony/console.git",
|
||||||
"reference": "9a5aef5fc0d4eff86853d44202b02be8d5a20154"
|
"reference": "48221d3de4dc22d2cd57c97e8b9361821da86609"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/console/zipball/9a5aef5fc0d4eff86853d44202b02be8d5a20154",
|
"url": "https://api.github.com/repos/symfony/console/zipball/48221d3de4dc22d2cd57c97e8b9361821da86609",
|
||||||
"reference": "9a5aef5fc0d4eff86853d44202b02be8d5a20154",
|
"reference": "48221d3de4dc22d2cd57c97e8b9361821da86609",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -683,20 +683,20 @@
|
|||||||
],
|
],
|
||||||
"description": "Symfony Console Component",
|
"description": "Symfony Console Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2016-03-17 09:19:04"
|
"time": "2016-04-26 12:00:47"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/event-dispatcher",
|
"name": "symfony/event-dispatcher",
|
||||||
"version": "v2.8.4",
|
"version": "v2.8.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/event-dispatcher.git",
|
"url": "https://github.com/symfony/event-dispatcher.git",
|
||||||
"reference": "47d2d8cade9b1c3987573d2943bb9352536cdb87"
|
"reference": "81c4c51f7fd6d0d40961bd53dd60cade32db6ed6"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/47d2d8cade9b1c3987573d2943bb9352536cdb87",
|
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/81c4c51f7fd6d0d40961bd53dd60cade32db6ed6",
|
||||||
"reference": "47d2d8cade9b1c3987573d2943bb9352536cdb87",
|
"reference": "81c4c51f7fd6d0d40961bd53dd60cade32db6ed6",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -743,7 +743,7 @@
|
|||||||
],
|
],
|
||||||
"description": "Symfony EventDispatcher Component",
|
"description": "Symfony EventDispatcher Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2016-03-07 14:04:32"
|
"time": "2016-04-05 16:36:54"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-mbstring",
|
"name": "symfony/polyfill-mbstring",
|
||||||
@@ -808,7 +808,7 @@
|
|||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
{
|
{
|
||||||
"name": "symfony/stopwatch",
|
"name": "symfony/stopwatch",
|
||||||
"version": "v2.8.4",
|
"version": "v2.8.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/stopwatch.git",
|
"url": "https://github.com/symfony/stopwatch.git",
|
||||||
|
|||||||
@@ -50,6 +50,15 @@ define('DB_NAME', 'kanboard');
|
|||||||
// Mysql/Postgres custom port (null = default port)
|
// Mysql/Postgres custom port (null = default port)
|
||||||
define('DB_PORT', null);
|
define('DB_PORT', null);
|
||||||
|
|
||||||
|
// Mysql SSL key
|
||||||
|
define('DB_SSL_KEY', null);
|
||||||
|
|
||||||
|
// Mysql SSL certificate
|
||||||
|
define('DB_SSL_CERT', null);
|
||||||
|
|
||||||
|
// Mysql SSL CA
|
||||||
|
define('DB_SSL_CA', null);
|
||||||
|
|
||||||
// Enable LDAP authentication (false by default)
|
// Enable LDAP authentication (false by default)
|
||||||
define('LDAP_AUTH', false);
|
define('LDAP_AUTH', false);
|
||||||
|
|
||||||
|
|||||||
@@ -87,6 +87,15 @@ define('DB_NAME', 'kanboard');
|
|||||||
|
|
||||||
// Mysql/Postgres custom port (null = default port)
|
// Mysql/Postgres custom port (null = default port)
|
||||||
define('DB_PORT', null);
|
define('DB_PORT', null);
|
||||||
|
|
||||||
|
// Mysql SSL key
|
||||||
|
define('DB_SSL_KEY', null);
|
||||||
|
|
||||||
|
// Mysql SSL certificate
|
||||||
|
define('DB_SSL_CERT', null);
|
||||||
|
|
||||||
|
// Mysql SSL CA
|
||||||
|
define('DB_SSL_CA', null);
|
||||||
```
|
```
|
||||||
|
|
||||||
LDAP settings
|
LDAP settings
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
How to use Mysql or MariaDB instead of Sqlite
|
Mysql/MariaDB Configuration
|
||||||
=============================================
|
===========================
|
||||||
|
|
||||||
By default Kanboard use Sqlite to stores its data.
|
By default Kanboard use Sqlite to stores its data.
|
||||||
However it's possible to use Mysql or MariaDB instead of Sqlite.
|
However it's possible to use Mysql or MariaDB instead of Sqlite.
|
||||||
@@ -8,7 +8,7 @@ Requirements
|
|||||||
------------
|
------------
|
||||||
|
|
||||||
- Mysql server
|
- Mysql server
|
||||||
- The PHP extension `pdo_mysql` installed (Debian/Ubuntu: `apt-get install php5-mysql`)
|
- The PHP extension `pdo_mysql` installed
|
||||||
|
|
||||||
Note: Kanboard is tested with **Mysql >= 5.5 and MariaDB >= 10.0**
|
Note: Kanboard is tested with **Mysql >= 5.5 and MariaDB >= 10.0**
|
||||||
|
|
||||||
@@ -47,11 +47,26 @@ Note: You can also rename the template file `config.default.php` to `config.php`
|
|||||||
|
|
||||||
For the first time, Kanboard will run one by one each database migration and this process can take some time according to your configuration.
|
For the first time, Kanboard will run one by one each database migration and this process can take some time according to your configuration.
|
||||||
|
|
||||||
To avoid any issues or potential timeouts you can initialize the database directly by importing the SQL schema:
|
To avoid any potential timeout you can initialize the database directly by importing the SQL schema:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mysql -u root -p my_database < app/Schema/Sql/mysql.sql
|
mysql -u root -p my_database < app/Schema/Sql/mysql.sql
|
||||||
```
|
```
|
||||||
|
|
||||||
The file `app/Schema/Sql/mysql.sql` is a sql dump that represents the last version of the database.
|
The file `app/Schema/Sql/mysql.sql` is a SQL dump that represents the last version of the database.
|
||||||
|
|
||||||
|
SSL configuration
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
These parameters have to be defined to enable the Mysql SSL connection:
|
||||||
|
|
||||||
|
```php
|
||||||
|
// Mysql SSL key
|
||||||
|
define('DB_SSL_KEY', '/path/to/client-key.pem');
|
||||||
|
|
||||||
|
// Mysql SSL certificate
|
||||||
|
define('DB_SSL_CERT', '/path/to/client-cert.pem');
|
||||||
|
|
||||||
|
// Mysql SSL CA
|
||||||
|
define('DB_SSL_CA', '/path/to/ca-cert.pem');
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user