atheme/tools/anope2atheme.php
2025-01-05 14:29:17 +00:00

411 lines
12 KiB
PHP

<?php
/**
* Created by Klaas Tammling. (https://gist.github.com/KlaasT/449b28c63db129a7714d41b8e2074d90)
* Project: anope2atheme
* User: ktammling
* Date: 10.10.2016
* Time: 15:55
*/
$mu_hold = 0x00000001;
$mu_neverop = 0x00000002;
$mu_noop = 0x00000004;
$mu_waitauth = 0x00000008;
$mu_hidemail = 0x00000010;
$mu_oldalias = 0x00000020;
$mu_nomemo = 0x00000040;
$mu_emailmemos = 0x00000080;
$mu_cryptpass = 0x00000100;
$mu_old_sasl = 0x00000200;
$mu_noburstlogin = 0x00000400;
$mu_enforce = 0x00000800;
$mu_usepriv = 0x00001000;
$mu_private = 0x00002000;
$mu_quietchg = 0x00004000;
$levels['VOP'] = "+AV";
$levels['HOP'] = "+AHehirtv";
$levels['AOP'] = "+AOehiortv";
$levels['SOP'] = "+AOaefhiorstv";
$levels['QOP'] = "+AFORaefhioqrstv";
$access[1] = "+A";
$access[3] = "+VA";
$access[4] = "+vHiA";
$access[5] = "+vhoOirtA";
$access[10] = "+vhoOairRftA";
$access[15] = "+vhoOairRftA";
$access[20] = "+vhoOairRftA";
$access[999] = "+vhoOairRftA";
$access[9000] = "+vhoOaqsirRftA";
$access[9999] = "+vhoOaqsirRftA";
$access[10000] = "+vhoOaqsirRftA";
$tdata = file_get_contents("anope.db");
$data = explode("\n", $tdata);
unset($tdata);
$userset = array();
#$aliasset = array();
$channelset = array();
$is_mu = false;
$is_na = false;
$is_cu = false;
$is_ca = false;
$mu_account = "";
$mu_pass = "";
$mu_lang = "";
$mu_email = "";
$mu_register = "";
$mu_flags = 0;
$channel_flags = "+";
$mu_vhost_ident = "";
$mu_vhost_host = "";
$mu_vhost_creator = "";
$mu_vhost_time = "";
for($i = 0; $i < count($data); $i++) {
$line = $data[$i];
$data2 = explode(" ", $line);
if($is_mu or ($data2[0] == 'OBJECT' && $data2[1] == "NickCore")) {
$is_md = false;
$is_mu = true;
$is_cu = false;
$is_na = false;
if (isset($data2[1])) {
if ($data2[1] == "pass") {
$passvars = explode(":", $data2[2]);
$pass = $passvars[1];
$mu_pass = '$rawmd5$'.$pass;
}
if ($data2[1] == "display") {
$mu_account = $data2[2];
}
if ($data2[1] == "language") {
$mu_lang = (isset($data2[2])) ? $data2[2] : "default";
}
if ($data2[1] == "email") {
$mu_email = (isset($data2[2])) ? $data2[2] : "admin@st-city.net";
}
if ($data2[1] == "time_registered" && isset($data2[2])) {
$mu_register = $data2[2];
}
if($data2[1] == "HIDE_EMAIL")
$mu_flags |= $mu_hidemail;
if($data2[1] == "NS_PRIVATE")
$mu_flags |= $mu_private;
if($data2[1] == "NS_SECURE")
$mu_flags |= $mu_enforce;
$mu_flags = 272;
}
if (!empty($mu_account)) {
$userset[$mu_account] = array(
"mu_pass" => $mu_pass,
"mu_account" => $mu_account,
"mu_lang" => $mu_lang,
"mu_email" => $mu_email,
"mu_register" => $mu_register,
"mu_flags" => $mu_flags,
);
}
if ($data2[0] == "END") {
$mu_account = "";
$mu_pass = "";
$mu_lang = "";
$mu_email = "";
$mu_register = "";
$is_mu = false;
}
}
if($is_na or ($data2[0] == 'OBJECT' && $data2[1] == "NickAlias")) {
$is_md = false;
$is_mu = false;
$is_cu = false;
$is_na = true;
if (isset($data2[1]) && $data2[1]=="nick") {
$tmplined = 'MN ' . $data2[2];
}
if (isset($data2[1]) && $data2[1] == "time_registered") {
$mu_register = $data2[2];
}
if (isset($data2[1]) && $data2[1]=="nc") {
$mu_account = $data2[2];
}
if (isset($data2[1]) && $data2[1] == "vhost_ident") {
$mu_vhost_ident = $data2[2];
}
if (isset($data2[1]) && $data2[1] == "vhost_host") {
$mu_vhost_host = $data2[2];
}
if (isset($data2[1]) && $data2[1] == "vhost_creator") {
$mu_vhost_creator = $data2[2];
}
if (isset($data2[1]) && $data2[1] == "vhost_time") {
$mu_vhost_time = $data2[2];
}
if ($data2[0] == "END") {
$tmplined .= " ".$mu_account." ".$mu_register." ".time();
$lastnick = $mu_account;
$lastid = 'NA';
$dataNA = explode(" ", $tmplined);
if (!empty($userset[$dataNA[1]])) {
$userset[$dataNA[2]]['mu_register'] = $mu_register;
}
else {
$userset[$dataNA[2]]['aliases'][$dataNA[1]] = array(
"mu_register" => $mu_register,
"last_seen" => time(),
);
$userset[$dataNA[2]]['mu_register'] = $mu_register;
}
if (!empty($mu_vhost_host)) {
$userset[$mu_account]['vhost_ident'] = $mu_vhost_ident;
$userset[$mu_account]['vhost_host'] = $mu_vhost_host;
$userset[$mu_account]['vhost_creator'] = $mu_vhost_creator;
$userset[$mu_account]['vhost_time'] = $mu_vhost_time;
}
$mu_vhost_ident = "";
$mu_vhost_host = "";
$mu_vhost_creator = "";
$mu_vhost_time = "";
$mu_account = "";
$mu_pass = "";
$mu_lang = "";
$mu_email = "";
$mu_register = "";
$is_na = false;
$tmplined = "";
}
}
if($is_cu or ($data2[0] == 'OBJECT' && $data2[1] == "ChannelInfo")) {
$is_md = false;
$is_mu = false;
$is_cu = true;
$is_na = false;
if (isset($data2[1]) && $data2[1] == 'name') {
$cu_name = $data2[2];
}
if (isset($data2[1]) && $data2[1] == 'time_registered') {
$cu_register = $data2[2];
}
if (isset($data2[1]) && $data2[1] == 'last_used') {
$cu_last_used = $data2[2];
}
if (isset($data2[1]) && $data2[1] == 'founder') {
$cu_founder = $data2[2];
}
if (isset($data2[1]) && $data2[1] == 'last_topic') {
$cu_last_topic = "";
for($i2 = 2; $i2 < count($data2); $i2++) {
if (!empty($cu_last_topic)) {
$cu_last_topic .= " ".$data2[$i2];
}
else {
$cu_last_topic .= $data2[$i2];
}
}
}
if (isset($data2[1]) && $data2[1] == 'last_topic_setter') {
$cu_last_topic_setter = $data2[2];
}
if (isset($data2[1]) && $data2[1] == 'last_topic_time') {
$cu_last_topic_time = $data2[2];
}
if (isset($data2[1]) && $data2[1] == 'KEEPTOPIC') {
if ($data2[2] == "1") {
$channel_flags .= "k";
}
}
if (isset($data2[1]) && $data2[1] == 'CS_SECURE') {
if ($data2[2] == "1") {
$channel_flags .= "z";
}
}
if (isset($data2[1]) && $data2[1] == 'CS_PRIVATE') {
if ($data2[2] == "1") {
$channel_flags .= "p";
}
}
if (isset($data2[1]) && $data2[1] == 'CS_RESTRICT') {
if ($data2[2] == "1") {
$channel_flags .= "r";
}
}
if (!empty($cu_name)) {
$channelset[$cu_name] = array(
"cu_name" => $cu_name,
"cu_register" => $cu_register,
"cu_last_used" => $cu_last_used,
"cu_founder" => $cu_founder,
"cu_last_topic" => $cu_last_topic,
"cu_last_topic_setter" => $cu_last_topic_setter,
"cu_last_topic_time" => $cu_last_topic_time,
##"channel_flags" => $channel_flags,
"channel_flags" => 600,
);
}
if ($data2[0] == "END") {
$is_cu = false;
$cu_name = "";
$cu_register = 0;
$cu_last_used = 0;
$cu_founder = "";
$cu_last_topic = "";
$cu_last_topic_setter = "";
$cu_last_topic_time = 0;
$channel_flags = "+";
}
}
if($is_ca or ($data2[0] == 'OBJECT' && $data2[1] == "ChanAccess")) {
$is_md = false;
$is_mu = false;
$is_cu = false;
$is_na = false;
$is_ca = true;
if (isset($data2[1]) && $data2[1] == "provider") {
$ca_provider = $data2[2];
}
if (isset($data2[1]) && $data2[1] == "ci") {
$ca_channel = $data2[2];
}
if (isset($data2[1]) && $data2[1] == "mask") {
$ca_mask = $data2[2];
}
if (isset($data2[1]) && $data2[1] == "creator") {
$ca_creator = $data2[2];
}
if (isset($data2[1]) && $data2[1] == "created") {
$ca_created = $data2[2];
}
if (isset($data2[1]) && $data2[1] == "data") {
if ($ca_provider == "access/xop") {
$ca_level = $levels[$data2[2]];
}
else if ($ca_provider == "access/access") {
$ca_level = $access[$data2[2]];
}
}
if ($data2[0] == "END") {
$channel_access = array(
"ca_channel" => $ca_channel,
"ca_mask" => $ca_mask,
"ca_creator" => $ca_creator,
"ca_created" => $ca_created,
"ca_level" => $ca_level,
);
if (!empty($userset[$ca_mask])) {
$channelset[$ca_channel]['channel_access'][] = $channel_access;
}
$is_ca = false;
$channel_access = array();
$ca_channel = "";
$ca_mask = "";
$ca_creator = "";
$ca_created = "";
$ca_level = "";
$ca_provider = "";
}
}
}
$atheme = fopen("atheme.db", 'w');
fwrite($atheme, "DBV 7\n");
fwrite($atheme, "CF +vVoOtsriRfhHAb\n");
/* MDU Obi_Wan private:usercloak city-1464.galaxy-media.highway.hyperspace
MDU Obi_Wan private:usercloak-assigner Obi_Wan
MDU Obi_Wan private:usercloak-timestamp 1476550194
*/
foreach ($userset as $key => $value) {
fwrite($atheme, "MU ".$value['mu_account']." ".$value['mu_pass']. " ".$value['mu_email']." ".$value['mu_register']." ".time()." ".$mu_flags." ".$mu_lang."\n");
if (!empty($value['vhost_host'])) {
fwrite($atheme, "MDU ".$value['mu_account']." private:usercloak ".$value['vhost_host']."\n");
}
if (!empty($value['vhost_creator'])) {
fwrite($atheme, "MDU ".$value['mu_account']." private:usercloak-assigner ".$value['vhost_creator']."\n");
}
if (!empty($value['vhost_time'])) {
fwrite($atheme, "MDU ".$value['mu_account']." private:usercloak-timestamp ".$value['vhost_time']."\n");
}
if (isset($value['aliases'])) {
foreach ($value['aliases'] as $key2 => $value2) {
fwrite($atheme, "MN ". $value['mu_account'] ." ".$key2." ".$value2['mu_register']." ".$value2['last_seen']."\n");
}
}
}
foreach ($channelset as $key => $value) {
fwrite($atheme, "MC ".$key." ".$value['cu_register']." ".$value['cu_last_used']." ".$value['channel_flags']." 272 6 0\n");
fwrite($atheme, "CA ".$key." ".$value['cu_founder']." +AFORafhioqrstv ".$value['cu_register']." ".$value['cu_founder']."\n");
if (isset($value['channel_access'])) {
foreach ($value['channel_access'] as $key2 => $value2) {
fwrite($atheme, "CA ". $value2['ca_channel']." ".$value2['ca_mask']." ".$value2['ca_level']." ".$value2['ca_created']." ".$value2['ca_creator']."\n");
# die($key2);
}
}
fwrite($atheme, "MDC ".$key." private:topic:setter ".$value['cu_last_topic_setter']."\n");
fwrite($atheme, "MDC ".$key." private:topic:text ".$value['cu_last_topic']."\n");
fwrite($atheme, "MDC ".$key." private:topic:ts ".$value['cu_last_topic_time']."\n");
}
fclose($atheme);