sbpp / sourcebans-pp Goto Github PK
View Code? Open in Web Editor NEWAdmin, ban, and comms management system for the Source engine
Home Page: https://sbpp.github.io/
License: Creative Commons Attribution Share Alike 4.0 International
Admin, ban, and comms management system for the Source engine
Home Page: https://sbpp.github.io/
License: Creative Commons Attribution Share Alike 4.0 International
Currently Banlist shows only steam id.
all rcon password is correct, but stil then i type commands i see that:
Error: No RCON password!
You have to add the RCON password for this server in the 'edit server'
page to use this console!
After MariaDB fix, report player page don't work
http://i5.imageban.ru/out/2015/12/04/df0ae4264d2d8d505767c6370d60b749.jpg
Version SB - 1.5.4-dev-git309
sb_debug_connection.php log ->
[+] Trying to establish UDP connection
[+] UDP connection successfull!
[+] Trying to write to the socket
[+] Successfully requested server info. (That doesn't mean anything on an UDP stream.) Reading...
[-] Error getting server info. Can't read from UDP stream. Port is possibly blocked.
[+] Trying to establish TCP connection
[+] TCP connection successfull!
[+] Trying to write to TCP socket and authenticate via rcon
[+] Successfully sent authentication request. Reading...
[+] Got an response!
[+] Password correct!
Sourcebans sits at -> Querying Server Data...
Im using the master repo
Sorry Sarabveer.
But can not correct the error of repeating the name of the players on ban list (Blocked Connections) this was after the update CS: GO.
I've read people who have this error and the problem was fixed with the update SourceMod but I already did the update and remains the same and the worst is that when I give ban on the player appears many messages in chat inside the server.
Can you help me?
Sorry to open another topic but I really need help.
Hello, when i try login with OpenID i get
Fatal error: Call to undefined function bcsub() in /var/www/html/mysite/sourcebans/steamopenid.php on line 41
I tried to ban using sm_addban via the server console. I got this:
"L 05/17/2015 - 13:30:55: [sb_bans.smx] Failed to insert the ID ban into the database: Column 'aid' cannot be null"
sm_ban works fine, this only happen on sm_addban.
Note: sm_addban still works if banned by an admin and not from the server console
Tested on a CS:S Server
SM Version: 1.7.1-dev+5165
Metamod Version: 1.10.5-dev
Im using xampp for hosting. xampp is using MariaDB. banlist page still empty even after doing all 3 steps documented in your faqs.
this post describe the solution.
https://forums.alliedmods.net/showpost.php?p=2310681&postcount=39
Details:
[256] mysqli error: [1231: Variable 'optimizer_switch' can't be set to the value of 'block_nested_loop=off'] in EXECUTE("set session optimizer_switch='block_nested_loop=off';")
Fatal error on line 77 in file /xxx/includes/adodb/adodb-errorhandler.inc.php
Parent Function
/xxx/includes/adodb/adodb-errorhandler.inc.php - 77
/xxx/includes/adodb/adodb.inc.php - 1071
/xxx/includes/adodb/adodb.inc.php - 1046
/xxx/pages/page.banlist.php - 42
Query String
p=banlist&advSearch=STEAM_X:X:XXX&advType=steamid&Submit
IP X.X.X.X
ps: 'mysql Ver 15.1 Distrib 10.0.21-MariaDB'
I get this error when I look at the ban list : Warning: Division by zero in /home/go_free_servers/client_10/www/sourcebans/pages/page.banlist.php on line 678
$pages = ceil($BanCount/$BansPerPage);
if($pages > 1) {
$ban_nav .= ' ';
for($i=1;$i<=$pages;$i++)
{
if(isset($_GET["page"]) && $i == $page) {
$ban_nav .= '' . $i . '';
continue;
}
$ban_nav .= '' . $i . '';
}
$ban_nav .= '';
The communication ban list has no checkboxes. Hence it's not possible to mass-delete/mass-unsilence players.
an example can be found on my installation:
https://bans.elite-hunterz.info/index.php?p=commslist
here is how it looks for the ban list:
http://scrn.storni.info/2015-10-08_22-35-16.png
and here how it looks like for the comm list:
http://scrn.storni.info/2015-10-08_22-35-40.png
I hope it's a simple fix.
Greetings
I dont reveive any error , just this one:
[sourcebans.smx] Failed to retrieve admins from the database, Subquery returns more than 1 row
and you said that it is because i have multiple admins with the same steam id.
i dont understand how can i have multiple admins with the same steam id? if you try to put an admin with the same steam id it will give an error and wont let me do that, so i think thats imposible.
database is correct, everything is right, maybe i need to do something else?
on csgo server when i add from web interface it modifies the sb_admins.cfg and adds them but on css server it doesnt, please help me!
Hello,
When upgrading from 1.4.11 to 1.5.3 encountered a problem with a list of bans, which does not see.
Everything works fine, but included in the list of bans, we have just a blank page.
http://4funcsgo.cs-classic.pl/index.php?p=banlist
I tried to install the same version 1.5.3, but I have the same problem
Hello
I have a big problem with SourceBans
[Server Specs]
Apache/2.4.12 (Ubuntu)
Database client version: libmysql - 5.6.27
PHP extension: mysqli Documentation
PHP version: 5.6.11-1ubuntu3.1
OS Ubuntu 15.10
I dont know why i have AJAX error when i want ban,kick someone from web panel
BTW SourceBans web rcon console doesnt work (Can't connect to the server)
I tried SourceBans 1.5.3 and 1.5.4 same problem
Error: the XML response that was returned from the server is invalid. Received:
Warning: stream_set_timeout() expects parameter 1 to be resource, boolean given in /var/www/html/sourcebans/includes/CServerRcon.php on line 50Warning: fwrite() expects parameter 1 to be resource, boolean given in /var/www/html/sourcebans/includes/CServerRcon.php on line 71
Warning: fwrite() expects parameter 1 to be resource, boolean given in /var/www/html/sourcebans/includes/CServerRcon.php on line 71
$('dialog-control').setStyle('display', 'block');
[29-Jul-2015 06:53:35 GMT] PHP Warning: include_once(/home/_/public_html/_
/ban/includes/adodb/adodb.inc.php): failed to open stream: No such file or directory in /home/_/public_html//ban/init.php on line 112
[29-Jul-2015 06:53:35 GMT] PHP Warning: include_once(): Failed opening '/home/******/public_html/_/ban/includes/adodb/adodb.inc.php' for inclusion (include_path='.:/php/includes:/home/_/public_html/_/ban/includes/adodb') in /home/_/public_html/_/ban/init.php on line 112
[29-Jul-2015 06:53:35 GMT] PHP Warning: include_once(/home/_/public_html/_/ban/includes/adodb/adodb-errorhandler.inc.php): failed to open stream: No such file or directory in /home/_/public_html/_/ban/init.php on line 113
[29-Jul-2015 06:53:35 GMT] PHP Warning: include_once(): Failed opening '/home/_/public_html/_/ban/includes/adodb/adodb-errorhandler.inc.php' for inclusion (include_path='.:/php/includes:/home/_/public_html/_/ban/includes/adodb') in /home/_/public_html/_/ban/init.php on line 113
[29-Jul-2015 06:53:35 GMT] PHP Fatal error: Call to undefined function ADONewConnection() in /home/**_/public_html/_/ban/init.php on line 114
on my web host . sourceban show a blank page, I debugged and have the errors above how to fix ?
Sourcecomms and sbchecker are looking for the sourcebans.cfg at addons/sourcemod/configs/sourcebans/sourcebans.cfg, but since the upgrade to the sourcebans plugin 1.5.0 beta the sourcebans.cfg shouldn't be there anymore. See also this error log:
L 04/28/2015 - 00:04:40: [SM] Plugin encountered error 25: Call was aborted
L 04/28/2015 - 00:04:40: [SM] Native "SetFailState" reported: FATAL *** ERROR *** can't find addons/sourcemod/configs/sourcebans/sourcebans.cfg
L 04/28/2015 - 00:04:40: [SM] Displaying call stack trace for plugin "sourcecomms.smx":
L 04/28/2015 - 00:04:40: [SM] [0] Line 2576, sourcecomms.sp::ReadConfig()
L 04/28/2015 - 00:04:40: [SM] [1] Line 239, sourcecomms.sp::OnMapStart()
L 04/28/2015 - 00:04:40: [SM] Plugin encountered error 25: Call was aborted
L 04/28/2015 - 00:04:40: [SM] Native "SetFailState" reported: FATAL *** ERROR *** can not find addons/sourcemod/configs/sourcebans/sourcebans.cfg
L 04/28/2015 - 00:04:40: [SM] Displaying call stack trace for plugin "sbchecker.smx":
L 04/28/2015 - 00:04:40: [SM] [0] Line 317, sbchecker.sp::ReadConfig()
L 04/28/2015 - 00:04:40: [SM] [1] Line 57, sbchecker.sp::OnMapStart()
This error observed on archive and current ban protests.
GROUP BAN
With that issued the error, ban 4 people. (Tested on link example)
FRIEND BAN
Players also bans, but it gives an error.
SHOW GROUPS
Group does not load.
And does not show player nickname, although it should.
P.S. Google Translate :(
P.S.S. I'm use free hosting.
This is an enhancement suggestion. Some people use sourcebans for garrysmod, which doesn't have any publicly known comms plugins unfortunately, so the ability to disable the comms tab would be nice. Thanks!
Steam OAuth login, to join using Steam account. Requires LightOpenID.
This is a standalone file. Change template to display the logo and ready to go!
Change the code as you need! 😄
<?php
// Steam Login by @duhowpi 2015
// Visit www.lmcservers.com for more fun! ;D
define('SB_HOST', 'sbans.mywebsite.com');
define('SB_URL', 'http://' .SB_HOST);
session_start();
include_once 'init.php';
include_once 'config.php';
require_once 'openid.php';
function steamOauth() {
$openid = new LightOpenID(SB_HOST);
if(!$openid->mode) {
$openid->identity = 'http://steamcommunity.com/openid';
header("Location: " .$openid->authUrl() );
exit();
}
elseif($openid->mode == 'cancel') {
// User canceled auth.
return false;
} else {
if($openid->validate()) {
$id = $openid->identity;
$ptn = "/^http:\/\/steamcommunity\.com\/openid\/id\/(7[0-9]{15,25}+)$/";
preg_match($ptn, $id, $matches);
if(!empty($matches[1])){ return $matches[1]; }
return null;
} else {
// Not valid
return false;
}
}
}
function convert64to32($steam_cid){
$id = array('STEAM_0');
$id[1] = substr($steam_cid, -1, 1) % 2 == 0 ? 0 : 1;
$id[2] = bcsub($steam_cid, '76561197960265728');
if(bccomp($id[2], '0') != 1)
{
return false;
}
$id[2] = bcsub($id[2], $id[1]);
list($id[2], ) = explode('.', bcdiv($id[2], 2), 2);
return implode(':', $id);
}
if(isset($_COOKIE['aid'])){
header("Location: " .SB_URL);
}
$data = steamOauth();
if($data !== false){
$data = convert64to32($data);
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if(defined('DB_PREFIX')){ $prfx = DB_PREFIX ."_"; }else{ $prfx = ""; }
echo "SELECT aid,password FROM " .$prfx ."admins WHERE authid = '" .$data ."'; ";
$resultado = $mysqli->query("SELECT aid,password FROM " .$prfx ."admins WHERE authid = '" .$data ."'; ");
if($resultado->num_rows == 1){
while($row = $resultado->fetch_assoc()) {
setcookie("aid", $row['aid'], time()+LOGIN_COOKIE_LIFETIME);
setcookie("password", $row['password'], time()+LOGIN_COOKIE_LIFETIME);
}
}
$mysqli->close();
}else{
header("Location: " .SB_URL ."/index.php?p=login");
}
header("Location: " .SB_URL);
Hi I'm using SourceBans++ 1.5.3 with SourceBans Default Theme (next gen style), I clicked on the 'Bans' from Tab (with dashboard, servers...)
It shows empty on the page, I also switched theme and try again it doesn't display anything.
My server goes up to the 30 spikes when 20 players or more are on. I removed sourcebans plugin and everything went back to normal. Is there anyway to stop this issue ?
Could you edit the IP ban evasion time or better make a cvar for it?
It banned a person who had accidentally the same IP as a ban 2 months ago.
The hoster uses dynamic IPs. I also checked the accounts. I think they aren't related (no mutual friends).
i don't know how, but it produces this error
L 03/20/2015 - 19:21:42: [SM] Native "ReadPackString" reported: DataPack operation is out of bounds.
L 03/20/2015 - 19:21:42: [SM] Displaying call stack trace for plugin "sourcebans.smx":
L 03/20/2015 - 19:21:42: [SM] [0] Line 1151, sourcebans.sp::VerifyInsert()
The logs are constantly gives an error .
L 01/17/2015 - 17:30:29: SourceMod error session started
L 01/17/2015 - 17:30:29: Info (map "de_dust2") (file "errors_20150117.log")
L 01/17/2015 - 17:30:29: [sourcecomms.smx] Lost connection to DB. Reconnect after delay.
L 01/17/2015 - 17:30:29: [sourcecomms.smx] Query_VerifyBlock failed: Lost connection to MySQL server at 'reading authorization packet', system error: 0
L 01/17/2015 - 18:35:51: Error log file session closed.
https://cloud.githubusercontent.com/assets/13346898/12110056/f3c2826e-b390-11e5-991d-0100e3e89ce3.jpg
https://cloud.githubusercontent.com/assets/13346898/12110057/fa41843c-b390-11e5-91a5-ecec7ac1735e.jpg
footer on ban add page is normal, but on comms add page - no
https://cloud.githubusercontent.com/assets/13346898/12110158/e75b76a6-b391-11e5-9bab-bce5808dfae7.jpg
https://cloud.githubusercontent.com/assets/13346898/12110164/ee9a0644-b391-11e5-80ab-e84e9c6fff67.jpg
(On ban/comms details not shaded line)
https://cloud.githubusercontent.com/assets/13346898/12110183/2dc0b50c-b392-11e5-9eea-de2f158a4cdb.jpg
https://cloud.githubusercontent.com/assets/13346898/12110184/2fedb53c-b392-11e5-8004-513e9d09766a.jpg)
(Add ban add page style to comms add page :) )
I am getting this error with the latest sourcecomms plugin.
"L 05/10/2015 - 14:00:36: [sourcecomms.smx] You must set valid ServerID
value in sourcebans.cfg!"
I am using the sourcecomms plugins that comes with this sourcebans.
Hello, may be add action with bans "Delete all" ?
(My english is very very bad, i use google translate)
Once a month or so my SourceBans++ installation gets hacked, admins get added; logs get removed and I simply can't do anything to solve it because I have no idea what causes it or what to log in order to see what's causing it.
It's one group that does it to my CS:GO community and to some other Israeli one.
They add themselves as admins and massively ban people from inside the servers (I see the bans in the SourceMod log), then the logs get cleaned. Here's the screenshot of what's left in the system log: http://i.imgur.com/sohDWs1.png
Admin deleted
is when our community admin deleted the hacker's account, nothing else before.
What I've attempted to do in order to fight them:
Edited log deletion to do that instead of clearing the logs -
//pages/admin.settings.php
//Log stuff
$logs = new CSystemLog();
$page = 1;
if (isset($_GET['page']) && $_GET['page'] > 0)
$page = intval($_GET['page']);
if(isset($_GET['log_clear']) && $_GET['log_clear'] == "true")
{
$log = new CSystemLog("w", "Log Clearing Attempt", $userbank->GetProperty('user') . " tried to clear the logs, but the feature is disabled.");
}
Made remote MySQL connections possible only from the web host. (So I can only access the database with a tool like phpmyadmin
)
Scrambled the MySQL password for every user everytime we got hacked.
I'm not any expert in web stuff, I'd appreciate help, at least in knowing how they do it or how to fix it, thanks :)
On file box_admin_comms_search.tpl (Default theme) on line 107 is error.
_
Error at excess quotes.
https://cloud.githubusercontent.com/assets/13346898/12290119/92515024-b9e8-11e5-82d4-8500872f36bb.jpg
Not displayed image maps when you use Workshop map.
File is placed in the appropriate folder: http://bans.awp.by/images/maps/awp_lego_2_winter.jpg
I suspect that this is due to a non-standard name of the current map.
Example:
workshop/569848047/awp_lego_2_winter
instead of the ordinary
awp_lego_2_winter
SourceBans++ 1.5.3
http://bans.awp.by/
Instead of using IpToCountry, take a look at ip2nation, which is smaller and simple to use with PHP.
<?php
$server = ''; // MySQL hostname
$username = ''; // MySQL username
$password = ''; // MySQL password
$dbname = ''; // MySQL db name
$db = mysql_connect($server, $username, $password) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());
$sql = 'SELECT
c.country
FROM
ip2nationCountries c,
ip2nation i
WHERE
i.ip < INET_ATON("'.$_SERVER['REMOTE_ADDR'].'")
AND
c.code = i.country
ORDER BY
i.ip DESC
LIMIT 0,1';
list($countryName) = mysql_fetch_row(mysql_query($sql));
// Output full country name
echo $countryName;
?>
hi, can you please add steam id 3 support when adding admins? because it says invalid steam id, so how in the world am i going to add admins ?
I'd like to request an enhancement to allow users to belong to multiple groups.
Example. I have a group of GMOD servers and a group of CSGO servers. Users can be admin level 3 in csgo but only admin level 1 for gmod. Currently we have things like csgol3gmodl1 and it's quite a mess. Being able to add a user to multiple groups would allow us to keep this organized.
Hello,
i got some issues with quotes in reason insert by Web bans/Comms.
If i choose "Other" as reason and try to add something like
Wrote: "ashdkajshdkjasdkjad" in chat
The Web view will return/show
Wrote: "ashdkajshdkjasdkjad" in chat
If you need other examples just let me know
2d6c89b missed define of xajax_*
After the latest version of CS:GO have a problem with the "blocked" on the ban list repeats several times the player's name.
I've done the update SourceMod, I have done update in the admin panel SourceBans.
How can I resolve the situation and delete these "blocked"?
I also have another problem I can not solve it gives me errors on servers with admins groups ([sb_admcfg.smx](line 7) Unknown group "Master")
And another problem with the plugin "sb_viewbans" it gives me this error: Unable to load plugin "sb_viewbans.smx": Native "SB_Connect" was not found.
I thank you all the help you can give.
After reading the FAQ and trying to remove the // and then disabling the setting in web panel my bans are still empty.
https://cloud.githubusercontent.com/assets/13346898/12136189/b5c70e18-b44d-11e5-97b5-e4d251153d35.jpg
https://cloud.githubusercontent.com/assets/13346898/12136190/b5dfbbb6-b44d-11e5-9824-eacdadc6a8f0.jpg
At bans on IP, in line "Steam3 ID" constantly writes SteamID (unclear from whence it is taken), can make to write "No Steam ID present" ? (green rectangle)
_
And necessary do this block of the same color before the end (red rectangle)
_
And can add style add ban/comms page style to edite ban/comms page?
_
And this link is no work (article on sourcebans site removed/moved)
https://cloud.githubusercontent.com/assets/13346898/12164741/a3700ad4-b520-11e5-977b-189d426ffae6.jpg
Installed latest version. This is on all pages, the text is too large and the page is very stretched down. In general all seen in the screenshots.
http://i2.imageban.ru/out/2015/12/31/cdd7bed560302579d219292b373e17ad.jpg
http://i6.imageban.ru/out/2015/12/31/d6f65b1c3fb11d14f209eb954ddf4eef.jpg
P.S. Google Translate.
Hey
Im getting this error, what to do?
Warning: mysqli_real_connect(): Headers and client library minor version mismatch. Headers:50544 Library:50625 in /var/www/sourcebans/includes/adodb/drivers/adodb-mysqli.inc.php on line 117
My server goes up to the 30 spikes when 20 players or more are on. I removed sourcebans plugin and everything went back to normal. Is there anyway to stop this issue ?
Hello, after installing sourcebans 1.5.3 not displayed page bans, writes the following error:
[256] mysqli error: [1231: Variable 'optimizer_switch' can't be set to the value of 'block_nested_loop=off'] in EXECUTE("set session optimizer_switch='block_nested_loop=off';")
Fatal error on line 77 in file /sourcebans/includes/adodb/adodb-errorhandler.inc.php
/sourcebans/includes/adodb/adodb-errorhandler.inc.php - 77
/sourcebans/includes/adodb/adodb.inc.php - 1071
/sourcebans/includes/adodb/adodb.inc.php - 1046
/sourcebans/pages/page.banlist.php - 42
how you can correct this error?
Nicknames of players and the reason of a ban are displayed incorrectly. In sourcecomms everything is displayed correctly. In sourcebans it is incorrect.
Set the character set UTF-8 database sourcebans.sp
L 01/31/2016 - 16:46:44: [sourcecomms.smx] Lost connection to DB. Reconnect after delay.
L 01/31/2016 - 16:46:44: [sourcecomms.smx] Query_AddBlockInsert failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('STEAM_1:0:157837542', '-GeT_LoW-', UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + 1800, ' at line 1
L 01/31/2016 - 16:46:44: [sourcecomms.smx] Ошибка запроса к базе данных (near "AM_1": syntax error)
L 02/01/2016 - 14:41:34: [sourcecomms.smx] Lost connection to DB. Reconnect after delay.
L 02/01/2016 - 14:41:34: [sourcecomms.smx] Query_AddBlockInsert failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('STEAM_1:1:21443503', 'Nike Pro', UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + 3600, 36' at line 1
L 02/01/2016 - 14:41:34: [sourcecomms.smx] Ошибка запроса к базе данных (near "(": syntax error)
L 02/03/2016 - 10:37:11: [sourcecomms.smx] Lost connection to DB. Reconnect after delay.
L 02/03/2016 - 10:37:11: [sourcecomms.smx] Query_AddBlockInsert failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('STEAM_1:1:44680478', '♛ÃﮐM✪\\\\', UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + ' at line 1
L 02/03/2016 - 10:37:11: [sourcecomms.smx] Ошибка запроса к базе данных (near "=": syntax error)
L 02/03/2016 - 12:36:34: [sourcecomms.smx] Lost connection to DB. Reconnect after delay.
L 02/03/2016 - 12:36:34: [sourcecomms.smx] Query_AddBlockInsert failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('STEAM_1:1:124297957', 'PśÍх', UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + 7200, 72' at line 1
L 02/03/2016 - 12:36:34: [sourcecomms.smx] Ошибка запроса к базе данных (near "'STEAM_1:0:50132250'": syntax error)
Ошибка запроса к базе данных = Failed to query the database
There is a small failure in BoxToMask function (sourcebans.js) on line 482.
The function checks the element with the id p29 for the right ADMIN_EDIT_GROUPS but the element p24 represents this right.
to fix this issue you must change the line to this:
if(document.getElementById('p24').get('checked'))
When i try to login through steam i'm getting redirected to our sourcebans website but i'm not logged in.
How can i fix this ? cant find any errors in apache logfile.
In Serverlist page buttos lost then i click to empty server... i see only "No players in the server"
i dont know why admins have onle permission to 1 week ban not longer. Can you tell me how to change or add ban options?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.