mirror of
https://github.com/hak5/nano-tetra-modules.git
synced 2025-10-29 16:58:09 +00:00
113 lines
4.0 KiB
PHP
113 lines
4.0 KiB
PHP
<?php namespace pineapple;
|
|
|
|
/**
|
|
* Foxtrot (C) 2016 <foxtrotnull@gmail.com>
|
|
**/
|
|
|
|
class ModuleMaker extends Module
|
|
{
|
|
public function route()
|
|
{
|
|
switch ($this->request->action) {
|
|
case 'generateModule':
|
|
$this->generateModule();
|
|
break;
|
|
|
|
case 'getInstalledModules':
|
|
$this->getInstalledModules();
|
|
break;
|
|
|
|
case 'removeModule':
|
|
$this->removeModule();
|
|
break;
|
|
}
|
|
}
|
|
|
|
private function generateModule()
|
|
{
|
|
/* Make life easier */
|
|
$moduleTitle = $this->request->moduleTitle;
|
|
$moduleDescription = $this->request->moduleDesc;
|
|
$moduleVersion = $this->request->moduleVersion;
|
|
$moduleAuthor = str_replace(' ', '', $this->request->moduleAuthor);
|
|
$moduleName = str_replace(' ', '', $moduleTitle);
|
|
$modulePath = "/pineapple/modules/{$moduleName}";
|
|
$templates = "/pineapple/modules/ModuleMaker/Extra";
|
|
|
|
/* Check whether the user has acceptable input and check if the module already exists */
|
|
if(empty($moduleTitle)){
|
|
$this->error = "The module name cannot be empty.";
|
|
} elseif (file_exists($modulePath)) {
|
|
$this->error = "A module with this name already exists.";
|
|
} elseif(empty($moduleDescription)){
|
|
$this->error = "You must specify a description.";
|
|
} elseif(!is_numeric($moduleVersion)){
|
|
$this->error = "Module version must be in the form of X.X";
|
|
} elseif(substr_count($moduleVersion, '.') <1 || substr_count($moduleVersion, '.') >1){
|
|
$this->error = "Module version must only contain one period.";
|
|
} elseif(empty($moduleAuthor)){
|
|
$this->error = "You must supply an Author.";
|
|
}
|
|
|
|
/* If an error is set, return early */
|
|
if($this->error){
|
|
return;
|
|
}
|
|
|
|
if(substr_count($moduleVersion, '.') <1){
|
|
|
|
}
|
|
|
|
/* If the user passes all the above checks, proceed to create the module */
|
|
mkdir("{$modulePath}");
|
|
mkdir("{$modulePath}/js/");
|
|
mkdir("{$modulePath}/api/");
|
|
copy("{$templates}/module.html", "{$modulePath}/module.html");
|
|
copy("{$templates}/module.js", "{$modulePath}/js/module.js");
|
|
exec("sed -i 's/_MODULE_NAME/{$moduleName}/g' {$modulePath}/js/module.js");
|
|
copy("{$templates}/module.php", "{$modulePath}/api/module.php");
|
|
exec("sed -i 's/_MODULE_NAME/{$moduleName}/g' {$modulePath}/api/module.php");
|
|
|
|
/* Create a module.info with the data the user has input */
|
|
file_put_contents("{$modulePath}/module.info", json_encode(array("title" => $moduleTitle, "description" => $moduleDescription, "version" => $moduleVersion, "author" => $moduleAuthor), JSON_PRETTY_PRINT));
|
|
|
|
|
|
/* Once the module has been created, set the response to success */
|
|
$this->response = array("success" => true);
|
|
|
|
}
|
|
|
|
private function getInstalledModules()
|
|
{
|
|
$modules = array();
|
|
$modulesDirectories = scandir('/pineapple/modules');
|
|
foreach ($modulesDirectories as $moduleDirectory) {
|
|
if ($moduleDirectory[0] === ".") {
|
|
continue;
|
|
}
|
|
|
|
if (file_exists("/pineapple/modules/{$moduleDirectory}/module.info")) {
|
|
$moduleData = json_decode(file_get_contents("/pineapple/modules/{$moduleDirectory}/module.info"));
|
|
|
|
$module = array();
|
|
$module['title'] = $moduleData->title;
|
|
$module['author'] = $moduleData->author;
|
|
$module['version'] = $moduleData->version;
|
|
$module['description'] = $moduleData->description;
|
|
if (isset($moduleData->system)) {
|
|
$module['type'] = "System";
|
|
} else {
|
|
$module['type'] = "GUI";
|
|
}
|
|
|
|
$modules[$moduleDirectory] = $module;
|
|
}
|
|
}
|
|
$this->response = array("installedModules" => $modules);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|