BioTorrents.de’s version of Gazelle
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.

index.php 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. <?php
  2. declare(strict_types = 1);
  3. /**
  4. * AJAX Switch Center
  5. *
  6. * This page acts as an AJAX "switch" - it's called by scripts, and it includes the required pages.
  7. * The required page is determined by $_GET['action'].
  8. */
  9. # $_POST login cookie
  10. if (!isset($FullToken)) {
  11. enforce_login();
  12. }
  13. /**
  14. * These users aren't rate limited.
  15. * This array should contain user IDs.
  16. */
  17. # Get people with Donor permissions
  18. $Donors = $DB->query("
  19. SELECT
  20. `ID`
  21. FROM
  22. `users_main`
  23. WHERE
  24. `PermissionID` = 20
  25. ");
  26. # Add Donors to $UserExceptions or define manually
  27. if ($DB->record_count()) {
  28. $UserExceptions = array_unique($DB->collect('ID'));
  29. } else {
  30. $UserExceptions = array(
  31. # 1, 2, 3, etc.
  32. );
  33. }
  34. # System and admin fix
  35. array_push($UserExceptions, 0, 1);
  36. /**
  37. * AJAX_LIMIT = array($x, $y) = $x requests every $y seconds,
  38. * e.g., array(5, 10) = 5 requests every 10 seconds.
  39. */
  40. $AJAX_LIMIT = array(1, 6);
  41. $UserID = $LoggedUser['ID'];
  42. # Set proper headers for JSON output
  43. # https://github.com/OPSnet/Gazelle/blob/master/sections/ajax/index.php
  44. if (!empty($_SERVER['CONTENT_TYPE']) && substr($_SERVER['CONTENT_TYPE'], 0, 16) === 'application/json') {
  45. $_POST = json_decode(file_get_contents('php://input'), true);
  46. }
  47. header('Content-Type: application/json; charset=utf-8');
  48. # Enforce rate limiting everywhere
  49. if (!in_array($UserID, $UserExceptions) && isset($_GET['action'])) {
  50. if (!$UserRequests = $Cache->get_value("ajax_requests_$UserID")) {
  51. $UserRequests = 0;
  52. $Cache->cache_value("ajax_requests_$UserID", '0', $AJAX_LIMIT[1]);
  53. }
  54. if ($UserRequests > $AJAX_LIMIT[0]) {
  55. json_die('failure', 'rate limit exceeded');
  56. } else {
  57. $Cache->increment_value("ajax_requests_$UserID");
  58. }
  59. }
  60. /**
  61. * Actions
  62. */
  63. switch ($_GET['action']) {
  64. /**
  65. * Torrents
  66. */
  67. case 'torrent':
  68. require 'torrents/torrent.php';
  69. break;
  70. case 'group':
  71. require 'torrents/group.php';
  72. break;
  73. // So the album art script can function without breaking the rate limit
  74. case 'torrentgroupalbumart':
  75. require SERVER_ROOT.'/sections/ajax/torrentgroupalbumart.php';
  76. break;
  77. case 'browse':
  78. require SERVER_ROOT.'/sections/ajax/browse.php';
  79. break;
  80. case 'tcomments':
  81. require SERVER_ROOT.'/sections/ajax/tcomments.php';
  82. break;
  83. /**
  84. * Features
  85. */
  86. case 'collage':
  87. require SERVER_ROOT.'/sections/ajax/collage.php';
  88. break;
  89. case 'artist':
  90. require SERVER_ROOT.'/sections/ajax/artist.php';
  91. break;
  92. case 'request':
  93. require SERVER_ROOT.'/sections/ajax/request.php';
  94. break;
  95. case 'requests':
  96. require SERVER_ROOT.'/sections/ajax/requests.php';
  97. break;
  98. case 'top10':
  99. require SERVER_ROOT.'/sections/ajax/top10/index.php';
  100. break;
  101. /**
  102. * Users
  103. */
  104. case 'user':
  105. require SERVER_ROOT.'/sections/ajax/user.php';
  106. break;
  107. case 'usersearch':
  108. require SERVER_ROOT.'/sections/ajax/usersearch.php';
  109. break;
  110. case 'community_stats':
  111. require SERVER_ROOT.'/sections/ajax/community_stats.php';
  112. break;
  113. case 'user_recents':
  114. require SERVER_ROOT.'/sections/ajax/user_recents.php';
  115. break;
  116. case 'userhistory':
  117. require SERVER_ROOT.'/sections/ajax/userhistory/index.php';
  118. break;
  119. /**
  120. * Account
  121. */
  122. case 'inbox':
  123. require SERVER_ROOT.'/sections/ajax/inbox/index.php';
  124. break;
  125. case 'bookmarks':
  126. require SERVER_ROOT.'/sections/ajax/bookmarks/index.php';
  127. break;
  128. case 'notifications':
  129. require SERVER_ROOT.'/sections/ajax/notifications.php';
  130. break;
  131. case 'get_user_notifications':
  132. require SERVER_ROOT.'/sections/ajax/get_user_notifications.php';
  133. break;
  134. case 'clear_user_notification':
  135. require SERVER_ROOT.'/sections/ajax/clear_user_notification.php';
  136. break;
  137. /**
  138. * Forums
  139. */
  140. case 'forum':
  141. require SERVER_ROOT.'/sections/ajax/forum/index.php';
  142. break;
  143. case 'subscriptions':
  144. require SERVER_ROOT.'/sections/ajax/subscriptions.php';
  145. break;
  146. case 'raw_bbcode':
  147. require SERVER_ROOT.'/sections/ajax/raw_bbcode.php';
  148. break;
  149. /**
  150. * Meta
  151. */
  152. case 'index':
  153. require SERVER_ROOT.'/sections/ajax/info.php';
  154. break;
  155. case 'manifest':
  156. require SERVER_ROOT.'/manifest.php';
  157. json_die('success', manifest());
  158. break;
  159. case 'stats':
  160. require SERVER_ROOT.'/sections/ajax/stats.php';
  161. break;
  162. case 'loadavg':
  163. require SERVER_ROOT.'/sections/ajax/loadavg.php';
  164. break;
  165. case 'announcements':
  166. require SERVER_ROOT.'/sections/ajax/announcements.php';
  167. break;
  168. case 'wiki':
  169. require SERVER_ROOT.'/sections/ajax/wiki.php';
  170. break;
  171. case 'ontology':
  172. require SERVER_ROOT.'/sections/ajax/ontology.php';
  173. break;
  174. /**
  175. * Under construction
  176. */
  177. case 'preview':
  178. require 'preview.php';
  179. break;
  180. case 'better':
  181. require SERVER_ROOT.'/sections/ajax/better/index.php';
  182. break;
  183. case 'get_friends':
  184. require SERVER_ROOT.'/sections/ajax/get_friends.php';
  185. break;
  186. case 'news_ajax':
  187. require SERVER_ROOT.'/sections/ajax/news_ajax.php';
  188. break;
  189. case 'send_recommendation':
  190. require SERVER_ROOT.'/sections/ajax/send_recommendation.php';
  191. break;
  192. /*
  193. case 'similar_artists':
  194. require SERVER_ROOT.'/sections/ajax/similar_artists.php';
  195. break;
  196. */
  197. /*
  198. case 'votefavorite':
  199. require SERVER_ROOT.'/sections/ajax/takevote.php';
  200. break;
  201. */
  202. /*
  203. case 'torrent_info':
  204. require 'torrent_info.php';
  205. break;
  206. */
  207. /*
  208. case 'checkprivate':
  209. include 'checkprivate.php';
  210. break;
  211. */
  212. case 'autofill':
  213. /*
  214. if ($_GET['cat'] === 'anime') {
  215. require SERVER_ROOT.'/sections/ajax/autofill/anime.php';
  216. }
  217. if ($_GET['cat'] === 'jav') {
  218. require SERVER_ROOT.'/sections/ajax/autofill/jav.php';
  219. }
  220. if ($_GET['cat'] === 'manga') {
  221. require SERVER_ROOT.'/sections/ajax/autofill/manga.php';
  222. }
  223. */
  224. break;
  225. default:
  226. // If they're screwing around with the query string
  227. json_die('failure');
  228. }