public function postEdit($id, $password = null)
 {
     $logged_in = false;
     $server_user = false;
     if (Auth::check()) {
         $logged_in = true;
     }
     $server = Server::find($id);
     if (!$server) {
         return Redirect::action('ServerController@getServers');
     }
     if ($server->user_id == 0) {
         $server_user = $server->serverUser;
         if (!Hash::check($password, $server_user->edit_password)) {
             return Redirect::route('index');
         }
     } else {
         if (!Auth::check()) {
             return Redirect::to(action('UserController@getLogin') . '?return=server/edit/' . $id);
         }
         if (Auth::id() != $server->user_id && !$this->checkRoute()) {
             return Redirect::route('index');
         }
     }
     $versions = MinecraftVersion::all();
     $title = 'Edit Server - ' . $this->site_name;
     $countries = Server::countryList();
     $permissions = [1 => 'Whitelist', 2 => 'Greylist', 3 => 'Open'];
     $input = Input::only('name', 'modpack', 'email', 'deck', 'website', 'application_url', 'description', 'slug', 'server_address_hide', 'player_list_hide', 'motd_hide', 'server_address', 'selected_tags', 'country', 'permissions', 'last_world_reset', 'next_world_reset', 'active', 'email_alerts');
     $modpack = Modpack::find($input['modpack']);
     $modpack_version = $modpack->version->name;
     if (preg_match('/:/', $input['server_address'])) {
         $exploded_hostname = explode(':', $input['server_address']);
         $server_host = $exploded_hostname[0];
         $server_port = $exploded_hostname[1];
     } else {
         $server_host = $input['server_address'];
         $server_port = 25565;
     }
     $input['server_host'] = $server_host;
     $server_info = Server::check($server_host, $server_port, $modpack_version);
     $validator_messages = ['name.unique' => 'A server with this name already exists in the database.', 'server_host.unique' => 'A server with this address already exists in the database.', 'country.not_in' => 'The country field is required.', 'deck.required' => 'The short description field is required.', 'deck.max' => 'The short description may not be greater than 255 characters.', 'url' => 'The :attribute field is not a valid URL.'];
     $validator_rules = ['name' => 'required|unique:servers,name,' . $server->id, 'server_host' => 'required|unique:servers,ip_host,' . $server->id . ',id,port,' . $server_port, 'deck' => 'required|max:255', 'website' => 'url', 'application_url' => 'url', 'selected_tags' => 'required', 'country' => 'required|not_in:choose,separator1,separator2', 'permissions' => 'required', 'last_world_reset' => 'date_format:Y-m-d', 'next_world_reset' => 'date_format:Y-m-d'];
     if (!$logged_in) {
         $validator_rules['email'] = 'required|email';
     }
     $validator = Validator::make($input, $validator_rules, $validator_messages);
     if (!$server_info) {
         $validator->fails();
         //manually fail the validator since we can't reach the server
         $validator->getMessageBag()->add('server_address', 'Unable to reach server.');
         if (!$logged_in) {
             return Redirect::action('ServerController@getEdit', [$id, $password])->withErrors($validator)->withInput();
         }
         return Redirect::action('ServerController@getEdit', [$id])->withErrors($validator)->withInput();
     } elseif ($validator->fails()) {
         if (!$logged_in) {
             return Redirect::action('ServerController@getEdit', [$id, $password])->withErrors($validator)->withInput();
         }
         return Redirect::action('ServerController@getEdit', [$id])->withErrors($validator)->withInput();
     }
     $server->modpack_id = $modpack->id;
     $server->user_id = Auth::id();
     $server->minecraft_version_id = $modpack->minecraft_version_id;
     $server->name = $input['name'];
     $server->ip_host = $server_host;
     $server->port = $server_port;
     $server->deck = $input['deck'];
     $server->country = $input['country'];
     $server->permissions = $input['permissions'];
     $server->website = $input['website'];
     $server->application_url = $input['application_url'];
     $server->description = $input['description'];
     $server->last_world_reset = $input['last_world_reset'];
     $server->next_world_reset = $input['next_world_reset'];
     $server->last_check = Carbon\Carbon::now()->toDateTimeString();
     $server->active = 0;
     if ($input['active'] == 1) {
         $server->active = 1;
     }
     $server->email_alerts = 0;
     if ($input['email_alerts'] == 1) {
         $server->email_alerts = 1;
     }
     $server->server_address_hide = 0;
     if ($input['server_address_hide'] == 1) {
         $server->server_address_hide = 1;
     }
     $server->player_list_hide = 0;
     if ($input['player_list_hide'] == 1) {
         $server->player_list_hide = 1;
     }
     $server->motd_hide = 0;
     if ($input['motd_hide'] == 1) {
         $server->motd_hide = 1;
     }
     if ($input['slug'] == '') {
         $slug = Str::slug($input['name']);
     } else {
         $slug = $input['slug'];
     }
     $server->slug = $slug;
     $server->last_ip = Request::getClientIp();
     $success = $server->save();
     if ($success) {
         foreach ($server->tags as $t) {
             $server->tags()->detach($t->id);
         }
         $server->tags()->attach($input['selected_tags']);
         $server_status = ServerStatus::where('server_id', $server->id)->first();
         $server_status->server_id = $server->id;
         if (isset($server_info['players']['online'])) {
             $server_status->current_players = $server_info['players']['online'];
         } elseif (isset($server_info['Players'])) {
             $server_status->current_players = $server_info['Players'];
         }
         if (isset($server_info['players']['max'])) {
             $server_status->max_players = $server_info['players']['max'];
         } elseif (isset($server_info['MaxPlayers'])) {
             $server_status->max_players = $server_info['MaxPlayers'];
         }
         $server_status->last_success = Carbon\Carbon::now()->toDateTimeString();
         if (isset($server_info['modinfo'])) {
             $server_status->mods = json_encode($server_info['modinfo']);
         }
         if (isset($server_info['players']['sample'])) {
             $server_status->players = json_encode($server_info['players']['sample']);
         }
         $success = $server_status->save();
         if ($success) {
             if (!$logged_in) {
                 $server_user = ServerUser::where('server_id', $server->id)->first();
                 $server_user->email = $input['email'];
                 $server_user->last_ip = Request::getClientIp();
             }
             $updated_server = Server::find($id);
             foreach ($updated_server->tags as $t) {
                 $selected_tags[] = $t->id;
             }
             if ($updated_server->last_world_reset == '0000-00-00') {
                 $updated_server->last_world_reset = null;
             }
             if ($updated_server->next_world_reset == '0000-00-00') {
                 $updated_server->next_world_reset = null;
             }
             return View::make('servers.edit', ['chosen' => true, 'versions' => $versions, 'countries' => $countries, 'permissions' => $permissions, 'title' => $title, 'server' => $updated_server, 'server_user' => $server_user, 'password' => $password, 'selected_tags' => $selected_tags, 'success' => true, 'datepicker' => true]);
         }
         if (!$logged_in) {
             return Redirect::action('ServerController@getEdit', [$id, $password])->withErrors(['message' => 'Unable to edit server.'])->withInput();
         }
         return Redirect::action('ServerController@getEdit', [$id])->withErrors(['message' => 'Unable to edit server.'])->withInput();
     }
     if (!$logged_in) {
         return Redirect::action('ServerController@getEdit', [$id, $password])->withErrors(['message' => 'Unable to edit server.'])->withInput();
     }
     return Redirect::action('ServerController@getEdit', [$id])->withErrors(['message' => 'Unable to edit server.'])->withInput();
 }
