From 11c038d492b7d73ee7c82f919e95a9b8c1008ea3 Mon Sep 17 00:00:00 2001 From: "p.belezov" Date: Tue, 23 Jan 2024 17:55:28 +0800 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B2=20=D1=81=D0=B0=D0=B9=D1=82=20=D1=88=D0=B8=D1=84=D1=80=20?= =?UTF-8?q?=D0=A6=D0=B5=D0=B7=D0=B0=D1=80=D1=8F=20=D0=BF=D0=BE=20=D1=80?= =?UTF-8?q?=D0=BE=D1=83=D1=82=D1=83=20/caesar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/V1/IndexController.php | 127 ++++++++++++++++ app/Providers/RouteServiceProvider.php | 4 +- resources/App.vue | 2 +- resources/caesar.js | 16 ++ resources/views/caesar/Caesar.vue | 142 ++++++++++++++++++ resources/views/caesar/caesar.blade.php | 13 ++ resources/views/{ => resume}/Resume.vue | 0 resources/views/{ => resume}/resume.blade.php | 0 routes/{api.php => api_v1.php} | 4 +- routes/web.php | 6 +- vite.config.js | 2 +- 11 files changed, 308 insertions(+), 8 deletions(-) create mode 100644 app/Http/Controllers/Api/V1/IndexController.php create mode 100644 resources/caesar.js create mode 100644 resources/views/caesar/Caesar.vue create mode 100644 resources/views/caesar/caesar.blade.php rename resources/views/{ => resume}/Resume.vue (100%) rename resources/views/{ => resume}/resume.blade.php (100%) rename routes/{api.php => api_v1.php} (80%) diff --git a/app/Http/Controllers/Api/V1/IndexController.php b/app/Http/Controllers/Api/V1/IndexController.php new file mode 100644 index 0000000..4662793 --- /dev/null +++ b/app/Http/Controllers/Api/V1/IndexController.php @@ -0,0 +1,127 @@ +normalizeShift($shift, $language); + $result_text = ''; + if ($language == 'Ru'){ + if ($cd == 0){ + $result_text = $this->ruEncipher($text, $shift); + } elseif ($cd == 1){ + $result_text = $this->ruDecipher($text, $shift); + } + } elseif ($language == 'En') { + if ($cd == 0){ + $result_text = $this->enEncipher($text, $shift); + } elseif ($cd == 1){ + $result_text = $this->enDecipher($text, $shift); + } + } + return $result_text; + } + + public function normalizeShift($shift, $alphabet) + { + if ($alphabet == 'Ru'){ + if ($shift > 32){ + while ($shift > 32) + { + $shift = $shift - 32; + } + } + return $shift; + } elseif ($alphabet == 'En') { + if ($shift > 26){ + while ($shift > 26) + { + $shift = $shift - 26; + } + } + return $shift; + } + } + + public function enCipher($ch, $key) + { + if (!ctype_alpha($ch)) + return $ch; + + $offset = ord(ctype_upper($ch) ? 'A' : 'a'); + return chr(fmod(((ord($ch) + $key) - $offset), 26) + $offset); + } + + public function enEncipher($input, $key) + { + $output = ""; + + $inputArr = str_split($input); + foreach ($inputArr as $ch) + $output .= $this->enCipher($ch, $key); + return $output; + } + + public function enDecipher($input, $key) + { + return $this->enEncipher($input, 26 - $key); + } + + public function ruCipher($ch, $key) + { + $regexp = "/[А-ЯЁа-яё]/"; + $regexp_upper = "/[А-ЯЁ]\{Lu}/"; + if (!preg_match($regexp, $ch)) + { + return $ch; + } + + $offset = mb_ord(preg_match($regexp_upper, $ch) ? 'А' : 'а', "UTF-8"); + return mb_chr(fmod(((mb_ord($ch, "UTF-8") + $key) - $offset), 32) + $offset, "UTF-8"); + } + + function ruCipherReverse($ch, $key) + { + $regexp = "/[А-ЯЁа-яё]/"; + $regexp_upper = "/[А-ЯЁ]\{Lu}/"; + if (!preg_match($regexp, $ch)) + { + return $ch; + } + + $offset = mb_ord(preg_match($regexp_upper, $ch) ? 'А' : 'а', "UTF-8"); + return mb_chr(fmod(((mb_ord($ch, "UTF-8") - $key) - $offset), 32) + $offset, "UTF-8"); + } + + public function ruEncipher($input, $key) + { + $output = ""; + + $inputArr = mb_str_split($input, 1, "UTF-8"); + foreach ($inputArr as $ch) + $output .= $this->ruCipher($ch, $key); + + return $output; + } + + public function ruDecipher($input, $key) + { + $output = ""; + + $inputArr = mb_str_split($input, 1, "UTF-8"); + foreach ($inputArr as $ch) + $output .= $this->ruCipherReverse($ch, $key); + + return $output; + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 1cf5f15..b7f5685 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -30,8 +30,8 @@ class RouteServiceProvider extends ServiceProvider $this->routes(function () { Route::middleware('api') - ->prefix('api') - ->group(base_path('routes/api.php')); + ->prefix('api/v1') + ->group(base_path('routes/api_v1.php')); Route::middleware('web') ->group(base_path('routes/web.php')); diff --git a/resources/App.vue b/resources/App.vue index d77e6b3..ca74cc9 100644 --- a/resources/App.vue +++ b/resources/App.vue @@ -5,7 +5,7 @@ + + diff --git a/resources/views/caesar/caesar.blade.php b/resources/views/caesar/caesar.blade.php new file mode 100644 index 0000000..fea4ebc --- /dev/null +++ b/resources/views/caesar/caesar.blade.php @@ -0,0 +1,13 @@ + + + + + + Caesar + @vite('resources/caesar.js') + @vite('resources/css/app.css') + + +
+ + diff --git a/resources/views/Resume.vue b/resources/views/resume/Resume.vue similarity index 100% rename from resources/views/Resume.vue rename to resources/views/resume/Resume.vue diff --git a/resources/views/resume.blade.php b/resources/views/resume/resume.blade.php similarity index 100% rename from resources/views/resume.blade.php rename to resources/views/resume/resume.blade.php diff --git a/routes/api.php b/routes/api_v1.php similarity index 80% rename from routes/api.php rename to routes/api_v1.php index 889937e..6a3d5c2 100644 --- a/routes/api.php +++ b/routes/api_v1.php @@ -14,6 +14,4 @@ use Illuminate\Support\Facades\Route; | */ -Route::middleware('auth:sanctum')->get('/user', function (Request $request) { - return $request->user(); -}); +Route::get('/', 'App\Http\Controllers\Api\V1\IndexController@index')->name('caesar'); diff --git a/routes/web.php b/routes/web.php index f1d0c69..0a4a1d9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -18,8 +18,12 @@ Route::get('/', function () { return view('welcome'); }); +Route::get('/caesar', function () { + return view('caesar/caesar'); +}); + Route::get('/resume', function () { - return view('resume'); + return view('resume/resume'); }); Route::get('/download/{file}', 'App\Http\Controllers\DownloadController@download'); diff --git a/vite.config.js b/vite.config.js index 9fe42ed..26c67d0 100644 --- a/vite.config.js +++ b/vite.config.js @@ -6,7 +6,7 @@ export default defineConfig({ plugins: [ vue(), laravel({ - input: ['resources/css/app.css', 'resources/app.js', 'resources/welcome.js'], + input: ['resources/css/app.css', 'resources/app.js', 'resources/welcome.js', 'resources/caesar.js'], refresh: true, }), ],