Using new permissions system consequently
This commit is contained in:
@@ -39,12 +39,7 @@ bool SpeakingClient::shouldReceiveVoiceWhisper(const std::shared_ptr<ConnectedCl
|
||||
if(!this->shouldReceiveVoice(sender))
|
||||
return false;
|
||||
|
||||
auto required_permission = this->cached_permission_value(permission::i_client_needed_whisper_power);
|
||||
if(required_permission == permNotGranted)
|
||||
return true;
|
||||
|
||||
auto granted_permission = sender->cached_permission_value(permission::i_client_whisper_power);
|
||||
return granted_permission >= required_permission;
|
||||
return permission::v2::permission_granted(this->cpmerission_needed_whisper_power, sender->cpmerission_whisper_power);
|
||||
}
|
||||
|
||||
void SpeakingClient::handlePacketVoice(const pipes::buffer_view& data, bool head, bool fragmented) {
|
||||
@@ -445,7 +440,7 @@ command_result SpeakingClient::handleCommandClientInit(Command& cmd) {
|
||||
debugMessage(this->getServerId(), "{} Got client init. (HWID: {})", CLIENT_STR_LOG_PREFIX, this->getHardwareId());
|
||||
TIMING_STEP(timings, "props apply");
|
||||
|
||||
auto permissions_list = this->permissionValues(permission::PERMTEST_ORDERED, {
|
||||
auto permissions_list = this->calculate_permissions({
|
||||
permission::b_virtualserver_join_ignore_password,
|
||||
permission::b_client_ignore_bans,
|
||||
permission::b_client_ignore_vpn,
|
||||
@@ -457,17 +452,17 @@ command_result SpeakingClient::handleCommandClientInit(Command& cmd) {
|
||||
permission::b_client_enforce_valid_hwid,
|
||||
|
||||
permission::b_client_use_reserved_slot
|
||||
}, nullptr);
|
||||
auto permissions = map<permission::PermissionType, permission::PermissionValue>(permissions_list.begin(), permissions_list.end());
|
||||
}, 0);
|
||||
auto permissions = map<permission::PermissionType, permission::v2::PermissionFlaggedValue>(permissions_list.begin(), permissions_list.end());
|
||||
TIMING_STEP(timings, "perm calc 1");
|
||||
|
||||
if(geoloc::provider_vpn && permissions[permission::b_client_ignore_vpn] == permNotGranted) {
|
||||
if(geoloc::provider_vpn && !permission::v2::permission_granted(1, permissions[permission::b_client_ignore_vpn])) {
|
||||
auto provider = this->isAddressV4() ? geoloc::provider_vpn->resolveInfoV4(this->getPeerIp(), true) : geoloc::provider_vpn->resolveInfoV6(this->getPeerIp(), true);
|
||||
if(provider)
|
||||
return command_result{error::server_connect_banned, strvar::transform(ts::config::messages::kick_vpn, strvar::StringValue{"provider.name", provider->name}, strvar::StringValue{"provider.website", provider->side})};
|
||||
}
|
||||
|
||||
if(this->getType() == ClientType::CLIENT_TEAMSPEAK && (permissions[permission::b_client_enforce_valid_hwid] == permNotGranted && permissions[permission::b_client_enforce_valid_hwid] == 0)) {
|
||||
if(this->getType() == ClientType::CLIENT_TEAMSPEAK && permission::v2::permission_granted(1, permissions[permission::b_client_enforce_valid_hwid])) {
|
||||
auto hwid = this->properties()[property::CLIENT_HARDWARE_ID].as<string>();
|
||||
if(
|
||||
!std::regex_match(hwid, regex_hwid_windows) &&
|
||||
@@ -480,8 +475,7 @@ command_result SpeakingClient::handleCommandClientInit(Command& cmd) {
|
||||
}
|
||||
TIMING_STEP(timings, "valid hw ip");
|
||||
|
||||
auto ignorePassword = permissions[permission::b_virtualserver_join_ignore_password] > 0 && permissions[permission::b_virtualserver_join_ignore_password] != permNotGranted;
|
||||
if(!ignorePassword)
|
||||
if(!permission::v2::permission_granted(1, permissions[permission::b_virtualserver_join_ignore_password]))
|
||||
if(!this->server->verifyServerPassword(cmd["client_server_password"].string(), true))
|
||||
return command_result{error::server_invalid_password};
|
||||
|
||||
@@ -500,17 +494,17 @@ command_result SpeakingClient::handleCommandClientInit(Command& cmd) {
|
||||
clones_hwid++;
|
||||
});
|
||||
|
||||
if(permissions[permission::i_client_max_clones_uid] > 0 && clones_uid >= permissions[permission::i_client_max_clones_uid]) {
|
||||
if(clones_uid > 0 && permissions[permission::i_client_max_clones_uid].has_value && !permission::v2::permission_granted(clones_uid, permissions[permission::i_client_max_clones_uid])) {
|
||||
logMessage(this->getServerId(), "{} Disconnecting because there are already {} uid clones connected. (Allowed: {})", CLIENT_STR_LOG_PREFIX, clones_uid, permissions[permission::i_client_max_clones_uid]);
|
||||
return command_result{error:: client_too_many_clones_connected, "too many clones connected (uid)"};
|
||||
}
|
||||
|
||||
if(permissions[permission::i_client_max_clones_ip] > 0 && clones_ip >= permissions[permission::i_client_max_clones_ip]) {
|
||||
if(clones_ip > 0 && permissions[permission::i_client_max_clones_ip].has_value && !permission::v2::permission_granted(clones_ip, permissions[permission::i_client_max_clones_ip])) {
|
||||
logMessage(this->getServerId(), "{} Disconnecting because there are already {} ip clones connected. (Allowed: {})", CLIENT_STR_LOG_PREFIX, clones_ip, permissions[permission::i_client_max_clones_ip]);
|
||||
return command_result{error:: client_too_many_clones_connected, "too many clones connected (ip)"};
|
||||
}
|
||||
|
||||
if(permissions[permission::i_client_max_clones_hwid] > 0 && clones_hwid >= permissions[permission::i_client_max_clones_hwid] && !_own_hwid.empty()) {
|
||||
if(clones_hwid > 0 && permissions[permission::i_client_max_clones_hwid].has_value && !permission::v2::permission_granted(clones_hwid, permissions[permission::i_client_max_clones_hwid])) {
|
||||
logMessage(this->getServerId(), "{} Disconnecting because there are already {} hwid clones connected. (Allowed: {})", CLIENT_STR_LOG_PREFIX, clones_hwid, permissions[permission::i_client_max_clones_hwid]);
|
||||
return command_result{error:: client_too_many_clones_connected, "too many clones connected (hwid)"};
|
||||
}
|
||||
@@ -581,7 +575,7 @@ command_result SpeakingClient::handleCommandClientInit(Command& cmd) {
|
||||
auto maxClients = this->server->properties()[property::VIRTUALSERVER_MAXCLIENTS].as<size_t>();
|
||||
auto reserved = this->server->properties()[property::VIRTUALSERVER_RESERVED_SLOTS].as<size_t>();
|
||||
|
||||
bool allowReserved = permissions[permission::b_client_use_reserved_slot] != permNotGranted && permissions[permission::b_client_use_reserved_slot] != 0;
|
||||
bool allowReserved = permission::v2::permission_granted(1, permissions[permission::b_client_use_reserved_slot]);
|
||||
if(reserved > maxClients){
|
||||
if(!allowReserved)
|
||||
return command_result{error::server_maxclients_reached};
|
||||
@@ -782,7 +776,7 @@ void SpeakingClient::tick(const std::chrono::system_clock::time_point &time) {
|
||||
|
||||
void SpeakingClient::updateChannelClientProperties(bool channel_lock, bool notify) {
|
||||
ConnectedClient::updateChannelClientProperties(channel_lock, notify);
|
||||
this->max_idle_time = this->permissionValueFlagged(permission::i_client_max_idletime, this->currentChannel);
|
||||
this->max_idle_time = this->calculate_permission(permission::i_client_max_idletime, this->currentChannel ? this->currentChannel->channelId() : 0);
|
||||
}
|
||||
|
||||
command_result SpeakingClient::handleCommand(Command &command) {
|
||||
|
||||
Reference in New Issue
Block a user