示例#2
0
 public function getServer($id)
 {
     $players_array = [];
     $mods_array = [];
     $server = Server::find($id);
     if (!$server) {
         return Response::json(['error' => 'No mod with that ID found.']);
     }
     $server_status = ServerStatus::where('server_id', $id)->first();
     if (!$server->player_list_hide) {
         $raw_players = json_decode($server_status->players);
         if ($raw_players) {
             foreach ($raw_players as $player) {
                 $players_array[] = ['name' => preg_replace('/\\x{00A7}.{1}/u', '', $player->name)];
             }
         }
     }
     if ($server_status->mods) {
         $raw_mods = json_decode($server_status->mods);
         foreach ($raw_mods->modList as $mod) {
             $mods_array[] = ['name' => htmlspecialchars($mod->modid), 'version' => $mod->version];
         }
     }
     if ($server->server_address_hide) {
         $server_address = 'Hidden';
     } else {
         $server_address = $server->ip_host . ':' . $server->port;
     }
     $result = ['id' => $server->id, 'modpack_id' => $server->modpack_id, 'name' => $server->name, 'short_description' => $server->deck, 'server_address' => $server_address, 'country' => $server->country, 'permissions' => $server->permissions, 'website' => $server->wiki_link, 'application_url' => $server->description, 'description' => $server->slug, 'players' => $players_array, 'mods' => $mods_array, 'server_address_hide' => $server->server_address_hide, 'player_list_hide' => $server->player_list_hide, 'slug' => $server->slug, 'last_world_reset' => $server->last_world_reset, 'next_world_reset' => $server->next_world_reset, 'created_at' => $server->created_at, 'updated_at' => $server->updated_at];
     return Response::json($result);
 }
