shell bypass 403
<?php
namespace Modules\Localization\Http\Controllers;
use Brian2694\Toastr\Facades\Toastr;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Facades\Session;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Localization\Entities\Language;
use Modules\Localization\Repositories\LanguageRepositoryInterface;
class LanguageController extends Controller
{
protected $languageRepository;
public function __construct(LanguageRepositoryInterface $languageRepository)
{
$this->languageRepository = $languageRepository;
}
public function index()
{
$languages = $this->languageRepository->all();
return view('localization::languages.index', [
"languages" => $languages
]);
}
public function update_rtl_status(Request $request)
{
if (demoCheck()) {
return redirect()->back();
}
$language = Language::findOrFail($request->id);
$language->rtl = $request->status;
if ($language->save()) {
return 1;
}
return 0;
}
public function update_active_status(Request $request)
{
if (demoCheck()) {
return redirect()->back();
}
$language = Language::findOrFail($request->id);
$language->status = $request->status;
if ($language->save()) {
Cache::forget('LanguageList_' . SaasDomain());
Cache::forget('languages_' . SaasDomain());
return 1;
}
return 0;
}
public function store(Request $request)
{
if (demoCheck()) {
return redirect()->back();
}
try {
$this->languageRepository->create($request->except("_token"));
Toastr::success(__('setting.Language Added Successfully'), trans('common.Success'));
return redirect()->back();
} catch (\Exception $e) {
Toastr::error(__('common.Something Went Wrong'), trans('common.Failed'));
return redirect()->back();
}
}
public function edit(Request $request)
{
try {
$language = $this->languageRepository->find($request->id);
return view('localization::languages.edit_modal', [
"language" => $language
]);
} catch (\Exception $e) {
return $e->getMessage();
}
}
public function show($id)
{
try {
$language = $this->languageRepository->find($id);
Session::put('locale', $language->code);
return view('localization::languages.translate_view', [
"language" => $language
]);
} catch (\Exception $e) {
return $e->getMessage();
}
}
public function update(Request $request, $id)
{
if (demoCheck()) {
return redirect()->back();
}
try {
$language = $this->languageRepository->update($request->except("_token"), $id);
Toastr::success(__('setting.Language Updated Successfully'), trans('common.Success'));
return redirect()->back();
} catch (\Exception $e) {
return back()->with('message-danger', __('common.Something Went Wrong'));
}
}
public function key_value_store(Request $request)
{
if (demoCheck()) {
return redirect()->back();
}
$validate_rules = [
'id' => 'required',
'translatable_file_name' => 'required',
'key' => 'required',
];
$request->validate($validate_rules, validationMessage($validate_rules));
try {
$language = Language::findOrFail($request->id);
$file_name = $request->translatable_file_name;
$check_module = explode('::', $file_name);
if (count($check_module) > 1) {
$translatable_file_name = $check_module[1];
$folder = module_path(ucfirst($check_module[0])) . '/Resources/lang/' . $language->code . '/';
} else {
$translatable_file_name = $request->translatable_file_name;
$folder = resource_path('lang/' . $language->code . '/');
}
$file = $folder . $translatable_file_name;
if (!file_exists($folder)) {
mkdir($folder);
}
if (file_exists($file)) {
file_put_contents($file, '');
}
file_put_contents($file, '<?php return ' . var_export($request->key, true) . ';');
Artisan::call('cache:clear');
Toastr::success('Operation Successfully done');
return back();
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function changeLanguage(Request $request)
{
Session::put('locale', $request->code);
UpdateGeneralSetting('language_name', $request->code);
return 1;
}
public function get_translate_file(Request $request)
{
try {
$language = $this->languageRepository->find($request->id);
$file_name = explode('.', $request->file_name);
$languages = Lang::get($file_name[0]);
$translatable_file_name = $request->file_name;
$file1 = base_path('resources/lang/default/'.$request->file_name);
if (!file_exists(base_path('resources/lang/'.$language->code))) {
mkdir(base_path('resources/lang/'.$language->code));
}
if (!file_exists(base_path('resources/lang/'.$language->code.'/'.$request->file_name))) {
copy($file1,base_path('resources/lang/'.$language->code.'/'.$request->file_name));
$url = base_path('resources/lang/'.$language->code.'/'.$request->file_name);
$languages = include "{$url}";
return view('localization::modals.translate_modal', [
"languages" => $languages,
"language" => $language,
"translatable_file_name" => $translatable_file_name
]);
}
$file2 = base_path('resources/lang/'.$language->code.'/'.$request->file_name);
// Count the number of lines on file
$default_file_arr = include "{$file1}";
$lang_file_arr = include "{$file2}";
if (count($default_file_arr) > count($lang_file_arr)) {
$languages = array_merge($default_file_arr, $lang_file_arr);
} else{
$url = base_path('resources/lang/'.$language->code.'/'.$request->file_name);
$languages = include "{$url}";
}
return view('localization::modals.translate_modal', [
"languages" => $languages,
"language" => $language,
"translatable_file_name" => $translatable_file_name
]);
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function destroy($id)
{
if (demoCheck()) {
return redirect()->back();
}
try {
$this->languageRepository->delete($id);
Toastr::success(__('setting.Language has been deleted Successfully'), trans('common.Success'));
return redirect()->back();
} catch (\Exception $e) {
return back()->with('message-danger', __('common.Something Went Wrong'));
}
}
}