shell bypass 403
<?php namespace App\Repositories\Eloquent; use App\Exceptions\GeneralException; use App\Models\Language; use App\Repositories\Contracts\LanguageRepository; use Exception; use Illuminate\Support\Arr; use Illuminate\Support\Facades\File; use Madnest\Madzipper\Facades\Madzipper; use Throwable; use ZipArchive; class EloquentLanguageRepository extends EloquentBaseRepository implements LanguageRepository { /** * EloquentLanguageRepository constructor. * * @param Language $language */ public function __construct(Language $language) { parent::__construct($language); } /** * @param array $input * * @return Language|mixed * * @throws GeneralException */ public function store(array $input): Language { /** @var Language $language */ $lang_index = array_search($input['language'], array_column(Language::languageCodes(), 'code')); $lang = Language::languageCodes()[$lang_index]; $lang['iso_code'] = strtolower($input['country']); $lang['status'] = $input['status']; if ( ! is_dir(base_path('resources/lang/'.$lang['code']))) { File::copyDirectory(base_path("resources/lang/en"), base_path("resources/lang/").$lang['code']); } $language = $this->make(Arr::only($lang, ['name', 'code', 'iso_code', 'status'])); if ( ! $this->save($language)) { throw new GeneralException(__('locale.exceptions.something_went_wrong')); } return $language; } /** * download language file * * @param Language $language * * @return mixed|string * @throws Exception */ public function download(Language $language): string { $files = glob($language->languageDir()."*"); $zip = storage_path("tmp/language-".$language->code.".zip"); Madzipper::make($zip)->add($files)->close(); return $zip; } /** * upload language files * * @param array $input * @param Language $language * * @return bool|mixed * @throws GeneralException */ public function upload(array $input, Language $language): bool { // move file to temp place $tmp_path = storage_path('tmp'); $file_name = 'language-package'; $input['file']->move($tmp_path, $file_name); // after moving, request['file'] will no longer be there $tmp_zip = storage_path("tmp/{$file_name}"); $zip = new ZipArchive(); $openZip = $zip->open($tmp_zip, ZipArchive::CREATE); // read zip file check if zip archive invalid if ($openZip !== true) { throw new GeneralException(__('locale.settings.invalid_zip')); } // unzip template archive and remove zip file $zip->extractTo($language->languageDir()); $zip->close(); unlink($tmp_zip); return true; } /** * @param Language $language * * @return bool */ private function save(Language $language): bool { if ( ! $language->save()) { return false; } return true; } /** * @param Language $language * @param array $input * * @return Language * @throws Exception|Throwable * * @throws Exception */ public function update(Language $language, array $input): Language { if ( ! $language->update($input)) { throw new GeneralException(__('locale.exceptions.something_went_wrong')); } return $language; } /** * @param Language $language * * @return bool|null * @throws Exception|Throwable * */ public function destroy(Language $language) { if ( ! $language->delete()) { throw new GeneralException(__('locale.exceptions.something_went_wrong')); } return true; } }