Browse Source

init

release/0.1
Björn 4 years ago
commit
882103af6d
34 changed files with 6595 additions and 0 deletions
  1. +16
    -0
      .editorconfig
  2. +15
    -0
      .gitignore
  3. +37
    -0
      README.md
  4. +0
    -0
      app/Commands/.gitkeep
  5. +59
    -0
      app/Commands/InstallMariadbCommand.php
  6. +60
    -0
      app/Commands/InstallPhpFpmCommand.php
  7. +58
    -0
      app/Commands/InstallUfwCommand.php
  8. +62
    -0
      app/Commands/MonitoringStateCommand.php
  9. +126
    -0
      app/Commands/NginxCertsCommand.php
  10. +60
    -0
      app/Commands/NginxInstallCommand.php
  11. +176
    -0
      app/Commands/NginxVhostsCommand.php
  12. +0
    -0
      app/Console/Spinner.php
  13. +20
    -0
      app/Facades/Install.php
  14. +20
    -0
      app/Facades/Nginx.php
  15. +28
    -0
      app/Helpers/InstallHelper.php
  16. +131
    -0
      app/Helpers/NginxConfigurationHelper.php
  17. +73
    -0
      app/Helpers/NginxTemplateHelper.php
  18. +28
    -0
      app/Providers/AppServiceProvider.php
  19. +50
    -0
      bootstrap/app.php
  20. +0
    -0
      box.json
  21. +53
    -0
      composer.json
  22. +5035
    -0
      composer.lock
  23. +60
    -0
      config/app.php
  24. +80
    -0
      config/commands.php
  25. +100
    -0
      config/logging.php
  26. +72
    -0
      config/logo.php
  27. +28
    -0
      install.sh
  28. +53
    -0
      mcp
  29. +24
    -0
      phpunit.xml.dist
  30. +1
    -0
      test.html
  31. +22
    -0
      tests/CreatesApplication.php
  32. +20
    -0
      tests/Feature/InspiringCommandTest.php
  33. +10
    -0
      tests/TestCase.php
  34. +18
    -0
      tests/Unit/ExampleTest.php

+ 16
- 0
.editorconfig View File

@ -0,0 +1,16 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[*.yml]
indent_style = space
indent_size = 2

+ 15
- 0
.gitignore View File

@ -0,0 +1,15 @@
vendor
.idea
.vscode
.vagrant
.phpunit.result.cache
database/database.sqlite
.env
storage/logs/*
storage/tmp
!storage/tmp/.gitkeep
resources/templates/nginx
!resources/templates/nginx/.gitkeep

+ 37
- 0
README.md View File

@ -0,0 +1,37 @@
<p align="center">
<img title="Laravel Zero" height="100" src="https://raw.githubusercontent.com/laravel-zero/docs/master/images/logo/laravel-zero-readme.png" />
</p>
<p align="center">
<a href="https://github.com/laravel-zero/framework/actions"><img src="https://img.shields.io/github/workflow/status/laravel-zero/framework/Continuous%20Integration.svg" alt="Build Status"></img></a>
<a href="https://scrutinizer-ci.com/g/laravel-zero/framework"><img src="https://img.shields.io/scrutinizer/g/laravel-zero/framework.svg" alt="Quality Score"></img></a>
<a href="https://packagist.org/packages/laravel-zero/framework"><img src="https://poser.pugx.org/laravel-zero/framework/d/total.svg" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/laravel-zero/framework"><img src="https://poser.pugx.org/laravel-zero/framework/v/stable.svg" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/laravel-zero/framework"><img src="https://poser.pugx.org/laravel-zero/framework/license.svg" alt="License"></a>
</p>
<h4> <center>This is a <bold>community project</bold> and not an official Laravel one </center></h4>
Laravel Zero was created by, and is maintained by [Nuno Maduro](https://github.com/nunomaduro), and is a micro-framework that provides an elegant starting point for your console application. It is an **unofficial** and customized version of Laravel optimized for building command-line applications.
- Built on top of the [Laravel](https://laravel.com) components.
- Optional installation of Laravel [Eloquent](https://laravel-zero.com/docs/database/), Laravel [Logging](https://laravel-zero.com/docs/logging/) and many others.
- Supports interactive [menus](https://laravel-zero.com/docs/build-interactive-menus/) and [desktop notifications](https://laravel-zero.com/docs/send-desktop-notifications/) on Linux, Windows & MacOS.
- Ships with a [Scheduler](https://laravel-zero.com/docs/task-scheduling/) and a [Standalone Compiler](https://laravel-zero.com/docs/build-a-standalone-application/).
- Integration with [Collision](https://github.com/nunomaduro/collision) - Beautiful error reporting
------
## Documentation
For full documentation, visit [laravel-zero.com](https://laravel-zero.com/).
## Support the development
**Do you like this project? Support it by donating**
- PayPal: [Donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L)
- Patreon: [Donate](https://www.patreon.com/nunomaduro)
## License
Laravel Zero is an open-source software licensed under the [MIT license](https://github.com/laravel-zero/laravel-zero/blob/stable/LICENSE.md).

+ 0
- 0
app/Commands/.gitkeep View File


+ 59
- 0
app/Commands/InstallMariadbCommand.php View File

@ -0,0 +1,59 @@
<?php
namespace App\Commands;
use Illuminate\Console\Scheduling\Schedule;
use LaravelZero\Framework\Commands\Command;
use Illuminate\Support\Facades\File;
use App\Facades\Install;
use Log;
class InstallMariadbCommand extends Command
{
/**
* The signature of the command.
*
* @var string
*/
protected $signature = 'install:nginx';
/**
* The description of the command.
*
* @var string
*/
protected $description = 'Install mariadb and set configuration';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->info('Mariadb install...');
exec('apt update 2>&1');
exec('apt install -y mariadb-server mariadb-client 2>&1');
$link = mysqli_connect('127.0.0.1', 'root', $password);
//exec('UPDATE mysql.user SET Password=PASSWORD('${install_mysql_password}') WHERE User='root';');
//mysql_query("UPDATE mysql.user SET Password=PASSWORD('$password') WHERE User='root';");
//
mysqli_close($link);
if (Install::isReady('mariadb-server mariadb-client')) {
// get status of nginx
exec('nginx -v 2>&1', $output);
$status = "$output[0] installed";
$this->info($status);
Log::info($status);
}
}
}

