mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-18 00:02:15 +00:00
- set password backend
This commit is contained in:
@@ -3,12 +3,18 @@
|
||||
namespace App\Http\Controllers\Oasis;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\User\UpdateUserPasswordRequest;
|
||||
use App\Http\Resources\Oasis\SubscriptionRequestResource;
|
||||
use App\Http\Resources\PlanResource;
|
||||
use App\Models\Oasis\SubscriptionRequest;
|
||||
use App\Services\StripeService;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class SubscriptionController extends Controller
|
||||
{
|
||||
@@ -21,7 +27,7 @@ class SubscriptionController extends Controller
|
||||
* Get subscription request details
|
||||
*
|
||||
* @param SubscriptionRequest $order
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
* @return Application|ResponseFactory|Response
|
||||
*/
|
||||
public function get_subscription_request(SubscriptionRequest $order)
|
||||
{
|
||||
@@ -34,7 +40,7 @@ class SubscriptionController extends Controller
|
||||
* Get setup intent to register credit card
|
||||
*
|
||||
* @param SubscriptionRequest $order
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
* @return Application|ResponseFactory|Response
|
||||
*/
|
||||
public function get_setup_intent(SubscriptionRequest $order)
|
||||
{
|
||||
@@ -50,7 +56,7 @@ class SubscriptionController extends Controller
|
||||
*
|
||||
* @param Request $request
|
||||
* @param SubscriptionRequest $order
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
* @return Application|ResponseFactory|Response
|
||||
*/
|
||||
public function subscribe(Request $request, SubscriptionRequest $order)
|
||||
{
|
||||
@@ -81,8 +87,33 @@ class SubscriptionController extends Controller
|
||||
return response('Done!', 204);
|
||||
}
|
||||
|
||||
public function set_password(Request $request)
|
||||
/**
|
||||
* Set user password
|
||||
*
|
||||
* @param UpdateUserPasswordRequest $request
|
||||
* @param SubscriptionRequest $order
|
||||
* @return Application|ResponseFactory|Response
|
||||
*/
|
||||
public function set_password(UpdateUserPasswordRequest $request, SubscriptionRequest $order)
|
||||
{
|
||||
return $request->all();
|
||||
// Check unauthorized action
|
||||
if ($order->status !== 'payed') {
|
||||
abort(401, "Sorry, you don't have permission.");
|
||||
}
|
||||
|
||||
// Set user password
|
||||
$order->user->password = Hash::make($request->password);
|
||||
$order->user->save();
|
||||
|
||||
// Update status
|
||||
$order->update([
|
||||
'status' => 'logged'
|
||||
]);
|
||||
|
||||
// Log in user
|
||||
Auth::login($order->user);
|
||||
$request->session()->regenerate();
|
||||
|
||||
return response('Password was set.', 204);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers\User;
|
||||
|
||||
use App\Http\Requests\User\UpdateUserPasswordRequest;
|
||||
use App\Models\File;
|
||||
use App\Models\Folder;
|
||||
use App\Http\Resources\InvoiceCollection;
|
||||
@@ -117,13 +118,8 @@ class AccountController extends Controller
|
||||
* @param Request $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function change_password(Request $request)
|
||||
public function change_password(UpdateUserPasswordRequest $request)
|
||||
{
|
||||
// Validate request
|
||||
$request->validate([
|
||||
'password' => ['required', 'string', 'min:6', 'confirmed'],
|
||||
]);
|
||||
|
||||
// Get user
|
||||
$user = Auth::user();
|
||||
|
||||
|
||||
30
app/Http/Requests/User/UpdateUserPasswordRequest.php
Normal file
30
app/Http/Requests/User/UpdateUserPasswordRequest.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\User;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class UpdateUserPasswordRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'password' => 'required|string|min:6|confirmed',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -102,14 +102,6 @@ class RouteServiceProvider extends ServiceProvider
|
||||
->group(base_path('routes/api.php'));
|
||||
}
|
||||
|
||||
protected function mapOasisRoutes()
|
||||
{
|
||||
Route::prefix('api/oasis')
|
||||
->middleware('api')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/oasis.php'));
|
||||
}
|
||||
|
||||
protected function mapShareRoutes()
|
||||
{
|
||||
Route::prefix('api')
|
||||
@@ -141,4 +133,11 @@ class RouteServiceProvider extends ServiceProvider
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/setup.php'));
|
||||
}
|
||||
|
||||
// Oasis
|
||||
protected function mapOasisRoutes()
|
||||
{
|
||||
Route::namespace($this->namespace)
|
||||
->group(base_path('routes/oasis.php'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
"/chunks/shared/file-browser.js": "/chunks/shared/file-browser.js?id=3127fab4cfd3d5f00a72",
|
||||
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=e8aedb75df7fe227d693",
|
||||
"/chunks/sign-in.js": "/chunks/sign-in.js?id=92a1de80f254cfc9ac91",
|
||||
"/chunks/sign-up.js": "/chunks/sign-up.js?id=50e81d184a05d3990d89",
|
||||
"/chunks/sign-up.js": "/chunks/sign-up.js?id=a51dd0f046981790d60c",
|
||||
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=6eb1bdf3942d7b2dd06f",
|
||||
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=8048188a201c41f248c6",
|
||||
"/chunks/subscription-service.js": "/chunks/subscription-service.js?id=90c1aa9431689a89eb3d",
|
||||
@@ -175,7 +175,7 @@
|
||||
"/js/main.55cf4e9bc02bec922581.hot-update.js": "/js/main.55cf4e9bc02bec922581.hot-update.js",
|
||||
"/js/main.b52ecb4afdc47584e38f.hot-update.js": "/js/main.b52ecb4afdc47584e38f.hot-update.js",
|
||||
"/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~74bf0fcb.js": "/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~74bf0fcb.js?id=6b6737a58e371fc4434b",
|
||||
"/chunks/oasis/platba.js": "/chunks/oasis/platba.js?id=2296813951c371e2be1b",
|
||||
"/chunks/oasis/platba.js": "/chunks/oasis/platba.js?id=7805c58cc0a244525e88",
|
||||
"/chunks/oasis/platba~chunks/upgrade-billing~chunks/upgrade-plan.js": "/chunks/oasis/platba~chunks/upgrade-billing~chunks/upgrade-plan.js?id=4781f8460c7f0f8b21a5",
|
||||
"/vendors~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-i~0a9c5e33.js": "/vendors~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-i~0a9c5e33.js?id=b28978d3c8aae9b949a5",
|
||||
"/vendors~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-i~8394cf85.js": "/vendors~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-i~8394cf85.js?id=d25da0762af813ea588c",
|
||||
@@ -327,5 +327,20 @@
|
||||
"/chunks/oasis/platba.f78f245efdfd2705115d.hot-update.js": "/chunks/oasis/platba.f78f245efdfd2705115d.hot-update.js",
|
||||
"/chunks/oasis/platba.520ba6d75a64d6f10fdc.hot-update.js": "/chunks/oasis/platba.520ba6d75a64d6f10fdc.hot-update.js",
|
||||
"/chunks/oasis/platba.06ace6b4690832e8d596.hot-update.js": "/chunks/oasis/platba.06ace6b4690832e8d596.hot-update.js",
|
||||
"/chunks/oasis/platba.38a0815c3b0389ce5797.hot-update.js": "/chunks/oasis/platba.38a0815c3b0389ce5797.hot-update.js"
|
||||
"/chunks/oasis/platba.38a0815c3b0389ce5797.hot-update.js": "/chunks/oasis/platba.38a0815c3b0389ce5797.hot-update.js",
|
||||
"/js/main.d67879825385082f0d36.hot-update.js": "/js/main.d67879825385082f0d36.hot-update.js",
|
||||
"/chunks/oasis/platba.40f4fdbfe7c883c81eec.hot-update.js": "/chunks/oasis/platba.40f4fdbfe7c883c81eec.hot-update.js",
|
||||
"/chunks/oasis/platba.9a1b581e7c8bf5a6e420.hot-update.js": "/chunks/oasis/platba.9a1b581e7c8bf5a6e420.hot-update.js",
|
||||
"/chunks/oasis/platba.a303b57f74a3b5c0e553.hot-update.js": "/chunks/oasis/platba.a303b57f74a3b5c0e553.hot-update.js",
|
||||
"/chunks/oasis/platba.73ec768e1fe32c114a28.hot-update.js": "/chunks/oasis/platba.73ec768e1fe32c114a28.hot-update.js",
|
||||
"/chunks/oasis/platba.3bc4d9afa4d0dc248145.hot-update.js": "/chunks/oasis/platba.3bc4d9afa4d0dc248145.hot-update.js",
|
||||
"/chunks/oasis/platba.7b31d89b8593042dbcbd.hot-update.js": "/chunks/oasis/platba.7b31d89b8593042dbcbd.hot-update.js",
|
||||
"/chunks/oasis/platba.5cb5e899ea459f99df6d.hot-update.js": "/chunks/oasis/platba.5cb5e899ea459f99df6d.hot-update.js",
|
||||
"/chunks/oasis/platba.52a9e7ecff39884a88b0.hot-update.js": "/chunks/oasis/platba.52a9e7ecff39884a88b0.hot-update.js",
|
||||
"/chunks/oasis/platba.585762ed0d7dc06714fd.hot-update.js": "/chunks/oasis/platba.585762ed0d7dc06714fd.hot-update.js",
|
||||
"/chunks/sign-up.f07bfc6e1ac48990d173.hot-update.js": "/chunks/sign-up.f07bfc6e1ac48990d173.hot-update.js",
|
||||
"/chunks/oasis/platba.7d9316390f22ac19e2d0.hot-update.js": "/chunks/oasis/platba.7d9316390f22ac19e2d0.hot-update.js",
|
||||
"/chunks/oasis/platba.c61378e3b0b6389cb731.hot-update.js": "/chunks/oasis/platba.c61378e3b0b6389cb731.hot-update.js",
|
||||
"/chunks/oasis/platba.54736d5bf911a2179219.hot-update.js": "/chunks/oasis/platba.54736d5bf911a2179219.hot-update.js",
|
||||
"/chunks/oasis/platba.3012a18c6b196cc483bc.hot-update.js": "/chunks/oasis/platba.3012a18c6b196cc483bc.hot-update.js"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div id="single-page">
|
||||
<div v-show="! isLoading" id="page-content" class="large-width center-page">
|
||||
<div v-show="! isLoadingPage" id="page-content" class="large-width center-page">
|
||||
|
||||
<div class="content-page auth-form">
|
||||
<div class="plan-title">
|
||||
@@ -40,7 +40,7 @@
|
||||
</ValidationObserver>
|
||||
</div>
|
||||
</div>
|
||||
<div id="loader" v-if="isLoading">
|
||||
<div id="loader" v-if="isLoadingPage">
|
||||
<Spinner></Spinner>
|
||||
</div>
|
||||
</div>
|
||||
@@ -95,10 +95,11 @@
|
||||
return {
|
||||
requested: undefined,
|
||||
isSubmitted: false,
|
||||
isLoading: true,
|
||||
isLoading: false,
|
||||
isLoadingPage: true,
|
||||
isError: false,
|
||||
password: undefined,
|
||||
password_confirmation: undefined,
|
||||
password: 'vuefilemanager',
|
||||
password_confirmation: 'vuefilemanager',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@@ -114,9 +115,15 @@
|
||||
|
||||
// Send request to get user token
|
||||
axios
|
||||
.post('/api/oasis/register', this.register)
|
||||
.post(`/oasis/subscribe/${this.$route.params.id}/set-password`, {
|
||||
password: this.password,
|
||||
password_confirmation: this.password_confirmation,
|
||||
})
|
||||
.then(() => {
|
||||
|
||||
// Set login state
|
||||
this.$store.commit('SET_AUTHORIZED', true)
|
||||
|
||||
// Go to files page
|
||||
this.$router.push({name: 'Files'})
|
||||
})
|
||||
@@ -138,15 +145,19 @@
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
axios.get(`/api/oasis/subscription-request/${this.$route.params.id}`)
|
||||
axios.get(`/api/oasis/subscribe/${this.$route.params.id}`)
|
||||
.then(response => {
|
||||
this.requested = response.data
|
||||
|
||||
if (response.data.data.attributes.status === 'logged') {
|
||||
this.$router.push({name: 'SignIn'})
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
this.$isSomethingWrong()
|
||||
})
|
||||
.finally(() => {
|
||||
this.isLoading = false
|
||||
this.isLoadingPage = false
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -273,7 +273,7 @@
|
||||
this.$isSomethingWrong()
|
||||
})
|
||||
|
||||
axios.get(`/api/oasis/subscription-request/${this.$route.params.id}`)
|
||||
axios.get(`/api/oasis/subscribe/${this.$route.params.id}`)
|
||||
.then(response => {
|
||||
this.requestedPlan = response.data
|
||||
|
||||
|
||||
4
resources/js/router.js
vendored
4
resources/js/router.js
vendored
@@ -15,7 +15,7 @@ const routesOasis = [
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "chunks/oasis/platba" */ './Oasis/Pages/SubscriptionRequestPayment'),
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
requiresAuth: false,
|
||||
title: 'Platba'
|
||||
},
|
||||
},
|
||||
@@ -25,7 +25,7 @@ const routesOasis = [
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "chunks/oasis/platba" */ './Oasis/Pages/CreatePasswordAfterPayment'),
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
requiresAuth: false,
|
||||
title: 'Vytvorit Heslo'
|
||||
},
|
||||
},
|
||||
|
||||
@@ -146,17 +146,6 @@
|
||||
})
|
||||
.catch(error => {
|
||||
|
||||
if (error.response.status == 401) {
|
||||
|
||||
if (error.response.data.error === 'invalid_client') {
|
||||
events.$emit('alert:open', {
|
||||
emoji: '🤔',
|
||||
title: this.$t('popup_passport_error.title'),
|
||||
message: this.$t('popup_passport_error.message')
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (error.response.status == 500) {
|
||||
|
||||
events.$emit('alert:open', {
|
||||
|
||||
@@ -3,13 +3,23 @@
|
||||
use App\Http\Controllers\Oasis\AdminController;
|
||||
use App\Http\Controllers\Oasis\SubscriptionController;
|
||||
|
||||
Route::group(['middleware' => 'auth:sanctum', 'prefix' => 'admin'], function () {
|
||||
Route::group(['middleware' => 'api', 'prefix' => '/api/oasis'], function () {
|
||||
|
||||
Route::get('/company-details', [AdminController::class, 'get_company_details']);
|
||||
Route::post('/users/create', [AdminController::class, 'register_new_client']);
|
||||
// Admin
|
||||
Route::group(['middleware' => 'auth:sanctum', 'prefix' => 'admin'], function () {
|
||||
Route::get('/company-details', [AdminController::class, 'get_company_details']);
|
||||
Route::post('/users/create', [AdminController::class, 'register_new_client']);
|
||||
});
|
||||
|
||||
// Subscription
|
||||
Route::group(['prefix' => 'subscribe'], function () {
|
||||
Route::post('/{order}', [SubscriptionController::class, 'subscribe']);
|
||||
Route::get('/{order}', [SubscriptionController::class, 'get_subscription_request']);
|
||||
Route::get('/{order}/setup-intent', [SubscriptionController::class, 'get_setup_intent']);
|
||||
});
|
||||
});
|
||||
|
||||
Route::get('/subscription-request/{order}', [SubscriptionController::class, 'get_subscription_request']);
|
||||
Route::get('/subscribe/{order}/setup-intent', [SubscriptionController::class, 'get_setup_intent']);
|
||||
Route::post('/subscribe/{order}/set-password', [SubscriptionController::class, 'set_password']);
|
||||
Route::post('/subscribe/{order}', [SubscriptionController::class, 'subscribe']);
|
||||
// Web routes
|
||||
Route::group(['middleware' => 'web', 'prefix' => 'oasis'], function () {
|
||||
Route::post('/subscribe/{order}/set-password', [SubscriptionController::class, 'set_password']);
|
||||
});
|
||||
|
||||
@@ -53,7 +53,7 @@ class OasisSubscriptionTest extends TestCase
|
||||
'creator' => 'john@doe.com',
|
||||
]);
|
||||
|
||||
$this->getJson("/api/oasis/subscription-request/{$user->subscriptionRequest->id}")
|
||||
$this->getJson("/api/oasis/subscribe/{$user->subscriptionRequest->id}")
|
||||
->assertStatus(200)
|
||||
->assertJsonFragment([
|
||||
'id' => $user->subscriptionRequest->id,
|
||||
@@ -140,4 +140,30 @@ class OasisSubscriptionTest extends TestCase
|
||||
'card_brand' => null,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function it_set_password_after_successful_payment()
|
||||
{
|
||||
$user = User::factory(User::class)
|
||||
->create(['role' => 'user']);
|
||||
|
||||
$user
|
||||
->subscriptionRequest()
|
||||
->create([
|
||||
'requested_plan' => 'virtualni-sanon-basic',
|
||||
'creator' => 'john@doe.com',
|
||||
'status' => 'payed',
|
||||
]);
|
||||
|
||||
$this->post("/oasis/subscribe/{$user->subscriptionRequest->id}/set-password", [
|
||||
'password' => 'vuefilemanager',
|
||||
'password_confirmation' => 'vuefilemanager',
|
||||
])->assertStatus(204);
|
||||
|
||||
$this->assertDatabaseHas('subscription_requests', [
|
||||
'status' => 'logged'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user