Server 3.12.0 [Beta]

Today we released a new server beta for our next server version.

  • With this release we introduce a new way to interact with the Query using http and json.
    In this server version the WebQuery must be enabled manually.
    A small tutorial for this can be found at the end of this post.
  • A whisper bug has been fixed.
  • Older CPUs without POPCNT support can use the 32bit version again.
    See known issues (below change log) when error was not present in 3.11.0
  • Snapshots version was raised to ver 3. This was needed for the WebQuery feature .
    (sorry we missed that in the change log)
## Server Release 3.12.0 18 March 2020

### Important
- New feature WebQuery that allows user to access to query system using http and json. 

### Added
- New query commands `apikeyadd`, `apikeydel` and `apikeylist`
  for managing API keys used in WebQuery
- New permissions `b_virtualserver_apikey_add` and `b_virtualserver_apikey_manage`
  that restrict who can create/delete/list API keys.
- New possible value for parameter `query_protocols` named `http` that enables WebQuery
- New parameters `query_http_ip` and `query_http_port` that define where WebQuery
  can be reached, default is all interfaces on port `10080`

### Changed
- macOS 10.14 Mojave is required from now on

### Fixed
- Whisper bug that resulted in users not being able to receive whispers
- Removed requirement of having a CPU with POPCNT for 32bit version,
  and added an appropriate error message for the 64bit version
- Deploying snapshots will import client and channel permissions, again

Known issues:

  • Whisper stops working when the whispering user does switches into an unsubscribed channel.
    This may need a fix in the TS3 Client .
  • We temporary deactivated a feature (Allocation of client IDs has been changed.) which was added in version 3.10.0 to get one whisper bug fixed for the TS3 client.
  • Full documentation for the WebQuery. We are working on this and plan to have one with the stable release.
  • Linux user will now get the message to use the 32 bit version. Even when 3.11.0 worked fine.
    We re-checked 3.11.0 and found that POPCNT on Linux is included but optional. While one Windows system it was included and active. The stable version will remove the check for Linux and will allow to use the 64 bit version again.

Here you can download the beta.
The command for Docker can be found below

docker build "https://github.com/TeamSpeak-Systems/teamspeak-linux-docker-images.git#:alpine" --build-arg TEAMSPEAK_CHECKSUM=cbb5bbdbc6dfb29b794256efe87444da6da2614c775de4618ea64635a4f52c55 --build-arg TEAMSPEAK_URL=https://files.teamspeak-services.com/pre_releases/server/3.12.0-beta.3/teamspeak3-server_linux_alpine-3.12.0-beta.3.tar.bz2 --tag teamspeak:latest --tag teamspeak:3.12 --tag teamspeak:3.12.0-beta.3
Click here to see a mini tutorial about WebQuery .

How to use:

  • start ts3server with WebQuery enabled ./ts3server query_protocols=raw,ssh,http
  • create a universal API key. (BAByFoiEXZfnSJyE6dbXFiW_nn_SdwkclpKNz9j in the example)
    $ nc -q1 localhost 10011 <<EOF
    login serveradmin password
    apikeyadd scope=manage lifetime=0
    EOF
    
    TS3
    Welcome to the TeamSpeak 3 ServerQuery interface, type "help" for a list of commands and "help <command>" for information on a specific command.
    error id=0 msg=ok
    apikey=BAByFoiEXZfnSJyE6dbXFiW_nn_SdwkclpKNz9j id=4 sid=0 cldbid=1 scope=manage time_left=unlimited created_at=1582102492 expires_at=1582102492
    error id=0 msg=ok
    
  • testing the API key
    $ curl -H 'x-api-key: BAByFoiEXZfnSJyE6dbXFiW_nn_SdwkclpKNz9j' 'http://127.0.0.1:10080/gm?msg=Hello+World'
    
    {"status":{"code":0,"message":"ok"}}
    
    $ curl -H 'x-api-key: BAByFoiEXZfnSJyE6dbXFiW_nn_SdwkclpKNz9j' 'http://127.0.0.1:10080/1/channellist?-topic&-icon'
    
    {"body":[{"channel_icon_id":"0","channel_name":"Default Channel","channel_needed_subscribe_power":"0","channel_order":"0","channel_topic":"Default Channel has no topic","cid":"1","pid":"0","total_clients":"1"}],"status":{"code":0,"message":"ok"}}
    