+ 60
- 0
app/Commands/InstallPhpFpmCommand.php View File

@ -0,0 +1,60 @@
<?php
namespace App\Commands;
use Illuminate\Console\Scheduling\Schedule;
use LaravelZero\Framework\Commands\Command;
use Illuminate\Support\Facades\File;
use App\Facades\Install;
use Log;
class InstallPhpFpmCommand extends Command
{
/**
* The signature of the command.
*
* @var string
*/
protected $signature = 'install:php-fpm';
/**
* The description of the command.
*
* @var string
*/
protected $description = 'Install php-fpm';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//$option = $this->menu('Install')
// ->addOption('nginx', 'Nginx')
// ->open();
//File::put('/etc/kkk', '/etc/kkk');
//$workers = exec('echo $(grep ^processor /proc/cpuinfo | wc -l)');
//$
//$
$this->info('Install PHP FPM');
exec('apt update 2>&1');
exec('apt install -y php-fpm php-curl php-mysql php-pear php-mbstring php-dev php-gd 2>&1');
if (Install::isReady('nginx')) {
// get status of nginx
exec('nginx -v 2>&1', $output);
$status = "$output[0] installed";
$this->info($status);
Log::info($status);
}
}
}

+ 58
- 0
app/Commands/InstallUfwCommand.php View File

@ -0,0 +1,58 @@
<?php
namespace App\Commands;
use Illuminate\Console\Scheduling\Schedule;
use LaravelZero\Framework\Commands\Command;
use Illuminate\Support\Facades\File;
use App\Facades\Install;
use Log;
class InstallUfwCommand extends Command
{
/**
* The signature of the command.
*
* @var string
*/
protected $signature = 'install:nginx';
/**
* The description of the command.
*
* @var string
*/
protected $description = 'Install mariadb and set configuration';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->line('Install ufw...');
exec('apt update 2>&1');
exec('apt install -y ufw 2>&1');
exec('ufw allow ssh');
exec('ufw allow "Nginx Full"');
exec('ufw allow "OpenSSH"');
// starting
exec('service ufw start');
exec('echo "y" | ufw enable');
if (Install::isReady('ufw')) {
$status = "Install ufw...success";
$this->info($status);
Log::info($status);
} else {
$this->error('Install ufw...failed');
}
}
}

+ 62
- 0
app/Commands/MonitoringStateCommand.php View File

