diff --git a/src/network/network.cpp b/src/network/network.cpp index 21f416d563..6a7fce2559 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -830,6 +830,30 @@ void Network::SaveGroups() } } +void Network::SetupDefaultGroups() +{ + std::unique_ptr admin(new NetworkGroup()); // change to make_unique in c++14 + admin->SetName("Admin"); + admin->ActionsAllowed.fill(0xFF); + admin->Id = 0; + group_list.push_back(std::move(admin)); + std::unique_ptr spectator(new NetworkGroup()); // change to make_unique in c++14 + spectator->SetName("Spectator"); + spectator->ToggleActionPermission(0); // Chat + spectator->Id = 1; + group_list.push_back(std::move(spectator)); + std::unique_ptr user(new NetworkGroup()); // change to make_unique in c++14 + user->SetName("User"); + user->ActionsAllowed.fill(0xFF); + user->ToggleActionPermission(15); // Kick Player + user->ToggleActionPermission(16); // Modify Groups + user->ToggleActionPermission(17); // Set Player Group + user->ToggleActionPermission(18); // Cheat + user->Id = 2; + group_list.push_back(std::move(user)); + SetDefaultGroup(1); +} + void Network::LoadGroups() { group_list.clear(); @@ -839,33 +863,16 @@ void Network::LoadGroups() platform_get_user_directory(path, NULL); strcat(path, "groups.json"); - if (!platform_file_exists(path)) { + json_t * json = nullptr; + try { + json = Json::ReadFromFile(path); + } catch (const Exception& e) { + log_error("Failed to read %s as JSON. Setting default groups. %s", path, e.GetMsg()); // Hardcoded permission groups - std::unique_ptr admin(new NetworkGroup()); // change to make_unique in c++14 - admin->SetName("Admin"); - admin->ActionsAllowed.fill(0xFF); - admin->Id = 0; - group_list.push_back(std::move(admin)); - std::unique_ptr spectator(new NetworkGroup()); // change to make_unique in c++14 - spectator->SetName("Spectator"); - spectator->ToggleActionPermission(0); // Chat - spectator->Id = 1; - group_list.push_back(std::move(spectator)); - std::unique_ptr user(new NetworkGroup()); // change to make_unique in c++14 - user->SetName("User"); - user->ActionsAllowed.fill(0xFF); - user->ToggleActionPermission(15); // Kick Player - user->ToggleActionPermission(16); // Modify Groups - user->ToggleActionPermission(17); // Set Player Group - user->ToggleActionPermission(18); // Cheat - user->Id = 2; - group_list.push_back(std::move(user)); - SetDefaultGroup(1); + SetupDefaultGroups(); return; } - json_t * json = Json::ReadFromFile(path); - json_t * json_groups = json_object_get(json, "groups"); size_t groupCount = (size_t)json_array_size(json_groups); for (size_t i = 0; i < groupCount; i++) { diff --git a/src/network/network.h b/src/network/network.h index a54ad72246..7ae78e949e 100644 --- a/src/network/network.h +++ b/src/network/network.h @@ -162,6 +162,7 @@ private: void PrintError(); const char* GetMasterServerUrl(); std::string GenerateAdvertiseKey(); + void SetupDefaultGroups(); struct GameCommand {