// Sandstorm - Personal Cloud Sandbox // Copyright (c) 2014 Sandstorm Development Group, Inc. and contributors // // Hack around stdlib bug with C++14. #include // force libstdc++ to include its config #undef _GLIBCXX_HAVE_GETS // correct broken config // End hack. #include #include #include #include #include #include #include #include #include #include #include namespace sandstorm { class GetPublicIdMain { public: GetPublicIdMain(kj::ProcessContext& context): context(context) { } kj::MainFunc getMain() { return kj::MainBuilder(context, "GetPublicId version: 0.0.2", "Runs the getPublicId command from hack-session.capnp. " "Outputs the return arguments as separate lines on stdout.") .expectArg("", KJ_BIND_METHOD(*this, setSessionId)) .callAfterParsing(KJ_BIND_METHOD(*this, run)) .build(); } kj::MainBuilder::Validity setSessionId(kj::StringPtr id) { sessionId = kj::heapString(id); return true; } kj::MainBuilder::Validity run() { capnp::EzRpcClient client("unix:/tmp/sandstorm-api"); SandstormHttpBridge::Client restorer = client.getMain(); auto request = restorer.getSessionContextRequest(); request.setId(sessionId); auto session = request.send().getContext().castAs(); kj::Promise promise = session .getPublicIdRequest() .send() .then([](capnp::Response&& result) { auto publicId = result.getPublicId(); auto hostname = result.getHostname(); auto autoUrl = result.getAutoUrl(); auto isDemoUser = result.getIsDemoUser(); kj::String msg = kj::str(publicId, "\n", hostname, "\n", autoUrl, "\n", isDemoUser ? "true" : "false", "\n"); kj::FdOutputStream(STDOUT_FILENO).write(msg.begin(), msg.size()); }, [] (auto e) { auto desc = e.getDescription(); kj::FdOutputStream(STDOUT_FILENO).write(desc.begin(), desc.size()); }); promise.wait(client.getWaitScope()); return true; } private: kj::ProcessContext& context; kj::String sessionId; }; } // namespace sandstorm KJ_MAIN(sandstorm::GetPublicIdMain)