Here is an overview for the scopes and the commands that can be used with these scopes
{ "apikeyadd",                   { manage_scope, } },
  { "apikeydel",                   { manage_scope, } },
  { "apikeylist",                  { manage_scope, } },
  { "banadd",                      { manage_scope, write_scope, } },
  { "banclient",                   { manage_scope, write_scope, } },
  { "bandel",                      { manage_scope, write_scope, } },
  { "bandelall",                   { manage_scope, write_scope, } },
  { "banlist",                     { manage_scope, write_scope, read_scope, } },
  { "bindinglist",                 { manage_scope, read_scope } },
  { "channeladdperm",              { manage_scope, } },
  { "channelclientaddperm",        { manage_scope, } },
  { "channelclientdelperm",        { manage_scope, } },
  { "channelclientpermlist",       { manage_scope, write_scope, read_scope, } },
  { "channelcreate",               { manage_scope, write_scope, } },
  { "channeldelete",               { manage_scope, write_scope, } },
  { "channeldelperm",              { manage_scope, } },
  { "channeledit",                 { manage_scope, write_scope, } },
  { "channelfind",                 { manage_scope, write_scope, read_scope, } },
  { "channelgroupadd",             { manage_scope, write_scope, } },
  { "channelgroupaddperm",         { manage_scope, } },
  { "channelgroupclientlist",      { manage_scope, write_scope, read_scope, } },
  { "channelgroupcopy",            { manage_scope, } },
  { "channelgroupdel",             { manage_scope, } },
  { "channelgroupdelperm",         { manage_scope, } },
  { "channelgrouplist",            { manage_scope, write_scope, read_scope, } },
  { "channelgrouppermlist",        { manage_scope, write_scope, read_scope, } },
  { "channelgrouprename",          { manage_scope, } },
  { "channelinfo",                 { manage_scope, write_scope, read_scope, } },
  { "channellist",                 { manage_scope, write_scope, read_scope, } },
  { "channelmove",                 { manage_scope, write_scope, } },
  { "channelpermlist",             { manage_scope, write_scope, read_scope, } },
  { "clientaddperm",               { manage_scope, } },
  { "clientdbdelete",              { manage_scope, write_scope, } },
  { "clientdbedit",                { manage_scope, write_scope, } },
  { "clientdbfind",                { manage_scope, write_scope, read_scope, } },
  { "clientdbinfo",                { manage_scope, write_scope, read_scope, } },
  { "clientdblist",                { manage_scope, write_scope, read_scope, } },
  { "clientdelperm",               { manage_scope, } },
  { "clientedit",                  { manage_scope, write_scope, } },
  { "clientfind",                  { manage_scope, write_scope, read_scope, } },
  { "clientgetdbidfromuid",        { manage_scope, write_scope, read_scope, } },
  { "clientgetids",                { manage_scope, write_scope, read_scope, } },
  { "clientgetnamefromdbid",       { manage_scope, write_scope, read_scope, } },
  { "clientgetnamefromuid",        { manage_scope, write_scope, read_scope,} },
  { "clientgetuidfromclid",        { manage_scope, write_scope, read_scope, } },
  { "clientinfo",                  { manage_scope, write_scope, read_scope, } },
  { "clientkick",                  { manage_scope, write_scope, } },
  { "clientlist",                  { manage_scope, write_scope, read_scope, } },
  { "clientmove",                  { manage_scope, write_scope, } },
  { "clientpermlist",              { manage_scope, write_scope, read_scope, } },
  { "clientpoke",                  { manage_scope, write_scope, } },
  { "clientsetserverquerylogin",   { manage_scope, write_scope, } },
  { "clientupdate",                { manage_scope, write_scope, } },
  { "complainadd",                 { manage_scope, write_scope, } },
  { "complaindel",                 { manage_scope, write_scope, } },
  { "complaindelall",              { manage_scope, write_scope, } },
  { "complainlist",                { manage_scope, write_scope, read_scope, } },
  { "custominfo",                  { manage_scope, write_scope, read_scope, } },
  { "customsearch",                { manage_scope, write_scope, read_scope, } },
  { "customset",                   { manage_scope, write_scope, } },
  { "customdelete",                { manage_scope, write_scope, } },
  { "ftcreatedir",                 not_supported },
  { "ftdeletefile",                not_supported },
  { "ftgetfileinfo",               not_supported },
  { "ftgetfilelist",               not_supported },
  { "ftinitdownload",              not_supported },
  { "ftinitupload",                not_supported },
  { "ftlist",                      not_supported },
  { "ftrenamefile",                not_supported },
  { "ftstop",                      not_supported },
  { "gm",                          { manage_scope, } },
  { "help",                        { manage_scope, write_scope, read_scope, } },
  { "hostinfo",                    { manage_scope, write_scope, read_scope, } },
  { "instanceedit",                { manage_scope, } },
  { "instanceinfo",                { manage_scope, write_scope, read_scope, } },
  { "logadd",                      { manage_scope, write_scope, } },
  { "login",                       not_supported },
  { "logout",                      not_supported },
  { "logview",                     { manage_scope, write_scope, read_scope, } },
  { "messageadd",                  { manage_scope, write_scope, } },
  { "messagedel",                  { manage_scope, write_scope, } },
  { "messageget",                  { manage_scope, write_scope, read_scope, } },
  { "messagelist",                 { manage_scope, write_scope, read_scope, } },
  { "messageupdateflag",           { manage_scope, write_scope, } },
  { "permfind",                    { manage_scope, write_scope, read_scope, } },
  { "permget",                     { manage_scope, write_scope, read_scope, } },
  { "permidgetbyname",             { manage_scope, write_scope, read_scope, } },
  { "permissionlist",              { manage_scope, write_scope, read_scope, } },
  { "permoverview",                { manage_scope, write_scope, read_scope, } },
  { "permreset",                   { manage_scope, } },
  { "privilegekeyadd",             { manage_scope, write_scope, } },
  { "privilegekeydelete",          { manage_scope, write_scope, } },
  { "privilegekeylist",            { manage_scope, write_scope, read_scope, } },
  { "privilegekeyuse",             { manage_scope, write_scope, } },
  { "queryloginadd",               { manage_scope, write_scope, } },
  { "querylogindel",               { manage_scope, write_scope, } },
  { "queryloginlist",              { manage_scope, write_scope, read_scope } },
  { "quit",                        not_supported },
  { "sendtextmessage",             { manage_scope, write_scope, } },
  { "servercreate",                { manage_scope, } },
  { "serverdelete",                { manage_scope, } },
  { "serveredit",                  { manage_scope, write_scope, } },
  { "servergroupadd",              { manage_scope, } },
  { "servergroupaddclient",        { manage_scope, } },
  { "servergroupaddperm",          { manage_scope, } },
  { "servergroupautoaddperm",      { manage_scope, } },
  { "servergroupautodelperm",      { manage_scope, } },
  { "servergroupclientlist",       { manage_scope, } },
  { "servergroupcopy",             { manage_scope, } },
  { "servergroupdel",              { manage_scope, } },
  { "servergroupdelclient",        { manage_scope, } },
  { "servergroupdelperm",          { manage_scope, } },
  { "servergrouplist",             { manage_scope, } },
  { "servergrouppermlist",         { manage_scope, } },
  { "servergrouprename",           { manage_scope, } },
  { "servergroupsbyclientid",      { manage_scope, } },
  { "serveridgetbyport",           { manage_scope, } },
  { "serverinfo",                  { manage_scope, } },
  { "serverlist",                  { manage_scope, } },
  { "servernotifyregister",        not_supported },
  { "servernotifyunregister",      not_supported },
  { "serverprocessstop",           { manage_scope, } },
  { "serverrequestconnectioninfo", { manage_scope, write_scope, read_scope, } },
  { "serversnapshotcreate",        { manage_scope, } },
  { "serversnapshotdeploy",        { manage_scope, } },
  { "serverstart",                 { manage_scope, } },
  { "serverstop",                  { manage_scope, } },
  { "servertemppasswordadd",       { manage_scope, write_scope, } },
  { "servertemppassworddel",       { manage_scope, write_scope, } },
  { "servertemppasswordlist",      { manage_scope, write_scope, read_scope, } },
  { "setclientchannelgroup",       { manage_scope, write_scope, } },
  { "tokenadd",                    { manage_scope, write_scope, } },
  { "tokendelete",                 { manage_scope, write_scope, } },
  { "tokenlist",                   { manage_scope, write_scope, read_scope, } },
  { "tokenuse",                    { manage_scope, write_scope, } },
  { "use",                         not_supported },
  { "version",                     { manage_scope, write_scope, read_scope, } },
  { "whoami",                      { manage_scope, write_scope, read_scope, } },
