service = $service; } public function mount(int $id): void { $this->attempt( action: function () use ($id) { $record = $this->service->getConnectedApp($id); $this->form->set($record); $this->recordId = $id; }, onError: function () { $this->redirectRoute("apps.index", navigate: true); }, showSuccess: false, ); } #[Computed] public function providers() { return ConnectionProvider::query()->get(); } #[Computed] public function protocols(): Collection { $protocolService = app(ConnectionProtocolService::class); return $protocolService ->getAll() ->map(function (ConnectionProtocol $protocol) { $protocol->name = strtoupper($protocol->name); return $protocol; }); } #[Computed] public function isSaml(): bool { $protocol = $this->protocols()->firstWhere( "id", (int) $this->form->protocolId, ); return $protocol && strtolower($protocol->name) === "saml"; } #[Computed] public function isKekaProvider(): bool { $provider = $this->providers()->firstWhere( "id", (int) $this->form->providerId, ); return $provider && $provider->slug === "keka-hr"; } /** * @returns DataCollection */ #[Computed] public function connectionStatuses(): DataCollection { $statusService = app(ConnectionStatusService::class); return $statusService->getAll(); } public function save(): void { $this->attempt( action: function () { $this->form->validate(); $settings = null; if ($this->isSaml()) { $attributes = []; foreach ($this->form->samlAttributes as $attr) { if (!empty($attr['saml_name']) && !empty($attr['user_field'])) { $attributes[$attr['saml_name']] = $attr['user_field']; } } $settings = [ "saml" => [ "entity_id" => $this->form->samlEntityId, "acs_url" => $this->form->samlAcsUrl, "nameid_format" => $this->form->samlNameIdFormat, "nameid_source" => $this->form->samlNameIdSource, "attributes" => $attributes, ], ]; } elseif ($this->isKekaProvider()) { $settings = [ "keka_url" => $this->form->kekaUrl, "keka" => [ "keka_url" => $this->form->kekaUrl, "callback_path" => "signin-oidc", "provider" => "Office365", ], ]; } $serviceData = new ConnectAppRequest( name: $this->form->name, connectionProviderId: $this->form->providerId, connectionProtocolId: $this->form->protocolId, slug: str($this->form->name)->slug()->toString(), connectionStatusId: $this->form->statusId, settings: $settings, ); $this->service->update($this->recordId, $serviceData); $this->redirectRoute("apps.index", navigate: true); }, ); } public function addSamlAttribute(): void { $this->form->addSamlAttribute(); } public function removeSamlAttribute(int $index): void { $this->form->removeSamlAttribute($index); } }; ?>
@if($this->isSaml) @endif @if($this->isKekaProvider)

Keka Configuration

@endif
{{ __('Cancel') }} {{ __('Save') }}