@ -0,0 +1,62 @@
<?php
namespace App\Commands;
use Illuminate\Console\Scheduling\Schedule;
use LaravelZero\Framework\Commands\Command;
use Log;
class MonitoringStateCommand extends Command
{
/**
* The signature of the command.
*
* @var string
*/
protected $signature = 'monitoring:state';
/**
* The description of the command.
*
* @var string
*/
protected $description = 'I';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
// getting harddisks
exec('df -H | grep \'^/dev\'', $harddisks);
//
exec('$(apt list --upgradable 2>/dev/null | grep "\-security" | wc -l)', $securityUpgrades);
if (isset($securityUpgrades[0]) && intval($securityUpgrades[0]) > 0) {
exec('apt list --upgradable 2>/dev/null | grep "\-security"', $securityUpgrades);
// remove listening
if (isset($securityUpgrades[1])) {
unset($securityUpgrades[1]);
}
}
// getting info of files
exec('echo $(apt list --upgradable 2>/dev/null | grep -v "\-security" | wc -l)', $upgrades);
if (isset($upgrades[0]) && intval($upgrades[0]) > 0) {
exec('apt list --upgradable 2>/dev/null | grep -v "\-security"', $upgrades);
// remove listening
if (isset($upgrades[1])) {
unset($upgrades[1]);
}
}
echo (implode("\n", $upgrades));
}
}

+ 126
- 0
app/Commands/NginxCertsCommand.php View File

@ -0,0 +1,126 @@
<?php
namespace App\Commands;
use Illuminate\Console\Scheduling\Schedule;
use LaravelZero\Framework\Commands\Command;
use Illuminate\Support\Facades\File;
use App\Facades\Install;
use PhpSchool\CliMenu\Builder\CliMenuBuilder;
use PhpSchool\CliMenu\CliMenu;
use PhpSchool\CliMenu\MenuItem\CheckboxItem;
use PhpSchool\CliMenu\Style\SelectableStyle;
use Log;
use App\Facades\Nginx;
class NginxCertsCommand extends Command
{
/**
* The signature of the command.
*
* @var string
*/
protected $signature = 'nginx:certs';
/**
* The description of the command.
*
* @var string
*/
protected $description = 'Create and Manage Nginx Vhosts';
/**
*
*
*/
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
var_dump(Nginx::getVhosts());
// create menu
//$main = $this->menu('Nginx Let\'s Encrypt');
//$main
// ->addLineBreak('-')
// ->open();
/***
$itemCallable = function(CliMenu $menu) {
// getting sites-available
$sitesAvailable = scandir('/etc/nginx/sites-available');
// getting sites-endabled
$sitesEnabled = scandir('/etc/nginx/sites-enabled');
foreach($sitesAvailable as $site) {
if ($site !== '.' && $site !== '..') {
// getting title
$title = str_replace('.conf', '', $site);
$checkbox = new CheckboxItem('enabled', function(CliMenu $menu) use ($site, $title) {
// check status
if ($menu->getSelectedItem()->getChecked()) {
symlink('/etc/nginx/sites-available/'.$site, '/etc/nginx/sites-enabled/'.$site);
$status = 'enabled';
} else {
unlink('/etc/nginx/sites-enabled/'.$site);
$status = 'disabled';
}
// starting
exec('service nginx restart');
exec('service nginx status', $output);
if (strpos(implode(' ', $output), 'active') !== false) {
$menu->confirm($title.' is '.$status.'!')->display('OK!');
} else {
$menu->confirm('Error! Something not working!')->display('OK!');
}
});
// adding checkbox
if (in_array($site, $sitesEnabled)) {
$checkbox->setChecked(true);
}
$menuMain
->addSubmenu($title, function(CliMenuBuilder $builder) use ($site, $title, $checkbox) {
$builder->setTitle("Nginx > $title")
->addItem('edit', function(CliMenu $menu) use ($site, $title) {
system('nano /etc/nginx/sites-available/'.$site.' > `tty`');
})
->addItem('delete', function(CliMenu $menu) use ($site) {
if (file_exists('/etc/nginx/sites-enabled/'.$site)) {
$menu->confirm('Error! Please disable '.$title.' first!')->display('OK!');
} else {
unlink('/etc/nginx/sites-available/'.$site);
$menu->confirm("$site is deleted!")->display('OK!');
}
})
->addLineBreak('-')
->addMenuItem($checkbox)
->addLineBreak('-');
});
}
}
};*/
}
}

+ 60
- 0
app/Commands/NginxInstallCommand.php View File

