Fixed some stuff
This commit is contained in:
@@ -2088,6 +2088,7 @@ command_result ConnectedClient::handleCommandQueryCreate(ts::Command &cmd) {
|
||||
OptionalServerId server_id = this->getServerId();
|
||||
if(cmd[0].has("server_id"))
|
||||
server_id = cmd["server_id"];
|
||||
|
||||
if(cmd[0].has("sid"))
|
||||
server_id = cmd["sid"];
|
||||
|
||||
@@ -2095,24 +2096,43 @@ command_result ConnectedClient::handleCommandQueryCreate(ts::Command &cmd) {
|
||||
if(!server && server_id != EmptyServerId && server_id != 0)
|
||||
return command_result{error::server_invalid_id};
|
||||
|
||||
if(server) {
|
||||
if(!permission::v2::permission_granted(1, server->calculate_permission(permission::b_client_query_create, this->getClientDatabaseId(), this->getType(), 0)))
|
||||
return command_result{permission::b_client_query_create};
|
||||
} else {
|
||||
if(!permission::v2::permission_granted(1, serverInstance->calculate_permission(permission::b_client_query_create, this->getClientDatabaseId(), this->getType(), 0)))
|
||||
return command_result{permission::b_client_query_create};
|
||||
}
|
||||
|
||||
auto username = cmd["client_login_name"].as<string>();
|
||||
auto password = cmd[0].has("client_login_password") ? cmd["client_login_password"].as<string>() : "";
|
||||
|
||||
if(password.empty())
|
||||
password = rnd_string(QUERY_PASSWORD_LENGTH);
|
||||
|
||||
auto account = serverInstance->getQueryServer()->find_query_account_by_name(username);
|
||||
if(account) return command_result{error::query_already_exists};
|
||||
|
||||
account = serverInstance->getQueryServer()->create_query_account(username, server_id, this->getUid(), password);
|
||||
std::string uid = this->getUid();
|
||||
if(cmd[0].has("cldbid")){
|
||||
if(!serverInstance->databaseHelper()->validClientDatabaseId(server, cmd["cldbid"].as<ClientDbId>()))
|
||||
return command_result{error::database_empty_result};
|
||||
|
||||
if(server) {
|
||||
if(!permission::v2::permission_granted(1, server->calculate_permission(permission::b_client_query_create, this->getClientDatabaseId(), this->getType(), 0)))
|
||||
return command_result{permission::b_client_query_create};
|
||||
} else {
|
||||
if(!permission::v2::permission_granted(1, serverInstance->calculate_permission(permission::b_client_query_create, this->getClientDatabaseId(), this->getType(), 0)))
|
||||
return command_result{permission::b_client_query_create};
|
||||
}
|
||||
|
||||
auto info = serverInstance->databaseHelper()->queryDatabaseInfo(server, {cmd["cldbid"].as<ClientDbId>()});
|
||||
if(info.empty())
|
||||
return command_result{error::database_empty_result};
|
||||
uid = info[0]->uniqueId;
|
||||
} else {
|
||||
if(server) {
|
||||
if(!permission::v2::permission_granted(1, server->calculate_permission(permission::b_client_query_create_own, this->getClientDatabaseId(), this->getType(), 0)))
|
||||
return command_result{permission::b_client_query_create_own};
|
||||
} else {
|
||||
if(!permission::v2::permission_granted(1, serverInstance->calculate_permission(permission::b_client_query_create_own, this->getClientDatabaseId(), this->getType(), 0)))
|
||||
return command_result{permission::b_client_query_create_own};
|
||||
}
|
||||
}
|
||||
|
||||
if(password.empty())
|
||||
password = rnd_string(QUERY_PASSWORD_LENGTH);
|
||||
|
||||
account = serverInstance->getQueryServer()->create_query_account(username, server_id, uid, password);
|
||||
if(!account)
|
||||
return command_result{error::vs_critical};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user