Skip to content
This repository was archived by the owner on Feb 6, 2022. It is now read-only.

Commit abbece0

Browse files
committed
fix(download): Reauth at an expired session
1 parent 5bf4f6e commit abbece0

File tree

3 files changed

+22
-13
lines changed

3 files changed

+22
-13
lines changed

include/cacos/ejudge/session.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,10 @@ class Session {
4141

4242
std::string_view domain() const;
4343

44-
html::Html getPageImpl(std::string_view base, std::string_view params = "");
45-
std::string_view getImpl(std::string_view base, std::string_view params);
44+
std::pair<std::string_view, html::Html> getImpl(
45+
std::string_view base,
46+
std::string_view params = "");
47+
std::string_view rawGetter(std::string_view base, std::string_view params);
4648

4749
template<typename Callback>
4850
auto getter(std::string_view base, std::string_view params, Callback&& callback) {

src/ejudge/session.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,12 @@ Session::~Session() {
6666
}
6767

6868
void Session::setCookie(std::string_view cookie) const {
69-
log::log().print("Savig cookies: EJSID = {}", cookie);
69+
log::log().print("Saving cookies: EJSID = {}", cookie);
7070
client_.cookie(fmt::format("{}\tFALSE\t/\tFALSE\t0\tEJSID\t{}", domain(), cookie));
7171
}
7272

7373
void Session::saveSession() const {
74-
log::log().print("Savig token: {}", domain(), token_);
74+
log::log().print("Saving token: {}", domain(), token_);
7575
std::ofstream token(config_.file(config::FileType::token));
7676
fmt::print(token, "{}", token_);
7777
}
@@ -160,14 +160,15 @@ std::string Session::buildUrl(std::string_view base) {
160160

161161
html::Html Session::getPage(std::string_view base, std::string_view params) {
162162
return getter(
163-
base, params, [this](auto base, auto params) { return getPageImpl(base, params); });
163+
base, params, [this](auto base, auto params) { return getImpl(base, params).second; });
164164
}
165165

166166
std::string_view Session::getRaw(std::string_view base, std::string_view params) {
167-
return getter(base, params, [this](auto base, auto params) { return getImpl(base, params); });
167+
return getter(
168+
base, params, [this](auto base, auto params) { return getImpl(base, params).first; });
168169
}
169170

170-
std::string_view Session::getImpl(std::string_view base, std::string_view params) {
171+
std::string_view Session::rawGetter(std::string_view base, std::string_view params) {
171172
std::string url = buildUrl(base);
172173
if (!params.empty()) {
173174
url += "?" + util::str(params);
@@ -183,8 +184,11 @@ std::string_view Session::getImpl(std::string_view base, std::string_view params
183184
return cache_->set(url, result);
184185
}
185186

186-
html::Html Session::getPageImpl(std::string_view base, std::string_view params) {
187-
html::Html page(getImpl(base, params));
187+
std::pair<std::string_view, html::Html> Session::getImpl(
188+
std::string_view base,
189+
std::string_view params) {
190+
std::string_view raw = rawGetter(base, params);
191+
html::Html page(raw);
188192
html::Collection titles = page.tags("title");
189193
for (auto node : titles) {
190194
auto throwIfContains = [&](std::string_view s, auto dummy) {
@@ -198,7 +202,7 @@ html::Html Session::getPageImpl(std::string_view base, std::string_view params)
198202
throwIfContains("[]: Error: Invalid contest", SessionError{""});
199203
}
200204

201-
return page;
205+
return {raw, std::move(page)};
202206
}
203207

204208
} // namespace cacos::ejudge

src/test/suite/suite.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,12 @@ void Suite::run(
183183
++crashed;
184184

185185
std::cout << termcolor::red;
186-
std::string status =
187-
process::status::serialize(checkerCtx.result.status);
188-
fmt::print(std::cout, " Checker failure: {}, exit code = {}\n", status, checkerCtx.result.returnCode);
186+
std::string status = process::status::serialize(checkerCtx.result.status);
187+
fmt::print(
188+
std::cout,
189+
" Checker failure: {}, exit code = {}\n",
190+
status,
191+
checkerCtx.result.returnCode);
189192
std::cout << termcolor::reset;
190193
continue;
191194
}

0 commit comments

Comments
 (0)