示例#3
0
 public function fire($job, $data)
 {
     Config::set('services.mandrill.secret', 'J3gPgh8LNHx4Paw-a7j26g');
     //since we are outside of nginx, no env variables
     $cache_key = 'server-update-version-cache';
     if (Cache::has($cache_key)) {
         $versions = Cache::get($cache_key);
     } else {
         $versions = [];
         $raw_versions = MinecraftVersion::select('id', 'name')->get();
         foreach ($raw_versions as $v) {
             $key = $v->id;
             $versions[$key] = $v->name;
         }
         Cache::put($cache_key, $versions, 60);
     }
     $server = Server::find($data['server_id']);
     $server_status = ServerStatus::where('server_id', $server->id)->first();
     $server_version_id = $server->minecraft_version_id;
     $version = $versions[$server_version_id];
     $server_query = Server::check($server->ip_host, $server->port, $version);
     $current_timestamp = Carbon\Carbon::now()->toDateTimeString();
     if ($server_query) {
         if (isset($server_query['players']['online'])) {
             $server_status->current_players = $server_query['players']['online'];
         } elseif (isset($server_query['Players'])) {
             $server_status->current_players = $server_query['Players'];
         }
         if (isset($server_query['players']['max'])) {
             $server_status->max_players = $server_query['players']['max'];
         } elseif (isset($server_query['MaxPlayers'])) {
             $server_status->max_players = $server_query['MaxPlayers'];
         }
         if (isset($server_query['modinfo'])) {
             $server_status->mods = json_encode($server_query['modinfo']);
         }
         if (isset($server_query['players']['sample'])) {
             $server_status->players = json_encode($server_query['players']['sample']);
         }
         $server_status->failed_attempts = 0;
         $server_status->failed_checks = 0;
         $server_status->last_success = $current_timestamp;
     } else {
         $server_status->failed_attempts = $server_status->failed_attempts + 1;
         $server_status->last_failure = $current_timestamp;
         if ($server_status->failed_attempts >= Config::get('app.server_failed_attempts')) {
             $server_status->failed_checks = $server_status->failed_checks + 1;
             $server_status->total_failed_checks = $server_status->total_failed_checks + 1;
             $server_status->failed_attempts = 0;
         }
         if ($server_status->failed_checks >= Config::get('app.server_failed_disable')) {
             $server->active = 0;
             $server_status->current_players = 0;
             $server_status->max_players = 0;
             if ($server->email_alerts) {
                 $message_array = ['server_name' => $server->name, 'user' => $server->user];
                 Mail::send('emails.disabled_server', array('server' => $server, 'site_url' => Config::get('app.url')), function ($message) use($message_array) {
                     $message->from('*****@*****.**', 'Modpack Index');
                     $message->to($message_array['user']->email, $message_array['user']->username)->subject('Server Deactivated: ' . $message_array['server_name']);
                 });
             }
         }
     }
     $server_status->total_checks = $server_status->total_checks + 1;
     $server_status->last_check = $current_timestamp;
     $server_status->save();
     $server->queued = 0;
     $server->last_check = $current_timestamp;
     $server->save();
     $job->delete();
 }