@ -0,0 +1,60 @@
<?php
namespace App\Commands;
use Illuminate\Console\Scheduling\Schedule;
use LaravelZero\Framework\Commands\Command;
use Illuminate\Support\Facades\File;
use App\Facades\Install;
use Log;
class NginxInstallCommand extends Command
{
/**
* The signature of the command.
*
* @var string
*/
protected $signature = 'nginx:install';
/**
* The description of the command.
*
* @var string
*/
protected $description = 'Install Nginx';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//$option = $this->menu('Install')
// ->addOption('nginx', 'Nginx')
// ->open();
//File::put('/etc/kkk', '/etc/kkk');
//$workers = exec('echo $(grep ^processor /proc/cpuinfo | wc -l)');
//$
//$
$this->info('Nginx install...');
exec('apt update 2>&1');
exec('apt install -y nginx 2>&1');
if (Install::isReady('nginx')) {
// get status of nginx
exec('nginx -v 2>&1', $output);
$status = "$output[0] installed";
$this->info($status);
Log::info($status);
}
}
}

+ 176
- 0
app/Commands/NginxVhostsCommand.php View File

@ -0,0 +1,176 @@
<?php
namespace App\Commands;
use Illuminate\Console\Scheduling\Schedule;
use LaravelZero\Framework\Commands\Command;
use Illuminate\Support\Facades\File;
use App\Facades\Install;
use PhpSchool\CliMenu\Builder\CliMenuBuilder;
use PhpSchool\CliMenu\CliMenu;
use PhpSchool\CliMenu\MenuItem\CheckboxItem;
use PhpSchool\CliMenu\Style\SelectableStyle;
use Log;
class NginxVhostsCommand extends Command
{
// path templates
const TEMPLATES_DIR = '/resources/templates/nginx';
/**
* The signature of the command.
*
* @var string
*/
protected $signature = 'nginx:vhosts';
/**
* The description of the command.
*
* @var string
*/
protected $description = 'Create and Manage Nginx Vhosts';
/**
*
*
*
*/
private function add(CliMenuBuilder $builder)
{
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
// create menu
$main = $this->menu(self::MENU_TITLE)
->addSubMenu('add', function(CliMenuBuilder $builder) {
// getting templates
$templates = scandir(base_path().self::TEMPLATES_DIR);
foreach($templates as $template) {
$builder
->addSubMenu($template, function(CliMenuBuilder $builder) use ($template) {
$configuration = [
'domain' => '',
'ssl' => true,
'redirect_www' => true
];
$checkboxSSL = new CheckboxItem('ssl', function(CliMenu $menu) use (&$configuration) {
$configuration['ssl'] = $menu->getSelectedItem()->getChecked();
});
$checkboxSSL->setChecked($configuration['ssl']);
$checkboxRedirect = new CheckboxItem('redirect www', function(CliMenu $menu) use (&$configuration) {
$configuration['redirect www'] = $menu->getSelectedItem()->getChecked();
});
$checkboxRedirect->setChecked($configuration['redirect_www']);
$builder
->setTitle('Nginx Vhosts > add > '.$template)
->addItem('domain', function(CliMenu $menu) use (&$configuration) {
$result = $menu->askText()->ask();
$configuration['domain'] = $result->fetch();
$menu->getSelectedItem()->setText('domain -> '.$result->fetch());
$menu->redraw();
})
->addLineBreak('-')
->addMenuItem($checkboxSSL)
->addMenuItem($checkboxRedirect)
->addLineBreak('-')
->addItem('save', function() use (&$configuration) {
var_dump($configuration);
})
->addLineBreak('-');
});
}
//exec('touch /etc/nginx/sites-available/');
})
->addLineBreak('-');
/***
$itemCallable = function(CliMenu $menu) {
// getting sites-available
$sitesAvailable = scandir('/etc/nginx/sites-available');
// getting sites-endabled
$sitesEnabled = scandir('/etc/nginx/sites-enabled');
foreach($sitesAvailable as $site) {
if ($site !== '.' && $site !== '..') {
// getting title
$title = str_replace('.conf', '', $site);
$checkbox = new CheckboxItem('enabled', function(CliMenu $menu) use ($site, $title) {
// check status
if ($menu->getSelectedItem()->getChecked()) {
symlink('/etc/nginx/sites-available/'.$site, '/etc/nginx/sites-enabled/'.$site);
$status = 'enabled';
} else {
unlink('/etc/nginx/sites-enabled/'.$site);
$status = 'disabled';
}
// starting
exec('service nginx restart');
exec('service nginx status', $output);
if (strpos(implode(' ', $output), 'active') !== false) {
$menu->confirm($title.' is '.$status.'!')->display('OK!');
} else {
$menu->confirm('Error! Something not working!')->display('OK!');
}
});
// adding checkbox
if (in_array($site, $sitesEnabled)) {
$checkbox->setChecked(true);
}
$menuMain
->addSubmenu($title, function(CliMenuBuilder $builder) use ($site, $title, $checkbox) {
$builder->setTitle("Nginx > $title")
->addItem('edit', function(CliMenu $menu) use ($site, $title) {
system('nano /etc/nginx/sites-available/'.$site.' > `tty`');
})
->addItem('delete', function(CliMenu $menu) use ($site) {
if (file_exists('/etc/nginx/sites-enabled/'.$site)) {
$menu->confirm('Error! Please disable '.$title.' first!')->display('OK!');
} else {
unlink('/etc/nginx/sites-available/'.$site);
$menu->confirm("$site is deleted!")->display('OK!');
}
})
->addLineBreak('-')
->addMenuItem($checkbox)
->addLineBreak('-');
});
}
}
};*/
$main->addLineBreak('-')->open();
}
}

