82 lines
2.5 KiB
C++
82 lines
2.5 KiB
C++
|
#include <fstream>
|
||
|
#include <query/Command.h>
|
||
|
#include <cstring>
|
||
|
#include <utility>
|
||
|
|
||
|
#include <functional> /* required from permission manager */
|
||
|
#include "log/LogUtils.h"
|
||
|
#include "Definitions.h"
|
||
|
#include "PermissionManager.h"
|
||
|
|
||
|
using namespace std;
|
||
|
using namespace ts;
|
||
|
|
||
|
/* Took from the permission mapper within the TeaSpeakServer */
|
||
|
enum PermissionMapGroup {
|
||
|
MIN,
|
||
|
TS3 = MIN,
|
||
|
TEAWEB,
|
||
|
TEACLIENT,
|
||
|
QUERY,
|
||
|
MAX
|
||
|
};
|
||
|
|
||
|
std::map<PermissionMapGroup, string> group_names = {
|
||
|
{PermissionMapGroup::TS3, "TeamSpeak 3"},
|
||
|
{PermissionMapGroup::TEAWEB, "TeaSpeak-Web"},
|
||
|
{PermissionMapGroup::TEACLIENT, "TeaSpeak-Client"},
|
||
|
{PermissionMapGroup::QUERY, "Query"}
|
||
|
};
|
||
|
|
||
|
//TODO: Does it work with a space at the end?
|
||
|
#define I "\x5f\xcc\xb2" /* an underscore with an non-spacing underscore */
|
||
|
std::map<string, string> replacements = {
|
||
|
{"_music", I "music"},
|
||
|
{"_hwid", I "hwid" },
|
||
|
{"_playlist", I "playlist"}
|
||
|
};
|
||
|
|
||
|
std::string replace_all(std::string str, const std::string& from, const std::string& to) {
|
||
|
size_t start_pos = 0;
|
||
|
while((start_pos = str.find(from, start_pos)) != std::string::npos) {
|
||
|
str.replace(start_pos, from.length(), to);
|
||
|
start_pos += to.length(); // Handles case where 'to' is a substring of 'from'
|
||
|
}
|
||
|
return str;
|
||
|
}
|
||
|
|
||
|
|
||
|
int main(int argc, char** argv) {
|
||
|
ofstream of("permission_mapping.txt");
|
||
|
|
||
|
of << "# This is a auto generated template file!" << endl;
|
||
|
of << "# DO NOT EDIT IF YOU'RE NOT SURE WHAT YOU'RE DOING!" << endl;
|
||
|
of << "# Syntax:" << endl;
|
||
|
of << "# group:<group id> -> group id values: 0 := TS3 | 1 := TeaWeb | 2 := TeaClient | 3 := Query " << endl;
|
||
|
of << "# mapping:<original name>:<mapped value>" << endl;
|
||
|
of << "# Note: Be aware of spaces and line endings. The TeaSpeakServer does not trim the values!" << endl;
|
||
|
of << "#" << endl;
|
||
|
|
||
|
|
||
|
for(PermissionMapGroup type = PermissionMapGroup::MIN; type < PermissionMapGroup::MAX; (*(int*) &type)++) {
|
||
|
of << "# Begin mapping for group " << (int) type << " (" << group_names[type] << ")" << endl;
|
||
|
of << "group:" << (int) type << endl;
|
||
|
|
||
|
if(type == PermissionMapGroup::TS3) {
|
||
|
for(const auto& permission : permission::availablePermissions) {
|
||
|
if(!permission->clientSupported)
|
||
|
continue;
|
||
|
|
||
|
auto value = permission->name;
|
||
|
for(auto& replacement : replacements)
|
||
|
value = replace_all(value, replacement.first, replacement.second);
|
||
|
of << "mapping:" << permission->name << ":" << value << endl;
|
||
|
}
|
||
|
} else {
|
||
|
of << "# No mapping required here. You're of course free to add stuff here." << endl;
|
||
|
}
|
||
|
of << "# End mapping of group" << endl;
|
||
|
}
|
||
|
|
||
|
of.close();
|
||
|
}
|