| 210 | } |
| 211 | |
| 212 | static CoTryTask<Dispatcher::OutputTable> handle(IEnv &ienv, |
| 213 | const argparse::ArgumentParser &parser, |
| 214 | const Dispatcher::Args &args) { |
| 215 | auto &env = dynamic_cast<AdminEnv &>(ienv); |
| 216 | ENSURE_USAGE(args.empty()); |
| 217 | Dispatcher::OutputTable output; |
| 218 | |
| 219 | auto uid = Uid(parser.get<uint32_t>("uid")); |
| 220 | auto token = parser.present<String>("--token").value_or(""); |
| 221 | auto generateNewToken = parser.get<bool>("--new"); |
| 222 | auto invalidateExistedToken = parser.get<bool>("--invalidate-existed-tokens"); |
| 223 | auto maxActiveTokens = parser.get<uint32_t>("--max-active-tokens"); |
| 224 | auto tokenLifetimeExtendLength = Duration(std::chrono::days(parser.get<uint32_t>("--last-token-lifetime-days"))); |
| 225 | |
| 226 | ENSURE_USAGE(!token.empty() + generateNewToken == 1, "must set one of token and generate-token"); |
| 227 | |
| 228 | core::UserStore store; |
| 229 | auto handler = [&](kv::IReadWriteTransaction &txn) -> CoTryTask<meta::UserAttr> { |
| 230 | CO_RETURN_ON_ERROR(co_await ensureAdmin(txn, store, env.userInfo.token)); |
| 231 | co_return co_await store |
| 232 | .setUserToken(txn, uid, token, invalidateExistedToken, maxActiveTokens, tokenLifetimeExtendLength); |
| 233 | }; |
| 234 | auto commitRes = co_await kv::WithTransaction(getRetryStrategy()) |
| 235 | .run(env.kvEngineGetter()->createReadWriteTransaction(), std::move(handler)); |
| 236 | CO_RETURN_ON_ERROR(commitRes); |
| 237 | printUserAttr(output, uid, *commitRes); |
| 238 | |
| 239 | co_return output; |
| 240 | } |
| 241 | }; |
| 242 | |
| 243 | struct UserStatHandler { |
nothing calls this directly
no test coverage detected