+ 0
- 0
app/Console/Spinner.php View File


+ 20
- 0
app/Facades/Install.php View File

@ -0,0 +1,20 @@
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
/**
* Install
*
* @author Björn Hase
* @license http://opensource.org/licenses/MIT The MIT License
* @link https://github.com/nirgendswo/fuzzy-cms GitHub Repository
*/
class Install extends Facade
{
protected static function getFacadeAccessor()
{
return 'App\Helpers\InstallHelper';
}
}

+ 20
- 0
app/Facades/Nginx.php View File

@ -0,0 +1,20 @@
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
/**
* Nginx
*
* @author Björn Hase
* @license http://opensource.org/licenses/MIT The MIT License
* @link https://github.com/nirgendswo/fuzzy-cms GitHub Repository
*/
class Nginx extends Facade
{
protected static function getFacadeAccessor()
{
return 'App\Helpers\NginxHelper';
}
}

+ 28
- 0
app/Helpers/InstallHelper.php View File

@ -0,0 +1,28 @@
<?php
namespace App\Helpers;
class InstallHelper
{
//
const PACKAGE_STATUS = 'Status: install ok installed';
/**
* check if a packege is installed
*
* @param string $name
* @return boolean
*/
public function isReady($name)
{
$result = false;
exec('echo $(dpkg -s nginx 2>&1 | grep "'.self::PACKAGE_STATUS.'")', $output);
if (isset($output[0]) && $output[0] === self::PACKAGE_STATUS) {
$result = true;
}
return $result;
}
}

+ 131
- 0
app/Helpers/NginxConfigurationHelper.php View File

@ -0,0 +1,131 @@
<?php
namespace App\Helpers;
/**
*
*
*
*
*/
class NginxHelper
{
// path for available files
const SITES_AVAILABLE = '/etc/nginx/sites-available';
// path for enabled files
const SITES_ENABLED = '/etc/nginx/sites-enabled';
// regex to get files for
const REGEX_SSL_CERTIFICATE = '/\bssl_certificate\s+\K\S+/';
const REGEX_SSL_CERTIFICATE_KEY = '/\bssl_certificate_key\s+\K\S+/';
// ignore files
const IGNORE_FILES = [
'.', '..'
];
/**
*
*
*
* @return array
*
*/
private function getSitesAvailable()
{
return scandir(self::SITES_AVAILABLE);
}
/**
*
*
*
* @return array
*
*/
private function getSitesEnabled()
{
return scandir(self::SITES_ENABLED);
}
/**
* find path for certificates in .conf-files
*
*
* ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
* ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;
*
*/
private function getCertificate($path)
{
$result = [
'ssl' => false,
'ssl_certificate_exists' => false,
'ssl_certificate_expired_at' => false
];
// getting .conf-file
$content = file_get_contents($path);
// check for path of sites
preg_match(self::REGEX_SSL_CERTIFICATE, $content, $matches);
preg_match(self::REGEX_SSL_CERTIFICATE_KEY, $content, $matches);
// check for ssl certificates
if (count($matches) >= 2) {
$result['ssl'] = true;
if (file_exists($matches[0]) && file_exists($matches[1])) {
$result['ssl_certificate_exists'] = true;
}
exec('openssl x509 -noout -dates -in '.$path, $openssl);
if (isset($openssl[1])) {
$openssl = str_replace('notAfter=', '', $openssl[1]);
}
}
return $result;
}
/**
* getting vhosts
*
*/
public function find()
{
$results = [];
// getting available
$available = $this->getSitesAvailable();
// getting enabled
$enabled = $this->getSitesEnabled();
foreach($available as $filename)
{
if (!in_array($filename, self::IGNORE_FILES)) {
// getting full path
$path = self::SITES_AVAILABLE.'/'.$filename;
// getting certificates from a configuration
$certificate = $this->getCertificate($path);
$result = array_merge([
'domain' => str_replace('.conf', '', $filename),
'path' => $path,
'file' => $filename,
'enabled' => in_array($filename, $enabled),
], $certificate);
$results[] = $result;
}
}
return $results;
}
}

