- set password backend

This commit is contained in:
Peter Papp
2021-03-23 15:32:28 +01:00
parent 9566a4a830
commit 75042e0c42
11 changed files with 159 additions and 52 deletions

View File

@@ -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);
}
}

View File

@@ -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();

View 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',
];
}
}

View File

@@ -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'));
}
}

View File

@@ -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"
}

View File

@@ -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
})
}
}

View File

@@ -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

View File

@@ -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'
},
},

View File

@@ -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', {

View File

@@ -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']);
});

View File

@@ -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'
]);
}
}