System.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. namespace App\Classes\Settings;
  3. use App\Classes\Pterodactyl;
  4. use App\Models\Settings;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Cache;
  7. use Illuminate\Support\Facades\Validator;
  8. use Qirolab\Theme\Theme;
  9. class System
  10. {
  11. public function __construct()
  12. {
  13. }
  14. public function checkPteroClientkey()
  15. {
  16. $response = Pterodactyl::getClientUser();
  17. if ($response->failed()) {
  18. return redirect()->back()->with('error', __('Your Key or URL is not correct'));
  19. }
  20. return redirect()->back()->with('success', __('Everything is good!'));
  21. }
  22. public function updateSettings(Request $request)
  23. {
  24. $validator = Validator::make($request->all(), [
  25. 'register-ip-check' => 'string',
  26. 'server-create-charge-first-hour' => 'string',
  27. 'credits-display-name' => 'required|string',
  28. 'allocation-limit' => 'required|min:0|integer',
  29. 'force-email-verification' => 'string',
  30. 'force-discord-verification' => 'string',
  31. 'initial-credits' => 'required|min:0|integer',
  32. 'initial-server-limit' => 'required|min:0|integer',
  33. 'credits-reward-amount-discord' => 'required|min:0|integer',
  34. 'credits-reward-amount-email' => 'required|min:0|integer',
  35. 'server-limit-discord' => 'required|min:0|integer',
  36. 'server-limit-email' => 'required|min:0|integer',
  37. 'server-limit-purchase' => 'required|min:0|integer',
  38. 'pterodactyl-api-key' => 'required|string',
  39. 'pterodactyl-url' => 'required|string',
  40. 'per-page-limit' => 'required|min:0|integer',
  41. 'pterodactyl-admin-api-key' => 'required|string',
  42. 'enable-upgrades' => 'string',
  43. 'enable-disable-servers' => 'string',
  44. 'enable-disable-new-users' => 'string',
  45. 'show-imprint' => 'string',
  46. 'show-privacy' => 'string',
  47. 'show-tos' => 'string',
  48. 'alert-enabled' => 'string',
  49. 'alter-type' => 'string',
  50. 'alert-message' => 'string|nullable',
  51. 'motd-enabled' => 'string',
  52. 'usefullinks-enabled' => 'string',
  53. 'motd-message' => 'string|nullable',
  54. 'seo-title' => 'string|nullable',
  55. 'seo-description' => 'string|nullable',
  56. ]);
  57. $validator->after(function ($validator) use ($request) {
  58. // if enable-recaptcha is true then recaptcha-site-key and recaptcha-secret-key must be set
  59. if ($request->get('enable-upgrades') == 'true' && (! $request->get('pterodactyl-admin-api-key'))) {
  60. $validator->errors()->add('pterodactyl-admin-api-key', 'The admin api key is required when upgrades are enabled.');
  61. }
  62. });
  63. if ($validator->fails()) {
  64. return redirect(route('admin.settings.index').'#system')->with('error', __('System settings have not been updated!'))->withErrors($validator)
  65. ->withInput();
  66. }
  67. // update Icons from request
  68. $this->updateIcons($request);
  69. $values = [
  70. "SETTINGS::SYSTEM:REGISTER_IP_CHECK" => "register-ip-check",
  71. "SETTINGS::SYSTEM:SERVER_CREATE_CHARGE_FIRST_HOUR" => "server-create-charge-first-hour",
  72. "SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME" => "credits-display-name",
  73. "SETTINGS::SERVER:ALLOCATION_LIMIT" => "allocation-limit",
  74. "SETTINGS::USER:MINIMUM_REQUIRED_CREDITS_TO_MAKE_SERVER" => "minimum-credits",
  75. "SETTINGS::USER:FORCE_DISCORD_VERIFICATION" => "force-discord-verification",
  76. "SETTINGS::USER:FORCE_EMAIL_VERIFICATION" => "force-email-verification",
  77. "SETTINGS::USER:INITIAL_CREDITS" => "initial-credits",
  78. "SETTINGS::USER:INITIAL_SERVER_LIMIT" => "initial-server-limit",
  79. "SETTINGS::USER:CREDITS_REWARD_AFTER_VERIFY_DISCORD" => "credits-reward-amount-discord",
  80. "SETTINGS::USER:CREDITS_REWARD_AFTER_VERIFY_EMAIL" => "credits-reward-amount-email",
  81. "SETTINGS::USER:SERVER_LIMIT_REWARD_AFTER_VERIFY_DISCORD" => "server-limit-discord",
  82. "SETTINGS::USER:SERVER_LIMIT_REWARD_AFTER_VERIFY_EMAIL" => "server-limit-email",
  83. "SETTINGS::USER:SERVER_LIMIT_AFTER_IRL_PURCHASE" => "server-limit-purchase",
  84. "SETTINGS::MISC:PHPMYADMIN:URL" => "phpmyadmin-url",
  85. "SETTINGS::SYSTEM:PTERODACTYL:URL" => "pterodactyl-url",
  86. 'SETTINGS::SYSTEM:PTERODACTYL:PER_PAGE_LIMIT' => "per-page-limit",
  87. "SETTINGS::SYSTEM:PTERODACTYL:TOKEN" => "pterodactyl-api-key",
  88. "SETTINGS::SYSTEM:ENABLE_LOGIN_LOGO" => "enable-login-logo",
  89. "SETTINGS::SYSTEM:PTERODACTYL:ADMIN_USER_TOKEN" => "pterodactyl-admin-api-key",
  90. "SETTINGS::SYSTEM:ENABLE_UPGRADE" => "enable-upgrade",
  91. "SETTINGS::SYSTEM:CREATION_OF_NEW_SERVERS" => "enable-disable-servers",
  92. "SETTINGS::SYSTEM:CREATION_OF_NEW_USERS" => "enable-disable-new-users",
  93. "SETTINGS::SYSTEM:SHOW_IMPRINT" => "show-imprint",
  94. "SETTINGS::SYSTEM:SHOW_PRIVACY" => "show-privacy",
  95. "SETTINGS::SYSTEM:SHOW_TOS" => "show-tos",
  96. "SETTINGS::SYSTEM:ALERT_ENABLED" => "alert-enabled",
  97. "SETTINGS::SYSTEM:ALERT_TYPE" => "alert-type",
  98. "SETTINGS::SYSTEM:ALERT_MESSAGE" => "alert-message",
  99. "SETTINGS::SYSTEM:THEME" => "theme",
  100. "SETTINGS::SYSTEM:MOTD_ENABLED" => "motd-enabled",
  101. "SETTINGS::SYSTEM:MOTD_MESSAGE" => "motd-message",
  102. "SETTINGS::SYSTEM:USEFULLINKS_ENABLED" => "usefullinks-enabled",
  103. "SETTINGS::SYSTEM:SEO_TITLE" => "seo-title",
  104. "SETTINGS::SYSTEM:SEO_DESCRIPTION" => "seo-description",
  105. ];
  106. foreach ($values as $key => $value) {
  107. $param = $request->get($value);
  108. Settings::where('key', $key)->updateOrCreate(['key' => $key], ['value' => $param]);
  109. Cache::forget('setting'.':'.$key);
  110. }
  111. //SET THEME
  112. $theme = $request->get('theme');
  113. Theme::set($theme);
  114. return redirect(route('admin.settings.index').'#system')->with('success', __('System settings updated!'));
  115. }
  116. private function updateIcons(Request $request)
  117. {
  118. $request->validate([
  119. 'icon' => 'nullable|max:10000|mimes:jpg,png,jpeg',
  120. 'logo' => 'nullable|max:10000|mimes:jpg,png,jpeg',
  121. 'favicon' => 'nullable|max:10000|mimes:ico',
  122. ]);
  123. if ($request->hasFile('icon')) {
  124. $request->file('icon')->storeAs('public', 'icon.png');
  125. }
  126. if ($request->hasFile('logo')) {
  127. $request->file('logo')->storeAs('public', 'logo.png');
  128. }
  129. if ($request->hasFile('favicon')) {
  130. $request->file('favicon')->storeAs('public', 'favicon.ico');
  131. }
  132. }
  133. }