lib_install.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. define('BCRYPT_COST', 9);
  3. Minz_Configuration::register('default_system', join_path(FRESHRSS_PATH, 'config.default.php'));
  4. Minz_Configuration::register('default_user', join_path(FRESHRSS_PATH, 'config-user.default.php'));
  5. function checkRequirements($dbType = '') {
  6. $php = version_compare(PHP_VERSION, '5.6.0') >= 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. $message = '';
  13. switch ($dbType) {
  14. case 'mysql':
  15. $pdo_sqlite = $pdo_pgsql = true;
  16. $pdo = $pdo_mysql;
  17. break;
  18. case 'sqlite':
  19. $pdo_mysql = $pdo_pgsql = true;
  20. $pdo = $pdo_sqlite;
  21. break;
  22. case 'pgsql':
  23. $pdo_mysql = $pdo_sqlite = true;
  24. $pdo = $pdo_pgsql;
  25. break;
  26. case '':
  27. $pdo = $pdo_mysql || $pdo_sqlite || $pdo_pgsql;
  28. break;
  29. default:
  30. $pdo_mysql = $pdo_sqlite = $pdo_pgsql = true;
  31. $pdo = false;
  32. $message = 'Invalid database type!';
  33. break;
  34. }
  35. $pcre = extension_loaded('pcre');
  36. $ctype = extension_loaded('ctype');
  37. $fileinfo = extension_loaded('fileinfo');
  38. $dom = class_exists('DOMDocument');
  39. $xml = function_exists('xml_parser_create');
  40. $json = function_exists('json_encode');
  41. $mbstring = extension_loaded('mbstring');
  42. $data = DATA_PATH && is_writable(DATA_PATH);
  43. $cache = CACHE_PATH && is_writable(CACHE_PATH);
  44. $users = USERS_PATH && is_writable(USERS_PATH);
  45. $favicons = is_writable(join_path(DATA_PATH, 'favicons'));
  46. $http_referer = is_referer_from_same_domain();
  47. return array(
  48. 'php' => $php ? 'ok' : 'ko',
  49. 'minz' => $minz ? 'ok' : 'ko',
  50. 'curl' => $curl ? 'ok' : 'ko',
  51. 'pdo-mysql' => $pdo_mysql ? 'ok' : 'ko',
  52. 'pdo-sqlite' => $pdo_sqlite ? 'ok' : 'ko',
  53. 'pdo-pgsql' => $pdo_pgsql ? 'ok' : 'ko',
  54. 'pdo' => $pdo ? 'ok' : 'ko',
  55. 'pcre' => $pcre ? 'ok' : 'ko',
  56. 'ctype' => $ctype ? 'ok' : 'ko',
  57. 'fileinfo' => $fileinfo ? 'ok' : 'ko',
  58. 'dom' => $dom ? 'ok' : 'ko',
  59. 'xml' => $xml ? 'ok' : 'ko',
  60. 'json' => $json ? 'ok' : 'ko',
  61. 'mbstring' => $mbstring ? 'ok' : 'ko',
  62. 'data' => $data ? 'ok' : 'ko',
  63. 'cache' => $cache ? 'ok' : 'ko',
  64. 'users' => $users ? 'ok' : 'ko',
  65. 'favicons' => $favicons ? 'ok' : 'ko',
  66. 'http_referer' => $http_referer ? 'ok' : 'ko',
  67. 'message' => $message ?: 'ok',
  68. 'all' => $php && $minz && $curl && $pdo && $pcre && $ctype && $dom && $xml &&
  69. $data && $cache && $users && $favicons && $http_referer && $message == '' ? 'ok' : 'ko'
  70. );
  71. }
  72. function generateSalt() {
  73. return sha1(uniqid(mt_rand(), true).implode('', stat(__FILE__)));
  74. }
  75. function checkDb() {
  76. $conf = FreshRSS_Context::$system_conf;
  77. $db = $conf->db;
  78. if (empty($db['pdo_options'])) {
  79. $db['pdo_options'] = [];
  80. }
  81. $db['pdo_options'][PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  82. $dbBase = isset($db['base']) ? $db['base'] : '';
  83. $db['base'] = ''; //First connection without database name to create the database
  84. Minz_ModelPdo::$usesSharedPdo = false;
  85. $databaseDAO = FreshRSS_Factory::createDatabaseDAO();
  86. $databaseDAO->create();
  87. $db['base'] = $dbBase; //New connection with the database name
  88. $databaseDAO = FreshRSS_Factory::createDatabaseDAO();
  89. Minz_ModelPdo::$usesSharedPdo = true;
  90. return $databaseDAO->testConnection();
  91. }
  92. function deleteInstall() {
  93. $path = join_path(DATA_PATH, 'do-install.txt');
  94. @unlink($path);
  95. return !file_exists($path);
  96. }