UserGitConnectionResource::collection($request->user()->gitConnections)->resolve(), 'status' => $request->session()->get('status'), ]); } public function store(StoreUserGitConnectionRequest $request): RedirectResponse { $validated = $request->validated(); $apiToken = Arr::get($validated, 'api_token'); $baseUrl = Arr::get($validated, 'base_url'); $provider = GitProviderKey::from(Arr::get($validated, 'provider')); $user = $request->user(); try { $gitProvider = $this->gitProviderManager->client($provider); $authenticatedUser = $gitProvider->getAuthenticatedUser( $baseUrl, $apiToken, ); } catch (Throwable) { return back() ->withErrors([ 'api_token' => sprintf('%s could not authenticate against Gitea with this base URL and token.', config('app.name')), ]); } UserGitConnection::query()->create([ 'account_login' => $authenticatedUser->login, 'account_name' => $authenticatedUser->name, 'api_token' => $apiToken, 'base_url' => $baseUrl, 'provider' => $provider, 'provider_user_id' => $authenticatedUser->providerUserId, 'user_id' => $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); $validated = $request->validated(); $apiToken = Arr::get($validated, 'api_token'); $baseUrl = Arr::get($validated, 'base_url'); $provider = GitProviderKey::from(Arr::get($validated, 'provider')); try { $gitProvider = $this->gitProviderManager->client($provider); $authenticatedUser = $gitProvider->getAuthenticatedUser( $baseUrl, $apiToken, ); } catch (Throwable) { return back() ->withErrors([ 'api_token' => sprintf('%s could not authenticate against Gitea with this base URL and token.', config('app.name')), ]); } $gitConnection->update([ 'account_login' => $authenticatedUser->login, 'account_name' => $authenticatedUser->name, 'api_token' => $apiToken, 'base_url' => $baseUrl, 'provider' => $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 { $user = $request->user(); abort_unless($gitConnection->user_id === $user->id, 403); } }