19 Likes

Finally, after all those years. :joy:

6 Likes

We are happy that you like it.

//Edit
Changed Added following into main post

General

  • Snapshots version was raised to ver 3. This was needed for the WebQuery feature .
    (sorry we missed that in the change log)

Known issues:

  • Linux user will now get the message to use the 32 bit version. Even when 3.11.0 worked fine.
    We re-checked 3.11.0 and found that POPCNT on Linux is included but optional. While one Windows system it was included and active. The stable version will remove the check for Linux and will allow to use the 64 bit version again.
4 Likes

Thank you for the prompt fix on the TeamSpeak Whisper bug I reported as well as many others!

  • brysi73
2 Likes

Finally! Guess many of us desired this festure for ages.

2 Likes

Quick question; I noticed the web API uses HTTP.
Will there be a version supporting HTTPS in the stable release or even in the foreseeable future?

I tried doing an SSL connection using python’s requests module, but the handshake failed, so I assume it is not supported yet?

3 Likes

yes, it’s HTTP only. If you want HTTPS you can always just proxy it through nginx for example.

3 Likes

No plans for native HTTPS support at all?

2 Likes

On principle i would recommend to have http servers like the WebQuery to be always reverse proxied. While we believe WebQuery is resistant to common attacks, adding a reverse proxy like nginx in front it will at least provide peace of mind, and allows to shape, manage, and restrict access to WebQuery much better then we could provide.

