PageRenderTime 47ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/Nooges.php

https://github.com/leftnode/nooges.com
PHP | 155 lines | 117 code | 34 blank | 4 comment | 6 complexity | e7cac502e880a5ff4078ee6639120657 MD5 | raw file
  1. <?php
  2. require_once 'ArtisanSystem/Exception.php';
  3. require_once 'ArtisanSystem/Controller.php';
  4. require_once 'ArtisanSystem/Db.php';
  5. require_once 'ArtisanSystem/Registry.php';
  6. require_once 'ArtisanSystem/Router.php';
  7. require_once 'ArtisanSystem/Session.php';
  8. require_once 'ArtisanSystem/Validator.php';
  9. require_once 'ArtisanSystem/View.php';
  10. require_once 'DataModeler/DataAdapterPdo.php';
  11. require_once 'DataModeler/DataIterator.php';
  12. require_once 'DataModeler/DataModel.php';
  13. require_once 'DataModeler/DataObject.php';
  14. function __autoload($class) {
  15. $class_path = str_replace('_', '.', $class) . '.php';
  16. require_once DIR_LIB . $class_path;
  17. }
  18. class Nooges {
  19. private static $config_router = array();
  20. private static $config_db = array();
  21. private static $is_cli = false;
  22. public static function setConfigRouter(array $config) {
  23. self::$config_router = $config;
  24. }
  25. public static function setConfigDb(array $config) {
  26. self::$config_db = $config;
  27. }
  28. public static function init() {
  29. $db_hostname = self::$config_db['server'];
  30. $db_username = self::$config_db['username'];
  31. $db_password = self::$config_db['password'];
  32. $db_database = self::$config_db['database'];
  33. $dsn = "mysql:host={$db_hostname};port=3306;dbname={$db_database}";
  34. $pdo = new PDO($dsn, $db_username, $db_password);
  35. $sql = "SET character_set_results = 'utf8',
  36. character_set_client = 'utf8',
  37. character_set_connection = 'utf8',
  38. character_set_database = 'utf8',
  39. character_set_server = 'utf8'";
  40. $pdo->query($sql);
  41. Artisan_Registry::push('db', $pdo);
  42. $data_adapter = new DataAdapterPdo($pdo);
  43. $data_model = new DataModel($data_adapter);
  44. Artisan_Registry::push('data_adapter', $data_adapter);
  45. Artisan_Registry::push('data_model', $data_model);
  46. self::$is_cli = ( 'cli' === php_sapi_name() ? true : false );
  47. if ( false === self::$is_cli ) {
  48. /* Attempt to get the session ID from the forums */
  49. $user_id = 0;
  50. $smf_cookie = er(COOKIE_NAME, $_COOKIE);
  51. if ( false === empty($smf_cookie) ) {
  52. /* If this is set, we can get their user ID and use that to load data. */
  53. $smf_cookie = unserialize($smf_cookie);
  54. $user_id = er(0, $smf_cookie, 0);
  55. }
  56. session_start();
  57. $_SESSION['user_id'] = $user_id;
  58. /* Create the token for POST methods to prevent CSRF attacks. */
  59. self::createToken();
  60. /* Validate POST requests. */
  61. if ( POST == RM ) {
  62. $token = er('token', $_POST);
  63. if ( false === self::verifyToken($token) ) {
  64. exit('POST methods are not allowed without the correct token! Token given: ' . $token);
  65. }
  66. }
  67. }
  68. setlocale(LC_ALL, 'en_US.utf8');
  69. }
  70. public static function run() {
  71. $artisanRouter = new Artisan_Router(self::$config_router);
  72. echo $artisanRouter->dispatch();
  73. }
  74. public static function createToken() {
  75. if ( false === exs(SESSION_TOKEN, $_SESSION) ) {
  76. $token = mt_rand(1000000, mt_getrandmax());
  77. $salt = crypt_create_salt();
  78. $secret_token = crypt_compute_hash($token, $salt);
  79. $_SESSION[SESSION_TOKEN] = $token;
  80. $_SESSION[SESSION_TOKEN_SECRET] = $secret_token;
  81. $_SESSION[SESSION_TOKEN_SALT] = $salt;
  82. }
  83. }
  84. public static function verifyToken($token) {
  85. $salt = self::getTokenSalt();
  86. $secret_token = self::getSecretToken();
  87. $hashed_token = crypt_compute_hash($token, $salt);
  88. return ( $secret_token === $hashed_token );
  89. }
  90. public static function getConfigDb() {
  91. return self::$config_db;
  92. }
  93. public static function getConfigRouter() {
  94. return self::$config_router;
  95. }
  96. public static function getDataAdapter() {
  97. return Artisan_Registry::pop('data_adapter');
  98. }
  99. public static function getDataModel() {
  100. return Artisan_Registry::pop('data_model');
  101. }
  102. public static function getDb() {
  103. return Artisan_Registry::pop('db');
  104. }
  105. public static function getSecretToken() {
  106. return $_SESSION[SESSION_TOKEN_SECRET];
  107. }
  108. public static function getToken() {
  109. return $_SESSION[SESSION_TOKEN];
  110. }
  111. public static function getTokenSalt() {
  112. return $_SESSION[SESSION_TOKEN_SALT];
  113. }
  114. public static function getView() {
  115. $view = new Artisan_View(self::$config_router['root_dir']);
  116. $view->setIsRewrite(self::$config_router['rewrite'])
  117. ->setSiteRoot(self::$config_router['site_root'])
  118. ->setSiteRootSecure(self::$config_router['site_root_secure']);
  119. return $view;
  120. }
  121. }