lib_install.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. define('BCRYPT_COST', 9);
  3. Minz_Configuration::register('default_system', join_path(DATA_PATH, 'config.default.php'));
  4. Minz_Configuration::register('default_user', join_path(USERS_PATH, '_', 'config.default.php'));
  5. function checkRequirements() {
  6. $php = version_compare(PHP_VERSION, '5.3.3') >= 0;
  7. $minz = file_exists(join_path(LIB_PATH, 'Minz'));
  8. $curl = extension_loaded('curl');
  9. $pdo_mysql = extension_loaded('pdo_mysql');
  10. $pdo_sqlite = extension_loaded('pdo_sqlite');
  11. $pdo_pgsql = extension_loaded('pdo_pgsql');
  12. $pdo = $pdo_mysql || $pdo_sqlite || $pdo_pgsql;
  13. $pcre = extension_loaded('pcre');
  14. $ctype = extension_loaded('ctype');
  15. $fileinfo = extension_loaded('fileinfo');
  16. $dom = class_exists('DOMDocument');
  17. $xml = function_exists('xml_parser_create');
  18. $json = function_exists('json_encode');
  19. $data = DATA_PATH && is_writable(DATA_PATH);
  20. $cache = CACHE_PATH && is_writable(CACHE_PATH);
  21. $users = USERS_PATH && is_writable(USERS_PATH);
  22. $favicons = is_writable(join_path(DATA_PATH, 'favicons'));
  23. $http_referer = is_referer_from_same_domain();
  24. return array(
  25. 'php' => $php ? 'ok' : 'ko',
  26. 'minz' => $minz ? 'ok' : 'ko',
  27. 'curl' => $curl ? 'ok' : 'ko',
  28. 'pdo-mysql' => $pdo_mysql ? 'ok' : 'ko',
  29. 'pdo-sqlite' => $pdo_sqlite ? 'ok' : 'ko',
  30. 'pdo-pgsql' => $pdo_pgsql ? 'ok' : 'ko',
  31. 'pdo' => $pdo ? 'ok' : 'ko',
  32. 'pcre' => $pcre ? 'ok' : 'ko',
  33. 'ctype' => $ctype ? 'ok' : 'ko',
  34. 'fileinfo' => $fileinfo ? 'ok' : 'ko',
  35. 'dom' => $dom ? 'ok' : 'ko',
  36. 'xml' => $xml ? 'ok' : 'ko',
  37. 'json' => $json ? 'ok' : 'ko',
  38. 'data' => $data ? 'ok' : 'ko',
  39. 'cache' => $cache ? 'ok' : 'ko',
  40. 'users' => $users ? 'ok' : 'ko',
  41. 'favicons' => $favicons ? 'ok' : 'ko',
  42. 'http_referer' => $http_referer ? 'ok' : 'ko',
  43. 'all' => $php && $minz && $curl && $pdo && $pcre && $ctype && $fileinfo && $dom && $xml &&
  44. $data && $cache && $users && $favicons && $http_referer ?
  45. 'ok' : 'ko'
  46. );
  47. }
  48. function generateSalt() {
  49. return sha1(uniqid(mt_rand(), true).implode('', stat(__FILE__)));
  50. }
  51. function checkDb(&$dbOptions) {
  52. $dsn = '';
  53. $driver_options = null;
  54. try {
  55. switch ($dbOptions['type']) {
  56. case 'mysql':
  57. include_once(APP_PATH . '/SQL/install.sql.mysql.php');
  58. $driver_options = array(
  59. PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4'
  60. );
  61. try { // on ouvre une connexion juste pour créer la base si elle n'existe pas
  62. $dsn = 'mysql:host=' . $dbOptions['host'] . ';';
  63. $c = new PDO($dsn, $dbOptions['user'], $dbOptions['password'], $driver_options);
  64. $sql = sprintf(SQL_CREATE_DB, $dbOptions['base']);
  65. $res = $c->query($sql);
  66. } catch (PDOException $e) {
  67. syslog(LOG_DEBUG, 'FreshRSS MySQL warning: ' . $e->getMessage());
  68. }
  69. // on écrase la précédente connexion en sélectionnant la nouvelle BDD
  70. $dsn = 'mysql:host=' . $dbOptions['host'] . ';dbname=' . $dbOptions['base'];
  71. break;
  72. case 'sqlite':
  73. include_once(APP_PATH . '/SQL/install.sql.sqlite.php');
  74. $dsn = 'sqlite:' . join_path(USERS_PATH, $dbOptions['default_user'], 'db.sqlite');
  75. $driver_options = array(
  76. PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  77. );
  78. break;
  79. case 'pgsql':
  80. include_once(APP_PATH . '/SQL/install.sql.pgsql.php');
  81. $driver_options = array(
  82. PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  83. );
  84. try { // on ouvre une connexion juste pour créer la base si elle n'existe pas
  85. $dsn = 'pgsql:host=' . $dbOptions['host'] . ';dbname=postgres';
  86. $c = new PDO($dsn, $dbOptions['user'], $dbOptions['password'], $driver_options);
  87. $sql = sprintf(SQL_CREATE_DB, $dbOptions['base']);
  88. $res = $c->query($sql);
  89. } catch (PDOException $e) {
  90. syslog(LOG_DEBUG, 'FreshRSS PostgreSQL warning: ' . $e->getMessage());
  91. }
  92. // on écrase la précédente connexion en sélectionnant la nouvelle BDD
  93. $dsn = 'pgsql:host=' . $dbOptions['host'] . ';dbname=' . $dbOptions['base'];
  94. break;
  95. default:
  96. return false;
  97. }
  98. $c = new PDO($dsn, $dbOptions['user'], $dbOptions['password'], $driver_options);
  99. $res = $c->query('SELECT 1');
  100. } catch (PDOException $e) {
  101. $dsn = '';
  102. syslog(LOG_DEBUG, 'FreshRSS SQL warning: ' . $e->getMessage());
  103. $dbOptions['error'] = $e->getMessage();
  104. }
  105. $dbOptions['dsn'] = $dsn;
  106. $dbOptions['options'] = $driver_options;
  107. return $dsn != '';
  108. }
  109. function deleteInstall() {
  110. $path = join_path(DATA_PATH, 'do-install.txt');
  111. @unlink($path);
  112. return !file_exists($path);
  113. }