PHP Classes

File: src/Installer/motifs.php

Recommend this page to a friend!
  Classes of Scott Arciszewski   CMS Airship   src/Installer/motifs.php   Download  
File: src/Installer/motifs.php
Role: Example script
Content type: text/plain
Description: Example script
Class: CMS Airship
Content management system with security features
Author: By
Last change: Merge remote-tracking branch 'origin/master'
Date: 7 years ago
Size: 3,202 bytes
 

Contents

Class file image Download
<?php
declare(strict_types=1);

use
Airship\Engine\State;

/**
 * @global array $active
 * @global State $state
 */

foreach (['Hull', 'Bridge'] as $cabinName) {
   
$cabinDir = ROOT . '/Cabin/' . $cabinName;
   
// Let's make sure our directories exist:
   
if (!\is_dir($cabinDir.'/View/motif')) {
        \
mkdir($cabinDir.'/View/motif', 0775);
    } else {
        \
chmod($cabinDir.'/View/motif', 0775);
    }
    if (!\
is_dir($cabinDir.'/public/motif')) {
        \
mkdir($cabinDir.'/public/motif', 0775);
    } else {
        \
chmod($cabinDir.'/public/motif', 0775);
    }

   
// Now let's set up our Motifs:
   
$motifsJSONFile = ROOT . '/config/Cabin/' . $cabinName . '/motifs.json';
    if (\
is_dir($cabinDir.'/View/motif') && \is_readable($motifsJSONFile)) {
       
$motifs = [];
       
$motifsJSONData = \Airship\loadJSON($motifsJSONFile);

        foreach (
$motifsJSONData as $motif => $motifConfig) {
            if (isset(
$motifConfig['path'])) {
               
$motifStart = $cabinDir.'/View/motif/'.$motif;
               
$motifEnd = ROOT.'/Motifs/'.$motifConfig['path'];

                if (\
strpos($motifStart, $cabinDir.'/View/motif') === false) {
                   
$state->logger->alert(
                       
'Potential directory traversal in Motif config.',
                        [
                           
'cabin' => $active['name'],
                           
'motif' => $motif,
                           
'path' => $motifStart
                       
]
                    );

                   
// SKIP! We have a potential directory traversal
                   
continue;
                }
                if (\
strpos($motifEnd, ROOT.'/Motifs') === false) {
                   
$state->logger->alert(
                       
'Potential directory traversal in Motif config.',
                        [
                           
'cabin' => $active['name'],
                           
'motif' => $motif,
                           
'path' => $motifEnd
                       
]
                    );

                   
// SKIP! We have a potential directory traversal
                   
continue;
                }

               
// Make sure we create the necessary symlinks
               
if (!\is_link($motifStart)) {
                    \
symlink($motifEnd, $motifStart);
                }
                if (!\
is_link(ROOT . '/public/static/' . $cabinName)) {
                    \
symlink(
                       
$cabinDir . '/public',
                       
ROOT . '/public/static/' . $cabinName
                   
);
                }

                if (\
is_dir($motifEnd.'/public')) {
                   
$motifPublic = $cabinDir.'/public/motif/'.$motif;
                    if (!\
is_link($motifPublic)) {
                        \
symlink($motifEnd.'/public', $motifPublic);
                    }
                }
                if (\
file_exists($motifEnd.'/motif.json')) {
                   
$motifConfig['config'] = \Airship\loadJSON($motifEnd.'/motif.json');
                } else {
                   
$motifConfig['config'] = [];
                }

               
$motifs[$motif] = $motifConfig;
            }
        }
    }
}