Team functionality (#459)
* add api enpoints for adding, removing, updating user to workspace and leaving workspace * feat: updates client site workspace settings * refactor and add domain setting ui in modal * move workspace user functionality to its own component * adds tests * fix linting * updates select input to FlatSelectInput * moves workspace user role edit to seperated component * move user adding to its own component * adds check to usure users exist before checking is admin * fix loading users * feat: invite user to team functionality * fix token coulmn * fix self host mode changes * tests for user invite * Refactor back-end * Rename variables * Improve some styling elements + refactor workspace settings * More styling * More UI polishing * More UI fixes * PHP linting * Implemented most of the logic for team-functionnality * Fix user avatar URL * WIP remove users on cancellation * Finished pricing for team functionality * Fix tests * Fix linting * Added pricing_enabled helper * Fix pricing_enabled shortcut * Debug CI * Disable pricing when testing --------- Co-authored-by: LL-Etiane <lukongleinyuyetiane@gmail.com> Co-authored-by: Lukong Etiane <83535251+LL-Etiane@users.noreply.github.com> Co-authored-by: Julien Nahum <julien@nahum.net>
This commit is contained in:
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Auth;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\UserResource;
|
||||
use App\Models\User;
|
||||
use App\Models\UserInvite;
|
||||
use App\Models\Workspace;
|
||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Foundation\Auth\RegistersUsers;
|
||||
@@ -62,6 +63,7 @@ class RegisterController extends Controller
|
||||
'hear_about_us' => 'required|string',
|
||||
'agree_terms' => ['required', Rule::in([true])],
|
||||
'appsumo_license' => ['nullable'],
|
||||
'invite_token' => ['nullable', 'string'],
|
||||
], [
|
||||
'agree_terms' => 'Please agree with the terms and conditions.',
|
||||
]);
|
||||
@@ -69,15 +71,11 @@ class RegisterController extends Controller
|
||||
|
||||
/**
|
||||
* Create a new user instance after a valid registration.
|
||||
*
|
||||
* @return \App\User
|
||||
*/
|
||||
protected function create(array $data)
|
||||
{
|
||||
$workspace = Workspace::create([
|
||||
'name' => 'My Workspace',
|
||||
'icon' => '🧪',
|
||||
]);
|
||||
$this->checkRegistrationAllowed($data);
|
||||
[$workspace, $role] = $this->getWorkspaceAndRole($data);
|
||||
|
||||
$user = User::create([
|
||||
'name' => $data['name'],
|
||||
@@ -89,7 +87,7 @@ class RegisterController extends Controller
|
||||
// Add relation with user
|
||||
$user->workspaces()->sync([
|
||||
$workspace->id => [
|
||||
'role' => 'admin',
|
||||
'role' => $role,
|
||||
],
|
||||
], false);
|
||||
|
||||
@@ -97,4 +95,45 @@ class RegisterController extends Controller
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
private function checkRegistrationAllowed(array $data)
|
||||
{
|
||||
if (config('app.self_hosted') && !array_key_exists('invite_token', $data)) {
|
||||
response()->json(['message' => 'Registration is not allowed in self host mode'], 400)->throwResponse();
|
||||
}
|
||||
}
|
||||
|
||||
private function getWorkspaceAndRole(array $data)
|
||||
{
|
||||
if (!array_key_exists('invite_token', $data)) {
|
||||
return [
|
||||
Workspace::create([
|
||||
'name' => 'My Workspace',
|
||||
'icon' => '🧪',
|
||||
]),
|
||||
User::ROLE_ADMIN
|
||||
];
|
||||
}
|
||||
|
||||
$userInvite = UserInvite::where('email', $data['email'])
|
||||
->where('token', $data['invite_token'])
|
||||
->first();
|
||||
|
||||
if (!$userInvite) {
|
||||
response()->json(['message' => 'Invite token is invalid.'], 400)->throwResponse();
|
||||
}
|
||||
if ($userInvite->hasExpired()) {
|
||||
response()->json(['message' => 'Invite token has expired.'], 400)->throwResponse();
|
||||
}
|
||||
|
||||
if ($userInvite->status == UserInvite::ACCEPTED_STATUS) {
|
||||
response()->json(['message' => 'Invite is already accepted.'], 400)->throwResponse();
|
||||
}
|
||||
|
||||
$userInvite->markAsAccepted();
|
||||
return [
|
||||
$userInvite->workspace,
|
||||
$userInvite->role,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user