+ 73
- 0
app/Helpers/NginxTemplateHelper.php View File

@ -0,0 +1,73 @@
<?php
namespace App\Helpers;
/**
*
*
*
*
*/
class NginxTemplateHelper
{
// path for templates files
const TEMPLATES_PATH = '/ressources/templates';
// path for custom template files
const CUSTOM_TEMPLATES_PATH = '/ressources/templates/custom';
/**
*
*
*
* @return array
*
*/
private function getTemplates()
{
$results = [];
array_merge(
scandir(self::TEMPLATES_PATH),
scandir(self::CUSTOM_TEMPLATES_PATH)
);
return $templates;
}
/**
*
* @param [type] $files [description]
* @param [type] $templatePath [description]
* @return [type] [description]
*/
private function getTemplates($templatePath)
{
$results = [];
foreach(scandir(base_dir().$templatePath) as $file) {
if (!in_array($file, self::IGNORE_FILES)) {
$results[] = [
'filename' => $file,
'path' => $templatePath
];
}
}
return $results;
}
/**
* getting templates
*
*/
public function find()
{
$results = array_merge(
$this->getTemplates(self::TEMPLATES_DIR),
$this->getTemplates(self::TEMPLATES_CUSTOM_DIR)
);
return $results;
}
}

+ 28
- 0
app/Providers/AppServiceProvider.php View File

@ -0,0 +1,28 @@
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
}
}

+ 50
- 0
bootstrap/app.php View File

@ -0,0 +1,50 @@
<?php
/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/
$app = new LaravelZero\Framework\Application(
dirname(__DIR__)
);
/*
|--------------------------------------------------------------------------
| Bind Important Interfaces
|--------------------------------------------------------------------------
|
| Next, we need to bind some important interfaces into the container so
| we will be able to resolve them when needed. The kernels serve the
| incoming requests to this application from both the web and CLI.
|
*/
$app->singleton(
Illuminate\Contracts\Console\Kernel::class,
LaravelZero\Framework\Kernel::class
);
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
Illuminate\Foundation\Exceptions\Handler::class
);
/*
|--------------------------------------------------------------------------
| Return The Application
|--------------------------------------------------------------------------
|
| This script returns the application instance. The instance is given to
| the calling script so we can separate the building of the instances
| from the actual running of the application and sending responses.
|
*/
return $app;

+ 0
- 0
box.json View File


+ 53
- 0
composer.json View File

@ -0,0 +1,53 @@
{
"name": "laravel-zero/laravel-zero",
"description": "The Laravel Zero Framework.",
"keywords": ["framework", "laravel", "laravel zero", "console", "cli"],
"homepage": "https://laravel-zero.com",
"type": "project",
"license": "MIT",
"support": {
"issues": "https://github.com/laravel-zero/laravel-zero/issues",
"source": "https://github.com/laravel-zero/laravel-zero"
},
"authors": [
{
"name": "Nuno Maduro",
"email": "enunomaduro@gmail.com"
}
],
"require": {
"php": "^7.2.5",
"illuminate/log": "^7.0",
"jenssegers/blade": "^1.3",
"laminas/laminas-text": "^2.7",
"laravel-zero/framework": "^7.0",
"nunomaduro/laravel-console-menu": "^3.0"
},
"require-dev": {
"mockery/mockery": "^1.3.1",
"phpunit/phpunit": "^8.5"
},
"autoload": {
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
},
"scripts": {
"post-create-project-cmd": [
"@php application app:rename"
]
},
"minimum-stability": "dev",
"prefer-stable": true,
"bin": ["application"]
}

+ 5035
- 0
composer.lock
File diff suppressed because it is too large
View File


+ 60
- 0
config/app.php View File