To answer your question directly. We so far did not plan of adding https, because that can be better provided by a reverse proxy, we will take the feedback into consideration, and if https is much requested feature, then we will provide in the future.

4 Likes

That’s fair enough, I can see where you’re coming from but I would think having the option to have HTTPS without a reverse proxy would be a welcomed option regardless.

Are there any performance improvements again? Cuz in 3.11 we still have peaks on one core up to 100% sometimes

Adding nginx in front of the web query is not an issue for people who host their own servers.
I wonder how it is going to be for those who rent a TeamSpeak server?

we did not make further performance improvements with 3.12.0.
But if you are in a generous mood, could you please send @TS_Chris a small summary on how to replicate the 100% spikes so that we can better diagnose the issue?

I cant contact him sadly

I meant @TS.ChrisR, honest mistake :sweat_smile:

You can still contact me, but apparently the easy access method is gone when you hide your public profile (the forum software is a bit weird in that regard it seems). You’d have to go to your own message center and write a new message there, where you have the option to add recipients.

Do you have a script/bot running which sends a lot of commands and what commands are these?

Ps 3.11.0 discussion should be done in https://community.teamspeak.com/t/teamspeak-server-3-11-0

I wrote you a private message :slight_smile:

I’d prefer native https aswell.

My server crashed after using new http API.