| 248 | } |
| 249 | |
| 250 | static CoTryTask<Dispatcher::OutputTable> handle(IEnv &ienv, |
| 251 | const argparse::ArgumentParser &parser, |
| 252 | const Dispatcher::Args &args) { |
| 253 | auto &env = dynamic_cast<AdminEnv &>(ienv); |
| 254 | ENSURE_USAGE(args.empty()); |
| 255 | Dispatcher::OutputTable output; |
| 256 | |
| 257 | auto uid = Uid(parser.get<uint32_t>("uid")); |
| 258 | |
| 259 | core::UserStore store; |
| 260 | auto handler = [&](kv::IReadOnlyTransaction &txn) -> CoTryTask<meta::UserAttr> { |
| 261 | CO_RETURN_ON_ERROR(co_await ensureAdmin(txn, store, env.userInfo.token, uid)); |
| 262 | auto fetchResult = co_await store.getUser(txn, uid); |
| 263 | CO_RETURN_ON_ERROR(fetchResult); |
| 264 | if (!fetchResult->has_value()) { |
| 265 | co_return makeError(MetaCode::kNotFound, fmt::format("Uid {} not found", uid.toUnderType())); |
| 266 | } |
| 267 | co_return **fetchResult; |
| 268 | }; |
| 269 | auto res = co_await kv::WithTransaction(getRetryStrategy()) |
| 270 | .run(env.kvEngineGetter()->createReadonlyTransaction(), std::move(handler)); |
| 271 | CO_RETURN_ON_ERROR(res); |
| 272 | printUserAttr(output, uid, *res); |
| 273 | co_return output; |
| 274 | } |
| 275 | }; |
| 276 | |
| 277 | struct UserListHandler { |
nothing calls this directly
no test coverage detected