--- /dev/null
+<?php
+
+namespace App\Models;
+
+use App\SubForms\TeamServer;
+use Cubist\Backpack\Magic\Fields\BunchOfFieldsMultiple;
+use Cubist\Backpack\Magic\Fields\Textarea;
+use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
+use Cubist\Util\Text;
+
+class TeamServers extends CubistMagicAbstractModel
+{
+ protected $table = 'team_servers';
+
+ protected $_options = ['name' => 'team-servers',
+ 'singular' => 'paramètre',
+ 'plural' => 'paramètres',
+ 'oneinstance' => true];
+
+ public function setFields()
+ {
+ parent::setFields();
+ $this->addField('servers', BunchOfFieldsMultiple::class, __('Serveurs Cubedesigners'), ['bunch' => TeamServer::class]);
+ $this->addField('ip', Textarea::class, __('IP Cubedesigners à autoriser'));
+ $this->addField('clients', Textarea::class, __('Serveurs des clients'));
+ $this->addField('blacklist', Textarea::class, __('Liste noire'));
+ }
+
+ public function generateFirewall($for)
+ {
+ $servers = $this->servers;
+ $found = false;
+ foreach ($servers as $k => $server) {
+ if ($server['name'] === $for) {
+ $found = true;
+ break;
+ }
+ }
+
+ if (!$found) {
+ return;
+ }
+
+ $blacklist = Text::explodeNewLines($this->blacklist);
+ $clients = Text::explodeNewLines($this->clients);
+ $ip = Text::explodeNewLines($this->ip);
+
+ $res = '#!/bin/bash' . "\n";
+
+ $res .= 'apt install bind9 dnsutils' . "\n";
+ $res .= 'service bind9 restart' . "\n";
+
+ $res .= 'blacklist=(' . implode(' ', $blacklist) . ')' . "\n";
+
+ $hosts = [];
+ foreach ($servers as $k => $s) {
+ $hosts[] = '$s' . $k;
+ $res .= 's' . $k . '=`dig +short ' . $s['name'] . '.cubedesigners.com | tail -1`' . "\n";
+ $others = Text::explodeNewLines($s['others']);
+ foreach ($others as $kk => $o) {
+ $hosts[] = '$s' . $k . '_' . $kk;
+ $res .= 's' . $k . '_' . $kk . '=`dig +short ' . $o . ' | tail -1`' . "\n";
+ }
+ }
+ foreach ($ip as $k => $i) {
+ $hosts[] = '$i' . $k;
+ $res .= 'i' . $k . '=`dig +short ' . $i . ' | tail -1`' . "\n";
+ }
+
+
+ $res .= 'auth=(' . implode(' ', $hosts) . ')' . "\n";
+
+ if ($server['backup']) {
+ $backup = [];
+ foreach ($clients as $k => $c) {
+ $backup[] = '$c' . $k;
+ $res .= 'c' . $k . '=`dig +short ' . $c . ' | tail -1`' . "\n";
+ }
+ $res .= 'backup=(' . implode(' ', $backup) . ')' . "\n";
+ }
+
+ $openPorts = explode(',',);
+ if ($server['dns']) {
+ $openPorts[] = 53;
+ }
+ if ($server['http']) {
+ $openPorts[] = 80;
+ $openPorts[] = 443;
+ }
+
+ $res .= 'for ip in "${blacklist[@]}"
+do
+ ufw deny in from $ip
+ ufw deny in to $ip
+ ufw deny out from $ip
+ ufw deny out to $ip
+done
+
+for ip in "${auth[@]}"
+do
+ ufw allow out to $ip port 22
+ ufw allow from $ip
+ ufw allow to $ip
+done' . "\n\n";
+ if (isset($backup) && count($backup)) {
+ $res .= 'for ip in "${auth[@]}"
+do
+ ufw allow in from $ip port 22
+done' . "\n\n";
+ }
+ $res .= '#SSH
+ufw deny out 22
+# Finally enable firewall
+ufw --force enable
+# Enable loging
+ufw logging on
+# Display status
+ufw status verbose
+
+rm /etc/ufw/after.rules.*
+rm /etc/ufw/after6.rules.*
+rm /etc/ufw/before.rules.*
+rm /etc/ufw/before6.rules.*
+rm /lib/ufw/user6.rules.*
+rm /lib/ufw/user.rules.*
+';
+ }
+}
</script>
@endpush
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('dashboard') }}"><i
- class='nav-icon la la-dashboard'></i>{{ trans('backpack::base.dashboard') }}
+ class='nav-icon la la-dashboard'></i>{{ trans('backpack::base.dashboard') }}
</a></li>
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('tasks') }}"><i
- class='nav-icon la la-bell'></i>{{ __('Notifications') }}
+ class='nav-icon la la-bell'></i>{{ __('Notifications') }}
</a></li>
@can('files:read')
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('file') }}"><i
- class='nav-icon las la-cloud'></i>{{ __('Partage de fichiers') }}
+ class='nav-icon las la-cloud'></i>{{ __('Partage de fichiers') }}
</a></li>
@endcan
@canany(['quiz:read','quiztranslation:read','elearning_media:read'])
<li {!! sidebarState('elearning',true) !!}><a class='nav-link nav-dropdown-toggle' href='#'><i
- class='nav-icon la la-chalkboard-teacher'></i>{{__('e-Learning')}}</a>
+ class='nav-icon la la-chalkboard-teacher'></i>{{__('e-Learning')}}</a>
<ul class='nav-dropdown-items'>
@can('quiz:read')
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('quiz') }}"><i
- class="la la-question nav-icon"></i> {{__('Quiz')}}</a></li>
+ class="la la-question nav-icon"></i> {{__('Quiz')}}</a></li>
@endcan
@can('elearning-media:read')
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('elearning-media') }}"><i
- class="la la-photo-video nav-icon"></i> {{__('Media')}}</a></li>
+ class="la la-photo-video nav-icon"></i> {{__('Media')}}</a></li>
@endcan
@can('elearning-package:read')
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('elearning-package') }}"><i
- class="la la-cubes nav-icon"></i> {{__('Package')}}</a></li>
+ class="la la-cubes nav-icon"></i> {{__('Package')}}</a></li>
@endcan
@can('quiztranslation:read')
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('quiztranslation') }}"><i
- class="la la-language nav-icon"></i> {{__('Traductions')}}</a></li>
+ class="la la-language nav-icon"></i> {{__('Traductions')}}</a></li>
@endcan
</ul>
</li>
@canany(['fluidbook-quote:read','signature:read','fluidbook-theme:read','fluidbook-iconset:read','fluibook-translate:write','fluidbook-publication:read'])
<li {!! sidebarState('fluidbook',true) !!}><a class='nav-link nav-dropdown-toggle' href='#'><i
- class="nav-icon la"><img src="/images/icons/icon-fluidbook.svg"/></i>{{__('Fluidbook')}}</a>
+ class="nav-icon la"><img src="/images/icons/icon-fluidbook.svg"/></i>{{__('Fluidbook')}}</a>
<ul class='nav-dropdown-items'>
@can('fluidbook-publication:read')
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('fluidbook-publication') }}"><i
- class="la la-book-reader nav-icon"></i> {{__('Publications')}}</a></li>
+ class="la la-book-reader nav-icon"></i> {{__('Publications')}}</a></li>
@endcan
@can('fluidbook-theme:read')
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('fluidbook-theme') }}"><i
- class="la la-palette nav-icon"></i> {{__('Thèmes')}}</a></li>
+ class="la la-palette nav-icon"></i> {{__('Thèmes')}}</a></li>
@endcan
@can('fluidbook-iconset:read')
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('fluidbook-iconset') }}"><i
- class="la la-icons nav-icon"></i> {{__('Jeux d\'icônes')}}</a></li>
+ class="la la-icons nav-icon"></i> {{__('Jeux d\'icônes')}}</a></li>
@endcan
@can('fluidbook-collection:read')
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('fluidbook-collection') }}"><i
- class="la la-university nav-icon"></i> {{__('Collections')}}</a></li>
+ class="la la-university nav-icon"></i> {{__('Collections')}}</a></li>
@endcan
@can('fluidbook-translate:write')
<li class="nav-item"><a class="nav-link"
href='{{ backpack_url('fluidbook-translate/1/edit/?_locale=en') }}'><i
- class='la la-language nav-icon'></i>
+ class='la la-language nav-icon'></i>
<span> {{__('Traductions')}}</span></a>
</li>
@endcan
@can('signature:read')
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('signature') }}"><i
- class="la la-signature nav-icon"></i> {{__('Signatures')}}</a></li>
+ class="la la-signature nav-icon"></i> {{__('Signatures')}}</a></li>
@endcan
@can('fluidbook-external-install-server:read')
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('fluidbook-external-install-server') }}"><i
- class="la las la-server nav-icon"></i> {{__('Serveurs externes')}}</a></li>
+ class="la las la-server nav-icon"></i> {{__('Serveurs externes')}}</a></li>
@endcan
@can('fluidbook-quote:read')
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('fluidbook-quote') }}"><i
- class="la la-wpforms nav-icon"></i> {{__('Demandes de devis')}}</a></li>
+ class="la la-wpforms nav-icon"></i> {{__('Demandes de devis')}}</a></li>
@endcan
</ul>
</li>
@endcanany
@can('tools')
<li {!! sidebarState('tools') !!}><a class='nav-link nav-dropdown-toggle' href='#'><i
- class='nav-icon la la-tools'></i>{{__('Outils')}}</a>
+ class='nav-icon la la-tools'></i>{{__('Outils')}}</a>
@include('tools.sidebar')
</li>
@endcan
@canany(['users:read','company:read','managerolesandpersmissions'])
<li {!! sidebarState('users') !!}><a class='nav-link nav-dropdown-toggle' href='#'><i
- class='nav-icon la la-group'></i>{{__('Clients')}}</a>
+ class='nav-icon la la-group'></i>{{__('Clients')}}</a>
<ul class='nav-dropdown-items'>
@can('company:read')
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('company') }}'><i
- class='nav-icon la la-building'></i>
+ class='nav-icon la la-building'></i>
<span>{{__('Clients')}}</span></a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('users') }}'><i
- class='nav-icon la la-user-lock'></i>
+ class='nav-icon la la-user-lock'></i>
<span>{{__('Utilisateurs')}}</span></a></li>
@endcan
@can('managerolesandpersmissions')
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('role') }}'><i
- class='nav-icon la la-group'></i>
+ class='nav-icon la la-group'></i>
<span>{{__('Roles')}}</span></a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('permission') }}'><i
- class='nav-icon la la-key'></i><span>{{__('Permissions')}}</span></a></li>
+ class='nav-icon la la-key'></i><span>{{__('Permissions')}}</span></a></li>
@endcan
</ul>
</li>
@canany(['team-leave:read','team-overtime:read','extranet:manage_emails'])
<li {!! sidebarState('team') !!}><a class='nav-link nav-dropdown-toggle' href='#'><i
- class='nav-icon la la-mug-hot'></i>{{__('Équipe')}}</a>
+ class='nav-icon la la-mug-hot'></i>{{__('Équipe')}}</a>
<ul class='nav-dropdown-items'>
@can('extranet:manage_emails')
<li class="nav-item"><a class="nav-link"
href='{{ backpack_url('team-emails') }}'><i
- class='nav-icon la la-mail-bulk'></i>
+ class='nav-icon la la-mail-bulk'></i>
<span>{{__('Emails')}}</span></a>
</li>
@endcan
+ @can('extranet:manage_servers')
+ <li class="nav-item"><a class="nav-link"
+ href='{{ backpack_url('team-servers') }}'><i
+ class='nav-icon las la-server'></i>
+ <span>{{__('Serveurs')}}</span></a>
+ </li>
+ @endcan
@can('team-pay:read')
<li class="nav-item"><a class="nav-link"
href='{{ backpack_url('team-pay') }}'><i
- class="nav-icon las la-file-invoice-dollar"></i>
+ class="nav-icon las la-file-invoice-dollar"></i>
<span>{{__('Bulletins de salaire')}}</span></a>
</li>
@endcan
@can('team-leave:read')
<li class="nav-item"><a class="nav-link"
href='{{ backpack_url('team-leave') }}'><i
- class="nav-icon las la-umbrella-beach"></i>
+ class="nav-icon las la-umbrella-beach"></i>
<span>{{__('Congés et absences')}}</span></a>
</li>
@endcan
@can('team-overtime:read')
<li class="nav-item"><a class="nav-link"
href='{{ backpack_url('team-overtime') }}'><i
- class="nav-icon las la-stopwatch"></i>
+ class="nav-icon las la-stopwatch"></i>
<span>{{__('Heures supp')}}</span></a>
</li>
@endcan
@canany(['maintenance','toolbox-translate:admin'])
<li {!! sidebarState('admin') !!}><a class='nav-link nav-dropdown-toggle' href='#'><i
- class='nav-icon la la-cogs'></i>{{__('Administration')}}</a>
+ class='nav-icon la la-cogs'></i>{{__('Administration')}}</a>
<ul class='nav-dropdown-items'>
@can('toolbox-translate:admin')
<li class="nav-item"><a class="nav-link"
href='{{ backpack_url('toolbox-translate/1/edit/?_locale=en') }}'><i
- class='la la-language'></i>
+ class='la la-language'></i>
<span>{{__('Traduction')}}</span></a>
</li>
@endcan