@ -0,0 +1,60 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Application Name
|--------------------------------------------------------------------------
|
| This value is the name of your application. This value is used when the
| framework needs to place the application's name in a notification or
| any other location as required by the application or its packages.
|
*/
'name' => 'MCP',
/*
|--------------------------------------------------------------------------
| Application Version
|--------------------------------------------------------------------------
|
| This value determines the "version" your application is currently running
| in. You may want to follow the "Semantic Versioning" - Given a version
| number MAJOR.MINOR.PATCH when an update happens: https://semver.org.
|
*/
'version' => app('git.version'),
/*
|--------------------------------------------------------------------------
| Application Environment
|--------------------------------------------------------------------------
|
| This value determines the "environment" your application is currently
| running in. This may determine how you prefer to configure various
| services the application utilizes. This can be overridden using
| the global command line "--env" option when calling commands.
|
*/
'env' => 'development',
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
|--------------------------------------------------------------------------
|
| The service providers listed here will be automatically loaded on the
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
'providers' => [
App\Providers\AppServiceProvider::class,
],
];

+ 80
- 0
config/commands.php View File

@ -0,0 +1,80 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Command
|--------------------------------------------------------------------------
|
| Laravel Zero will always run the command specified below when no command name is
| provided. Consider update the default command for single command applications.
| You cannot pass arguments to the default command because they are ignored.
|
*/
'default' => NunoMaduro\LaravelConsoleSummary\SummaryCommand::class,
/*
|--------------------------------------------------------------------------
| Commands Paths
|--------------------------------------------------------------------------
|
| This value determines the "paths" that should be loaded by the console's
| kernel. Foreach "path" present on the array provided below the kernel
| will extract all "Illuminate\Console\Command" based class commands.
|
*/
'paths' => [app_path('Commands')],
/*
|--------------------------------------------------------------------------
| Added Commands
|--------------------------------------------------------------------------
|
| You may want to include a single command class without having to load an
| entire folder. Here you can specify which commands should be added to
| your list of commands. The console's kernel will try to load them.
|
*/
'add' => [
// ..
],
/*
|--------------------------------------------------------------------------
| Hidden Commands
|--------------------------------------------------------------------------
|
| Your application commands will always be visible on the application list
| of commands. But you can still make them "hidden" specifying an array
| of commands below. All "hidden" commands can still be run/executed.
|
*/
'hidden' => [
NunoMaduro\LaravelConsoleSummary\SummaryCommand::class,
Symfony\Component\Console\Command\HelpCommand::class,
Illuminate\Console\Scheduling\ScheduleRunCommand::class,
Illuminate\Console\Scheduling\ScheduleFinishCommand::class,
Illuminate\Foundation\Console\VendorPublishCommand::class,
],
/*
|--------------------------------------------------------------------------
| Removed Commands
|--------------------------------------------------------------------------
|
| Do you have a service provider that loads a list of commands that
| you don't need? No problem. Laravel Zero allows you to specify
| below a list of commands that you don't to see in your app.
|
*/
'remove' => [
// ..
],
];

+ 100
- 0
config/logging.php View File

@ -0,0 +1,100 @@
<?php
use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;
return [
/*
|--------------------------------------------------------------------------
| Default Log Channel
|--------------------------------------------------------------------------
|
| This option defines the default log channel that gets used when writing
| messages to the logs. The name specified in this option should match
| one of the channels defined in the "channels" configuration array.
|
*/
'default' => env('LOG_CHANNEL', 'stack'),
/*
|--------------------------------------------------------------------------
| Log Channels
|--------------------------------------------------------------------------
|
| Here you may configure the log channels for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Drivers: "single", "daily", "slack", "syslog",
| "errorlog", "monolog",
| "custom", "stack"
|
*/
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['stderr'],
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],
'papertrail' => [
'driver' => 'monolog',
'level' => 'debug',
'handler' => SyslogUdpHandler::class,
'handler_with' => [
'host' => env('PAPERTRAIL_URL'),
'port' => env('PAPERTRAIL_PORT'),
],
],
'stderr' => [
'driver' => 'monolog',
'handler' => StreamHandler::class,
'formatter' => env('LOG_STDERR_FORMATTER'),
'with' => [
'stream' => 'php://stderr',
],
],
'syslog' => [
'driver' => 'syslog',
'level' => 'debug',
],
'errorlog' => [
'driver' => 'errorlog',
'level' => 'debug',
],
'null' => [
'driver' => 'monolog',
'handler' => NullHandler::class,
],
],
];

+ 72
- 0
config/logo.php View File

