You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

server.php 9.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. <?php
  2. namespace OC;
  3. use OC\AppFramework\Http\Request;
  4. use OC\AppFramework\Utility\SimpleContainer;
  5. use OC\Cache\UserCache;
  6. use OC\DB\ConnectionWrapper;
  7. use OC\Files\Node\Root;
  8. use OC\Files\View;
  9. use OCP\IServerContainer;
  10. /**
  11. * Class Server
  12. * @package OC
  13. *
  14. * TODO: hookup all manager classes
  15. */
  16. class Server extends SimpleContainer implements IServerContainer {
  17. function __construct() {
  18. $this->registerService('ContactsManager', function($c) {
  19. return new ContactsManager();
  20. });
  21. $this->registerService('Request', function($c) {
  22. if (isset($c['urlParams'])) {
  23. $urlParams = $c['urlParams'];
  24. } else {
  25. $urlParams = array();
  26. }
  27. if (\OC::$session->exists('requesttoken')) {
  28. $requesttoken = \OC::$session->get('requesttoken');
  29. } else {
  30. $requesttoken = false;
  31. }
  32. if (defined('PHPUNIT_RUN') && PHPUNIT_RUN
  33. && in_array('fakeinput', stream_get_wrappers())) {
  34. $stream = 'fakeinput://data';
  35. } else {
  36. $stream = 'php://input';
  37. }
  38. return new Request(
  39. array(
  40. 'get' => $_GET,
  41. 'post' => $_POST,
  42. 'files' => $_FILES,
  43. 'server' => $_SERVER,
  44. 'env' => $_ENV,
  45. 'cookies' => $_COOKIE,
  46. 'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD']))
  47. ? $_SERVER['REQUEST_METHOD']
  48. : null,
  49. 'urlParams' => $urlParams,
  50. 'requesttoken' => $requesttoken,
  51. ), $stream
  52. );
  53. });
  54. $this->registerService('PreviewManager', function($c) {
  55. return new PreviewManager();
  56. });
  57. $this->registerService('TagManager', function($c) {
  58. $user = \OC_User::getUser();
  59. return new TagManager($user);
  60. });
  61. $this->registerService('RootFolder', function($c) {
  62. // TODO: get user and user manager from container as well
  63. $user = \OC_User::getUser();
  64. /** @var $c SimpleContainer */
  65. $userManager = $c->query('UserManager');
  66. $user = $userManager->get($user);
  67. $manager = \OC\Files\Filesystem::getMountManager();
  68. $view = new View();
  69. return new Root($manager, $view, $user);
  70. });
  71. $this->registerService('UserManager', function($c) {
  72. /**
  73. * @var SimpleContainer $c
  74. * @var \OC\AllConfig $config
  75. */
  76. $config = $c->query('AllConfig');
  77. return new \OC\User\Manager($config);
  78. });
  79. $this->registerService('UserSession', function($c) {
  80. /**
  81. * @var SimpleContainer $c
  82. * @var \OC\User\Manager $manager
  83. */
  84. $manager = $c->query('UserManager');
  85. $userSession = new \OC\User\Session($manager, \OC::$session);
  86. $userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) {
  87. \OC_Hook::emit('OC_User', 'pre_createUser', array('run' => true, 'uid' => $uid, 'password' => $password));
  88. });
  89. $userSession->listen('\OC\User', 'postCreateUser', function ($user, $password) {
  90. /** @var $user \OC\User\User */
  91. \OC_Hook::emit('OC_User', 'post_createUser', array('uid' => $user->getUID(), 'password' => $password));
  92. });
  93. $userSession->listen('\OC\User', 'preDelete', function ($user) {
  94. /** @var $user \OC\User\User */
  95. \OC_Hook::emit('OC_User', 'pre_deleteUser', array('run' => true, 'uid' => $user->getUID()));
  96. });
  97. $userSession->listen('\OC\User', 'postDelete', function ($user) {
  98. /** @var $user \OC\User\User */
  99. \OC_Hook::emit('OC_User', 'post_deleteUser', array('uid' => $user->getUID()));
  100. });
  101. $userSession->listen('\OC\User', 'preSetPassword', function ($user, $password, $recoveryPassword) {
  102. /** @var $user \OC\User\User */
  103. \OC_Hook::emit('OC_User', 'pre_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword));
  104. });
  105. $userSession->listen('\OC\User', 'postSetPassword', function ($user, $password, $recoveryPassword) {
  106. /** @var $user \OC\User\User */
  107. \OC_Hook::emit('OC_User', 'post_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword));
  108. });
  109. $userSession->listen('\OC\User', 'preLogin', function ($uid, $password) {
  110. \OC_Hook::emit('OC_User', 'pre_login', array('run' => true, 'uid' => $uid, 'password' => $password));
  111. });
  112. $userSession->listen('\OC\User', 'postLogin', function ($user, $password) {
  113. /** @var $user \OC\User\User */
  114. \OC_Hook::emit('OC_User', 'post_login', array('run' => true, 'uid' => $user->getUID(), 'password' => $password));
  115. });
  116. $userSession->listen('\OC\User', 'logout', function () {
  117. \OC_Hook::emit('OC_User', 'logout', array());
  118. });
  119. return $userSession;
  120. });
  121. $this->registerService('NavigationManager', function($c) {
  122. return new \OC\NavigationManager();
  123. });
  124. $this->registerService('AllConfig', function($c) {
  125. return new \OC\AllConfig();
  126. });
  127. $this->registerService('AppConfig', function ($c) {
  128. return new \OC\AppConfig(\OC_DB::getConnection());
  129. });
  130. $this->registerService('L10NFactory', function($c) {
  131. return new \OC\L10N\Factory();
  132. });
  133. $this->registerService('URLGenerator', function($c) {
  134. /** @var $c SimpleContainer */
  135. $config = $c->query('AllConfig');
  136. return new \OC\URLGenerator($config);
  137. });
  138. $this->registerService('AppHelper', function($c) {
  139. return new \OC\AppHelper();
  140. });
  141. $this->registerService('UserCache', function($c) {
  142. return new UserCache();
  143. });
  144. $this->registerService('MemCacheFactory', function ($c) {
  145. $instanceId = \OC_Util::getInstanceId();
  146. return new \OC\Memcache\Factory($instanceId);
  147. });
  148. $this->registerService('ActivityManager', function($c) {
  149. return new ActivityManager();
  150. });
  151. $this->registerService('AvatarManager', function($c) {
  152. return new AvatarManager();
  153. });
  154. $this->registerService('JobList', function ($c) {
  155. /**
  156. * @var Server $c
  157. */
  158. $config = $c->getConfig();
  159. return new \OC\BackgroundJob\JobList($c->getDatabaseConnection(), $config);
  160. });
  161. $this->registerService('Router', function ($c){
  162. /**
  163. * @var Server $c
  164. */
  165. $cacheFactory = $c->getMemCacheFactory();
  166. if ($cacheFactory->isAvailable()) {
  167. $router = new \OC\Route\CachingRouter($cacheFactory->create('route'));
  168. } else {
  169. $router = new \OC\Route\Router();
  170. }
  171. return $router;
  172. });
  173. }
  174. /**
  175. * @return \OCP\Contacts\IManager
  176. */
  177. function getContactsManager() {
  178. return $this->query('ContactsManager');
  179. }
  180. /**
  181. * The current request object holding all information about the request
  182. * currently being processed is returned from this method.
  183. * In case the current execution was not initiated by a web request null is returned
  184. *
  185. * @return \OCP\IRequest|null
  186. */
  187. function getRequest() {
  188. return $this->query('Request');
  189. }
  190. /**
  191. * Returns the preview manager which can create preview images for a given file
  192. *
  193. * @return \OCP\IPreview
  194. */
  195. function getPreviewManager() {
  196. return $this->query('PreviewManager');
  197. }
  198. /**
  199. * Returns the tag manager which can get and set tags for different object types
  200. *
  201. * @see \OCP\ITagManager::load()
  202. * @return \OCP\ITagManager
  203. */
  204. function getTagManager() {
  205. return $this->query('TagManager');
  206. }
  207. /**
  208. * Returns the avatar manager, used for avatar functionality
  209. *
  210. * @return \OCP\IAvatarManager
  211. */
  212. function getAvatarManager() {
  213. return $this->query('AvatarManager');
  214. }
  215. /**
  216. * Returns the root folder of ownCloud's data directory
  217. *
  218. * @return \OCP\Files\Folder
  219. */
  220. function getRootFolder() {
  221. return $this->query('RootFolder');
  222. }
  223. /**
  224. * Returns a view to ownCloud's files folder
  225. *
  226. * @return \OCP\Files\Folder
  227. */
  228. function getUserFolder() {
  229. $dir = '/files';
  230. $root = $this->getRootFolder();
  231. $folder = null;
  232. if(!$root->nodeExists($dir)) {
  233. $folder = $root->newFolder($dir);
  234. } else {
  235. $folder = $root->get($dir);
  236. }
  237. return $folder;
  238. }
  239. /**
  240. * Returns an app-specific view in ownClouds data directory
  241. *
  242. * @return \OCP\Files\Folder
  243. */
  244. function getAppFolder() {
  245. $dir = '/' . \OC_App::getCurrentApp();
  246. $root = $this->getRootFolder();
  247. $folder = null;
  248. if(!$root->nodeExists($dir)) {
  249. $folder = $root->newFolder($dir);
  250. } else {
  251. $folder = $root->get($dir);
  252. }
  253. return $folder;
  254. }
  255. /**
  256. * @return \OC\User\Manager
  257. */
  258. function getUserManager() {
  259. return $this->query('UserManager');
  260. }
  261. /**
  262. * @return \OC\User\Session
  263. */
  264. function getUserSession() {
  265. return $this->query('UserSession');
  266. }
  267. /**
  268. * @return \OC\NavigationManager
  269. */
  270. function getNavigationManager() {
  271. return $this->query('NavigationManager');
  272. }
  273. /**
  274. * @return \OCP\IConfig
  275. */
  276. function getConfig() {
  277. return $this->query('AllConfig');
  278. }
  279. /**
  280. * Returns the app config manager
  281. *
  282. * @return \OCP\IAppConfig
  283. */
  284. function getAppConfig(){
  285. return $this->query('AppConfig');
  286. }
  287. /**
  288. * get an L10N instance
  289. * @param string $app appid
  290. * @return \OC_L10N
  291. */
  292. function getL10N($app) {
  293. return $this->query('L10NFactory')->get($app);
  294. }
  295. /**
  296. * @return \OC\URLGenerator
  297. */
  298. function getURLGenerator() {
  299. return $this->query('URLGenerator');
  300. }
  301. /**
  302. * @return \OC\Helper
  303. */
  304. function getHelper() {
  305. return $this->query('AppHelper');
  306. }
  307. /**
  308. * Returns an ICache instance
  309. *
  310. * @return \OCP\ICache
  311. */
  312. function getCache() {
  313. return $this->query('UserCache');
  314. }
  315. /**
  316. * Returns an \OCP\CacheFactory instance
  317. *
  318. * @return \OCP\ICacheFactory
  319. */
  320. function getMemCacheFactory() {
  321. return $this->query('MemCacheFactory');
  322. }
  323. /**
  324. * Returns the current session
  325. *
  326. * @return \OCP\ISession
  327. */
  328. function getSession() {
  329. return \OC::$session;
  330. }
  331. /**
  332. * Returns the current session
  333. *
  334. * @return \OCP\IDBConnection
  335. */
  336. function getDatabaseConnection() {
  337. return new ConnectionWrapper(\OC_DB::getConnection());
  338. }
  339. /**
  340. * Returns the activity manager
  341. *
  342. * @return \OCP\Activity\IManager
  343. */
  344. function getActivityManager() {
  345. return $this->query('ActivityManager');
  346. }
  347. /**
  348. * Returns an job list for controlling background jobs
  349. *
  350. * @return \OCP\BackgroundJob\IJobList
  351. */
  352. function getJobList(){
  353. return $this->query('JobList');
  354. }
  355. /**
  356. * Returns a router for generating and matching urls
  357. *
  358. * @return \OCP\Route\IRouter
  359. */
  360. function getRouter(){
  361. return $this->query('Router');
  362. }
  363. }