space->accounts()->findOrFail($accountId); $cardDavServers = $account->carddavServers; if ($cardDavServers->isEmpty()) return new \stdClass; return $cardDavServers->map(function ($cardDavServer) { return $this->extractCardDavServer($cardDavServer); })->keyBy('carddav_id'); } public function show(Request $request, int $accountId, int $cardDavServerId) { $account = $request->space->accounts()->findOrFail($accountId); $cardDavServer = $account->cardDavServers()->findOrFail($cardDavServerId); return $this->extractCardDavServer($cardDavServer); } public function update(CardDavCredentials $request, int $accountId, int $cardDavServerId) { $account = $request->space->accounts()->findOrFail($accountId); $cardDavServer = $request->space->cardDavServers()->findOrFail($cardDavServerId); $accountCarddavCredentials = AccountCardDavCredentials::where('account_id', $account->id) ->where('space_carddav_server_id', $cardDavServer->id) ->delete(); $accountCarddavCredentials = new AccountCardDavCredentials; $accountCarddavCredentials->space_carddav_server_id = $cardDavServer->id; $accountCarddavCredentials->account_id = $account->id; $accountCarddavCredentials->username = $request->get('username'); $accountCarddavCredentials->domain = $request->get('domain'); $accountCarddavCredentials->password = bchash( $request->get('username'), $request->get('domain'), $request->get('password'), $request->get('algorithm') ); $accountCarddavCredentials->algorithm = $request->get('algorithm'); return $accountCarddavCredentials->save(); } public function destroy(Request $request, int $accountId, int $cardDavServerId) { $account = $request->space->accounts()->findOrFail($accountId); $cardDavServer = $account->cardDavServers()->findOrFail($cardDavServerId); return $cardDavServer->delete(); } private function extractCardDavServer(SpaceCardDavServer $cardDavServer) { return [ 'carddav_id' => $cardDavServer->id, 'username' => $cardDavServer->pivot->username, 'domain' => $cardDavServer->pivot->domain, 'algorithm' => $cardDavServer->pivot->algorithm, 'password' => $cardDavServer->pivot->password, ]; } }