kopia lustrzana https://github.com/pixelfed/pixelfed
122 wiersze
3.8 KiB
PHP
122 wiersze
3.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Mail\UserInviteMail;
|
|
use App\Services\EmailService;
|
|
use App\User;
|
|
use App\UserInvite;
|
|
use Auth;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Mail;
|
|
|
|
class UserInviteController extends Controller
|
|
{
|
|
public function create(Request $request)
|
|
{
|
|
abort_if(! config('pixelfed.user_invites.enabled'), 404);
|
|
abort_unless(Auth::check(), 403);
|
|
|
|
return view('settings.invites.create');
|
|
}
|
|
|
|
public function show(Request $request)
|
|
{
|
|
abort_if(! config('pixelfed.user_invites.enabled'), 404);
|
|
abort_unless(Auth::check(), 403);
|
|
$invites = UserInvite::whereUserId(Auth::id())->paginate(10);
|
|
$limit = config('pixelfed.user_invites.limit.total');
|
|
$used = UserInvite::whereUserId(Auth::id())->count();
|
|
|
|
return view('settings.invites.home', compact('invites', 'limit', 'used'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
abort_if(! config('pixelfed.user_invites.enabled'), 404);
|
|
abort_unless(Auth::check(), 403);
|
|
$this->validate($request, [
|
|
'email' => 'required|email|unique:users|unique:user_invites',
|
|
'message' => 'nullable|string|max:500',
|
|
'tos' => 'required|accepted',
|
|
]);
|
|
|
|
$email = $request->input('email');
|
|
|
|
$userCount = UserInvite::whereUserId(Auth::id())->count();
|
|
$userLimit = config('pixelfed.user_invites.limit.total');
|
|
|
|
abort_if($userCount >= $userLimit, 400);
|
|
abort_if(EmailService::isBanned($email), 400);
|
|
abort_if(User::whereEmail($email)->exists(), 400);
|
|
|
|
$invite = new UserInvite;
|
|
$invite->user_id = Auth::id();
|
|
$invite->profile_id = Auth::user()->profile_id;
|
|
$invite->email = $email;
|
|
$invite->message = $request->input('message');
|
|
$invite->key = str_random(random_int(6, 9)).'_'.str_random(random_int(14, 20)).'_'.str_random(random_int(32, 64));
|
|
$invite->token = str_random(random_int(32, 69));
|
|
$invite->save();
|
|
|
|
// Mail::to($email)->send(new UserInviteMail($invite));
|
|
|
|
return redirect(route('settings.invites'));
|
|
}
|
|
|
|
public function redeem(Request $request, $key, $token)
|
|
{
|
|
abort_if(! config('pixelfed.user_invites.enabled'), 404);
|
|
// if($request->user()) {
|
|
// return redirect('/');
|
|
// }
|
|
$invite = UserInvite::where('key', $key)
|
|
->where('token', $token)
|
|
->first();
|
|
|
|
return view('invite.landing', compact('invite'));
|
|
// return response()->json([
|
|
// 'key' => $key,
|
|
// 'token' => $token,
|
|
// 'invite' => $invite->url()
|
|
// ], 200, [], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
|
|
}
|
|
|
|
public function redeemVerify(Request $request, $key, $token)
|
|
{
|
|
abort_if(! config('pixelfed.user_invites.enabled'), 404);
|
|
// if($request->user()) {
|
|
// return redirect('/');
|
|
// }
|
|
|
|
$this->validate($request, [
|
|
// 'email' => 'required|email|exists:user_invites,email',
|
|
'email' => 'required|email',
|
|
]);
|
|
|
|
$invite = UserInvite::where('key', $key)
|
|
->where('token', $token)
|
|
->where('email', $request->input('email'))
|
|
->firstOrFail();
|
|
|
|
session([
|
|
'invite_verified' => true,
|
|
'invite_id' => $invite->id,
|
|
]);
|
|
|
|
return redirect('/i/invite/verified');
|
|
}
|
|
|
|
public function verified(Request $request)
|
|
{
|
|
abort_if(! config('pixelfed.user_invites.enabled'), 404);
|
|
// if($request->user()) {
|
|
// return redirect('/');
|
|
// }
|
|
abort_if(! $request->session()->has('invite_verified'), 404);
|
|
$invite = UserInvite::find($request->session()->get('invite_id'));
|
|
|
|
return view('invite.verified', compact('invite'));
|
|
}
|
|
}
|