PageRenderTime 212ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 1ms

/scalr-2/tags/scalr-2.0.0/app/src/prepend.inc.php

http://scalr.googlecode.com/
PHP | 419 lines | 279 code | 83 blank | 57 comment | 19 complexity | 00ef04da516dc65c418225bed8a712b3 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, GPL-3.0
  1. <?
  2. define("TRANSACTION_ID", uniqid("tran"));
  3. define("DEFAULT_LOCALE", "en_US");
  4. // Start session
  5. if (!defined("NO_SESSIONS"))
  6. session_start();
  7. @date_default_timezone_set(@date_default_timezone_get());
  8. // Attempt to normalize settings
  9. @error_reporting(E_ALL ^E_NOTICE ^E_USER_NOTICE ^E_DEPRECATED);
  10. @ini_set('magic_quotes_runtime', '0');
  11. @ini_set('magic_quotes_gpc', '0');
  12. @ini_set('variables_order', 'GPCS');
  13. @ini_set('gpc_order', 'GPC');
  14. @ini_set('session.bug_compat_42', '0');
  15. @ini_set('session.bug_compat_warn', '0');
  16. // Increase execution time limit
  17. set_time_limit(180);
  18. // A kind of sanitization :-/
  19. if (get_magic_quotes_gpc())
  20. {
  21. function mstripslashes(&$item, $key)
  22. {
  23. $item = stripslashes($item);
  24. }
  25. array_walk_recursive($_POST, "mstripslashes");
  26. array_walk_recursive($_GET, "mstripslashes");
  27. array_walk_recursive($_REQUEST, "mstripslashes");
  28. }
  29. //
  30. // Locale init
  31. //
  32. if ($sess_lang)
  33. $locale = $sess_lang;
  34. else if ($get_lang)
  35. $locale = $get_lang;
  36. else
  37. $locale = DEFAULT_LOCALE;
  38. define("LOCALE", $locale);
  39. $_SESSION["LOCALE"] = LOCALE;
  40. setcookie("locale", LOCALE, time() + 86400*30);
  41. putenv("LANG=".LOCALE);
  42. setlocale(LC_ALL, LOCALE);
  43. define("TEXT_DOMAIN", "default");
  44. bindtextdomain (TEXT_DOMAIN, LANGS_DIR);
  45. textdomain(TEXT_DOMAIN);
  46. bind_textdomain_codeset(TEXT_DOMAIN, "UTF-8");
  47. $display["lang"] = LOCALE;
  48. // Globalize
  49. @extract($_GET, EXTR_PREFIX_ALL, "get");
  50. @extract($_POST, EXTR_PREFIX_ALL, "post");
  51. @extract($_SESSION, EXTR_PREFIX_ALL, "sess");
  52. @extract($_REQUEST, EXTR_PREFIX_ALL, "req");
  53. // Environment stuff
  54. $base = dirname(__FILE__);
  55. define("SRCPATH", $base);
  56. define("APPPATH", "{$base}/..");
  57. define("CACHEPATH", "$base/../cache");
  58. $ADODB_CACHE_DIR = "$cachepath/adodb";
  59. define("CF_TEMPLATES_PATH", APPPATH."/templates/".LOCALE);
  60. define("CF_SMARTYBIN_PATH", CACHEPATH."/smarty_bin/".LOCALE);
  61. define("CF_SMARTYCACHE_PATH", CACHEPATH."/smarty/".LOCALE);
  62. // Require autoload definition
  63. $classpath[] = dirname(__FILE__);
  64. $classpath[] = dirname(__FILE__) . "/Lib/ZF";
  65. set_include_path(get_include_path() . PATH_SEPARATOR . join(PATH_SEPARATOR, $classpath));
  66. require_once (SRCPATH."/autoload.inc.php");
  67. // require sanitizer
  68. require_once(SRCPATH."/exceptions/class.ApplicationException.php");
  69. require_once(SRCPATH."/class.UI.php");
  70. require_once(SRCPATH."/class.Debug.php");
  71. require_once(SRCPATH."/class.TaskQueue.php");
  72. require_once(SRCPATH."/class.FarmTerminationOptions.php");
  73. require_once(SRCPATH."/class.DataForm.php");
  74. require_once(SRCPATH."/class.DataFormField.php");
  75. require_once(SRCPATH."/queue_tasks/abstract.Task.php");
  76. require_once(SRCPATH."/queue_tasks/class.FireDeferredEventTask.php");
  77. // All uncaught exceptions will raise ApplicationException
  78. function exception_handler($exception)
  79. {
  80. UI::DisplayException($exception);
  81. }
  82. set_exception_handler("exception_handler");
  83. ////////////////////////////////////////
  84. // LibWebta //
  85. ////////////////////////////////////////
  86. require(SRCPATH."/LibWebta/prepend.inc.php");
  87. Core::Load("Security/Crypto");
  88. Core::Load("NET/Mail/PHPMailer");
  89. Core::Load("NET/Mail/PHPSmartyMailer");
  90. Core::Load("Data/Formater/class.Formater.php");
  91. Core::Load("Data/Validation/class.Validator.php");
  92. Core::Load("System/Independent/Shell/class.ShellFactory.php");
  93. Core::Load("NET/API/AWS/AmazonEC2");
  94. Core::Load("NET/API/AWS/AmazonS3");
  95. Core::Load("NET/API/AWS/AmazonSQS");
  96. Core::Load("NET/API/AWS/AmazonCloudFront");
  97. Core::Load("NET/API/AWS/AmazonELB");
  98. Core::Load("NET/API/AWS/AmazonRDS");
  99. Core::Load("NET/API/AWS/AmazonCloudWatch");
  100. Core::Load("NET/API/AWS/AmazonVPC");
  101. Core::Load("NET/SNMP");
  102. require_once(SRCPATH . '/externals/adodb5/adodb-exceptions.inc.php');
  103. require_once(SRCPATH . '/externals/adodb5/adodb.inc.php');
  104. require_once(SRCPATH . '/externals/Smarty-2.6.26/libs/Smarty.class.php');
  105. require_once(SRCPATH . '/externals/Smarty-2.6.26/libs/Smarty_Compiler.class.php');
  106. require_once(SRCPATH . '/externals/htmlpurifier-4.1.1/library/HTMLPurifier.auto.php');
  107. $cfg = @parse_ini_file(APPPATH."/etc/config.ini", true);
  108. if (!count($cfg)) {
  109. die(_("Cannot parse config.ini file"));
  110. };
  111. define("CF_DEBUG_DB", $cfg["debug"]["db"]);
  112. // ADODB init
  113. try
  114. {
  115. $db = Core::GetDBInstance($cfg["db"]);
  116. }
  117. catch(Exception $e)
  118. {
  119. throw new Exception("Service is temporary not available. Please try again in a minute.");
  120. //TODO: Notify about this.
  121. }
  122. $ADODB_CACHE_DIR = CACHEPATH."/adodb";
  123. // Select config from db
  124. foreach ($db->CacheGetAll(3600, "SELECT * FROM config") as $rsk)
  125. //foreach ($db->GetAll("SELECT * FROM config") as $rsk)
  126. $cfg[$rsk["key"]] = $rsk["value"];
  127. $ConfigReflection = new ReflectionClass("CONFIG");
  128. // Define Constants and paste config into CONFIG struct
  129. foreach ($cfg as $k=>$v)
  130. {
  131. if (is_array($v))
  132. foreach ($v as $kk=>$vv)
  133. {
  134. $key = strtoupper("{$k}_{$kk}");
  135. if ($ConfigReflection->hasProperty($key))
  136. CONFIG::$$key = $vv;
  137. define("CF_{$key}", $vv);
  138. }
  139. else
  140. {
  141. if (is_array($k))
  142. $nk = strtoupper("{$k[0]}_{$k[1]}");
  143. else
  144. $nk = strtoupper("{$k}");
  145. if ($ConfigReflection->hasProperty($nk))
  146. CONFIG::$$nk = $v;
  147. define("CF_{$nk}", $v);
  148. }
  149. }
  150. unset($cfg);
  151. // Define log4php contants
  152. define("LOG4PHP_DIR", SRCPATH.'/externals/apache-log4php-2.0.0-incubating/src/main/php');
  153. require_once LOG4PHP_DIR . '/Logger.php';
  154. require_once (SRCPATH.'/class.LoggerAppenderScalr.php');
  155. require_once (SRCPATH.'/class.LoggerPatternLayoutScalr.php');
  156. require_once (SRCPATH.'/class.FarmLogMessage.php');
  157. require_once (SRCPATH.'/class.ScriptingLogMessage.php');
  158. require_once (SRCPATH.'/class.LoggerPatternParserScalr.php');
  159. require_once (SRCPATH.'/class.LoggerBasicPatternConverterScalr.php');
  160. require_once (SRCPATH.'/class.LoggerFilterCategoryMatch.php');
  161. Logger::configure(APPPATH.'/etc/log4php.xml', 'LoggerConfiguratorXml');
  162. $Logger = Logger::getLogger('Application');
  163. // Define json_encode function if extension not installed
  164. if (!function_exists("json_encode"))
  165. {
  166. Core::Load("Data/JSON/JSON.php");
  167. $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
  168. function json_encode($text)
  169. {
  170. global $json;
  171. return $json->encode($text);
  172. }
  173. function json_decode($text, $assoc = true)
  174. {
  175. global $json;
  176. return $json->decode($text);
  177. }
  178. }
  179. //
  180. // Configure urls
  181. //
  182. CONFIG::$IPNURL = "https://".$_SERVER['HTTP_HOST']."/order/ipn.php";
  183. CONFIG::$PDTURL = "https://".$_SERVER['HTTP_HOST']."/order/pdt.php?utm_nooverride=1";
  184. // Smarty init
  185. if (!defined("NO_TEMPLATES"))
  186. {
  187. $Smarty = Core::GetSmartyInstance();
  188. // Cache control
  189. if (CONFIG::$DEBUG_APP)
  190. {
  191. $Smarty->clear_all_cache();
  192. $Smarty->caching = false;
  193. }
  194. else
  195. $Smarty->caching = true;
  196. $Smarty->register_function('get_static_url', 'get_static_url');
  197. function get_static_url($params, &$smarty)
  198. {
  199. $domains = array('static1.scalr.net', 'static2.scalr.net', 'static3.scalr.net', 'static4.scalr.net', 'static5.scalr.net');
  200. $h = crc32($params['path']);
  201. $n = (abs($h) % 5);
  202. $proto = "https://";
  203. return "{$proto}{$domains[$n]}{$params['path']}";
  204. //return "https://scalr.net{$params['path']}";
  205. //return "http://ec2farm-dev.bsd2.webta.local{$params['path']}";
  206. }
  207. }
  208. // PHPSmartyMailer init
  209. $Mailer = Core::GetPHPSmartyMailerInstance();
  210. $Mailer->From = CONFIG::$EMAIL_ADDRESS;
  211. $Mailer->FromName = CONFIG::$EMAIL_NAME;
  212. $Mailer->CharSet = "UTF-8";
  213. // Crtypto init
  214. $Crypto = Core::GetInstance("Crypto", CONFIG::$CRYPTOKEY);
  215. //TODO: Move all timeouts to config UI.
  216. // Set zone lock timeouts
  217. CONFIG::$ZONE_LOCK_WAIT_TIMEOUT = 5000000; // in miliseconds (1000000 = 1 second)
  218. CONFIG::$ZONE_LOCK_WAIT_RETRIES = 3;
  219. CONFIG::$HTTP_PROTO = (CONFIG::$HTTP_PROTO) ? CONFIG::$HTTP_PROTO : "http";
  220. // cache lifetime
  221. CONFIG::$EVENTS_RSS_CACHE_LIFETIME = 300; // in seconds
  222. CONFIG::$EVENTS_TIMELINE_CACHE_LIFETIME = 300; // in seconds
  223. CONFIG::$AJAX_PROCESSLIST_CACHE_LIFETIME = 120; // in seconds
  224. // Get control password
  225. $cpwd = $Crypto->Decrypt(@file_get_contents(dirname(__FILE__)."/../etc/.passwd"));
  226. // Set path to SNMP Trap binary
  227. SNMP::SetSNMPTrapPath(CONFIG::$SNMPTRAP_PATH);
  228. // Require observer interfaces
  229. require_once (APPPATH.'/observers/interface.IDeferredEventObserver.php');
  230. require_once (APPPATH.'/observers/interface.IEventObserver.php');
  231. require_once (SRCPATH.'/class.Scalr.php');
  232. //
  233. // Attach event observers
  234. //
  235. Scalr::AttachObserver(new SSHWorker());
  236. Scalr::AttachObserver(new DBEventObserver());
  237. Scalr::AttachObserver(new ScriptingEventObserver());
  238. Scalr::AttachObserver(new DNSEventObserver());
  239. Scalr::AttachObserver(new MessagingEventObserver());
  240. Scalr::AttachObserver(new ScalarizrEventObserver());
  241. Scalr::AttachObserver(new Modules_Platforms_Ec2_Observers_Ec2());
  242. Scalr::AttachObserver(new Modules_Platforms_Ec2_Observers_Ebs());
  243. Scalr::AttachObserver(new Modules_Platforms_Ec2_Observers_Eip());
  244. Scalr::AttachObserver(new Modules_Platforms_Ec2_Observers_Elb());
  245. Scalr::AttachObserver(new Modules_Platforms_Rds_Observers_Rds());
  246. //
  247. // Attach deferred event observers
  248. //
  249. Scalr::AttachObserver(new MailEventObserver(), true);
  250. Scalr::AttachObserver(new RESTEventObserver(), true);
  251. //
  252. // Register scaling algos
  253. //
  254. RoleScalingManager::RegisterScalingAlgo(new TimeScalingAlgo());
  255. RoleScalingManager::RegisterScalingAlgo(new BaseScalingAlgo());
  256. RoleScalingManager::RegisterScalingAlgo(new BWScalingAlgo());
  257. RoleScalingManager::RegisterScalingAlgo(new LAScalingAlgo());
  258. RoleScalingManager::RegisterScalingAlgo(new SQSScalingAlgo());
  259. RoleScalingManager::RegisterScalingAlgo(new RAMScalingAlgo());
  260. RoleScalingManager::RegisterScalingAlgo(new HTTPResponseTimeScalingAlgo());
  261. $ReflectEVENT_TYPE = new ReflectionClass("EVENT_TYPE");
  262. $event_types = $ReflectEVENT_TYPE->getConstants();
  263. foreach ($event_types as $event_type)
  264. {
  265. if (class_exists("{$event_type}Event"))
  266. {
  267. $ReflectClass = new ReflectionClass("{$event_type}Event");
  268. $retval = $ReflectClass->getMethod("GetScriptingVars")->invoke(null);
  269. if (!empty($retval))
  270. {
  271. foreach ($retval as $k=>$v)
  272. {
  273. if (!CONFIG::$SCRIPT_BUILTIN_VARIABLES[$k])
  274. {
  275. CONFIG::$SCRIPT_BUILTIN_VARIABLES[$k] = array(
  276. "PropName" => $v,
  277. "EventName" => "{$event_type}"
  278. );
  279. }
  280. else
  281. {
  282. if (!is_array(CONFIG::$SCRIPT_BUILTIN_VARIABLES[$k]['EventName']))
  283. $events = array(CONFIG::$SCRIPT_BUILTIN_VARIABLES[$k]['EventName']);
  284. else
  285. $events = CONFIG::$SCRIPT_BUILTIN_VARIABLES[$k]['EventName'];
  286. $events[] = $event_type;
  287. CONFIG::$SCRIPT_BUILTIN_VARIABLES[$k] = array(
  288. "PropName" => $v,
  289. "EventName" => $events
  290. );
  291. }
  292. }
  293. }
  294. }
  295. }
  296. //
  297. // Select AWS regions
  298. //
  299. $regions = array();
  300. foreach (AWSRegions::GetList() as $region)
  301. {
  302. $regions[$region] = AWSRegions::GetName($region);
  303. }
  304. $display['regions'] = $regions;
  305. //
  306. // Tender integration
  307. //
  308. define("TENDER_APIKEY", "ebc97df2196a3ac625c1d7a45f6644e9b0b397a548eabb3e479baf05b30f79bd46ed254c76cc4dde1bd8bab0f742ee11b0a68aec0165c69008d4a78e9614b0dd");
  309. define("TENDER_SITEKEY", "scalr");
  310. function GenerateTenderMultipassToken($data)
  311. {
  312. $salted = TENDER_APIKEY . TENDER_SITEKEY;
  313. $hash = hash('sha1',$salted,true);
  314. $saltedHash = substr($hash,0,16);
  315. $iv = "OpenSSL for Ruby";
  316. // double XOR first block
  317. for ($i = 0; $i < 16; $i++)
  318. {
  319. $data[$i] = $data[$i] ^ $iv[$i];
  320. }
  321. $pad = 16 - (strlen($data) % 16);
  322. $data = $data . str_repeat(chr($pad), $pad);
  323. $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'','cbc','');
  324. mcrypt_generic_init($cipher, $saltedHash, $iv);
  325. $encryptedData = mcrypt_generic($cipher,$data);
  326. mcrypt_generic_deinit($cipher);
  327. return urlencode(base64_encode($encryptedData));
  328. }
  329. //
  330. // ZohoCRM integration
  331. //
  332. // Configure default mediator
  333. $mediator = new Scalr_Integration_ZohoCrm_DeferredMediator();
  334. Scalr_Integration_ZohoCrm_Mediator::setDefaultMediator($mediator);
  335. Scalr::AttachInternalObserver($mediator);
  336. ?>