//SPDX-FileCopyrightText: 2024 Yury Gubich //SPDX-License-Identifier: GPL-3.0-or-later #include "listassets.h" #include "server/server.h" #include "server/session.h" #include "database/exceptions.h" Handler::ListAssets::ListAssets (std::weak_ptr server): Handler("listAssets", Request::Method::get), server(server) {} void Handler::ListAssets::handle (Request& request) { std::string access = request.getAuthorizationToken(); if (access.empty()) return error(request, Response::Status::unauthorized); if (access.size() != 32) return error(request, Response::Status::badRequest); std::shared_ptr srv = server.lock(); if (!srv) return error(request, Response::Status::internalError); try { Session& session = srv->getSession(access); std::vector assets = srv->getDatabase()->listAssets(session.owner); nlohmann::json arr = nlohmann::json::array(); for (const DB::Asset& asset : assets) arr.push_back(asset.toJSON()); nlohmann::json body = nlohmann::json::object(); body["assets"] = arr; Response& res = request.createResponse(Response::Status::ok); res.setBody(body); res.send(); } catch (const DB::NoSession& e) { return error(request, Response::Status::unauthorized); } catch (const std::exception& e) { std::cerr << "Exception on poll:\n\t" << e.what() << std::endl; return error(request, Response::Status::internalError); } catch (...) { std::cerr << "Unknown exception on poll" << std::endl; return error(request, Response::Status::internalError); } }