$request->user()->gitConnections ->map(fn (UserGitConnection $gitConnection): array => [ 'account_login' => $gitConnection->account_login, 'account_name' => $gitConnection->account_name, 'base_url' => $gitConnection->base_url, 'created_at' => $gitConnection->created_at?->toISOString(), 'id' => $gitConnection->id, 'provider' => $gitConnection->provider->value, 'provider_label' => $gitConnection->provider->label(), 'provider_user_id' => $gitConnection->provider_user_id, 'updated_at' => $gitConnection->updated_at?->toISOString(), 'user_id' => $gitConnection->user_id, ]) ->values(), 'status' => $request->session()->get('status'), ]); } public function store(StoreUserGitConnectionRequest $request): RedirectResponse { try { $gitProvider = $this->gitProviderManager->client($request->provider()); $authenticatedUser = $gitProvider->getAuthenticatedUser( $request->baseUrl(), $request->apiToken(), ); } catch (Throwable) { return back() ->withErrors([ 'api_token' => 'KanbanGit could not authenticate against Gitea with this base URL and token.', ]); } UserGitConnection::query()->create([ 'account_login' => $authenticatedUser->login, 'account_name' => $authenticatedUser->name, 'api_token' => $request->apiToken(), 'base_url' => $request->baseUrl(), 'provider' => $request->provider(), 'provider_user_id' => $authenticatedUser->providerUserId, 'user_id' => $request->user()->id, ]); return to_route('git-connections.edit') ->with('status', 'Git connection was added.'); } public function update( UpdateUserGitConnectionRequest $request, UserGitConnection $gitConnection, ): RedirectResponse { $this->abortUnlessOwner($request, $gitConnection); try { $gitProvider = $this->gitProviderManager->client($request->provider()); $authenticatedUser = $gitProvider->getAuthenticatedUser( $request->baseUrl(), $request->apiToken(), ); } catch (Throwable) { return back() ->withErrors([ 'api_token' => 'KanbanGit could not authenticate against Gitea with this base URL and token.', ]); } $gitConnection->update([ 'account_login' => $authenticatedUser->login, 'account_name' => $authenticatedUser->name, 'api_token' => $request->apiToken(), 'base_url' => $request->baseUrl(), 'provider' => $request->provider(), 'provider_user_id' => $authenticatedUser->providerUserId, ]); return to_route('git-connections.edit') ->with('status', 'Git connection was updated.'); } public function destroy(Request $request, UserGitConnection $gitConnection): RedirectResponse { $this->abortUnlessOwner($request, $gitConnection); $label = "{$gitConnection->account_login} @ {$gitConnection->base_url}"; $gitConnection->delete(); return to_route('git-connections.edit') ->with('status', "{$label} was removed."); } private function abortUnlessOwner(Request $request, UserGitConnection $gitConnection): void { abort_unless($gitConnection->user_id === $request->user()->id, 403); } }