@ -0,0 +1,72 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Enabled
|--------------------------------------------------------------------------
|
| This value determines if the app name should be represented as an
| ASCII logo. This file provides a sane default location for all
| information concerning the logo and is display customization.
|
*/
'enabled' => true,
/*
|--------------------------------------------------------------------------
| Default Font
|--------------------------------------------------------------------------
|
| This option defines the font which should be used for rendering.
| By default, one default font is shipped. However, you are free
| to download and use additional fonts: http://www.figlet.org.
|
*/
'font' => \LaravelZero\Framework\Components\Logo\FigletString::DEFAULT_FONT,
/*
|--------------------------------------------------------------------------
| Output Width
|--------------------------------------------------------------------------
|
| This option defines the maximum width of the output string. This is
| used for word-wrap as well as justification. Be careful when using
| small values, because they may result in an undefined behavior.
|
*/
'outputWidth' => 80,
/*
|--------------------------------------------------------------------------
| Justification
|--------------------------------------------------------------------------
|
| This option defines the justification of the logo text. By default,
| justification is provided, which will work well on most of your
| console apps. Of course, you are free to change this value.
|
*/
'justification' => null,
/*
|--------------------------------------------------------------------------
| Right To Left
|--------------------------------------------------------------------------
|
| This option defines the option in which the text is written. By, default
| the setting of the font-file is used. When justification is not defined,
| a text written from right-to-left is automatically right-aligned.
|
| Possible values: "right-to-left", "left-to-right", null
|
*/
'rightToLeft' => null,
];

+ 28
- 0
install.sh View File

@ -0,0 +1,28 @@
#!/usr/bin/env bash
#
#
#
set -o errexit
set -o pipefail
set -o nounset
_hash=${1:-}
if [ -z "${_hash}" ]; then
echo -e "\$1 is required, please check on https://composer.github.io/pubkeys.html"
exit 0
fi
# installing dependencies
apt install -y curl php-cli php-mbstring php-dom git unzip
# download installer
curl -sS https://getcomposer.org/installer -o composer-setup.php
# check hash
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$_hash') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
# remove installer
rm composer-setup.php

+ 53
- 0
mcp View File

@ -0,0 +1,53 @@
#!/usr/bin/env php
<?php
define('LARAVEL_START', microtime(true));
/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so that we do not have to worry about the
| loading of any our classes "manually". Feels great to relax.
|
*/
$autoloader = require file_exists(__DIR__.'/vendor/autoload.php') ? __DIR__.'/vendor/autoload.php' : __DIR__.'/../../autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
/*
|--------------------------------------------------------------------------
| Run The Artisan Application
|--------------------------------------------------------------------------
|
| When we run the console application, the current CLI command will be
| executed in this console and the response sent back to a terminal
| or another output device for the developers. Here goes nothing!
|
*/
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$status = $kernel->handle(
$input = new Symfony\Component\Console\Input\ArgvInput,
new Symfony\Component\Console\Output\ConsoleOutput
);
/*
|--------------------------------------------------------------------------
| Shutdown The Application
|--------------------------------------------------------------------------
|
| Once Artisan has finished running, we will fire off the shutdown events
| so that any final work may be done by the application before we shut
| down the process. This is the last thing to happen to the request.
|
*/
$kernel->terminate($input, $status);
exit($status);

+ 24
- 0
phpunit.xml.dist View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
</phpunit>

+ 1
- 0
test.html View File

@ -0,0 +1 @@
/etc/kkk

+ 22
- 0
tests/CreatesApplication.php View File

@ -0,0 +1,22 @@
<?php
namespace Tests;
use Illuminate\Contracts\Console\Kernel;
trait CreatesApplication
{
/**
* Creates the application.
*
* @return \Illuminate\Foundation\Application
*/
public function createApplication()
{
$app = require __DIR__.'/../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
return $app;
}
}

+ 20
- 0
tests/Feature/InspiringCommandTest.php View File

@ -0,0 +1,20 @@
<?php
namespace Tests\Feature;
use Tests\TestCase;
class InspiringCommandTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testInspiringCommand()
{
$this->artisan('inspiring')
->expectsOutput('Simplicity is the ultimate sophistication.')
->assertExitCode(0);
}
}

+ 10
- 0
tests/TestCase.php View File

@ -0,0 +1,10 @@
<?php
namespace Tests;
use LaravelZero\Framework\Testing\TestCase as BaseTestCase;
abstract class TestCase extends BaseTestCase
{
use CreatesApplication;
}

+ 18
- 0
tests/Unit/ExampleTest.php View File

@ -0,0 +1,18 @@
<?php
namespace Tests\Unit;
use Tests\TestCase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$this->assertTrue(true);
}
}

Loading…
Cancel
Save