feat: serve paste entries
ci/woodpecker/push/woodpecker Pipeline was successful Details

trie-skips
Jef Roosens 2022-11-21 16:28:27 +01:00
parent 7f42d540b5
commit 97ed770166
Signed by: Jef Roosens
GPG Key ID: B75D4F293C7052DB
3 changed files with 11 additions and 6 deletions

View File

@ -26,6 +26,8 @@ RUN make prod && \
FROM alpine:3.16.3 FROM alpine:3.16.3
ENV LANDER_DATA_DIR=/data
RUN apk add --update --no-cache boost && \ RUN apk add --update --no-cache boost && \
mkdir /data && \ mkdir /data && \
chown -R 1000:1000 /data chown -R 1000:1000 /data

View File

@ -14,5 +14,5 @@ elif [ "$1" = get ]; then
curl -is "$URL/$2" | sed -En 's/^[lL]ocation: (.*)/\1/p' curl -is "$URL/$2" | sed -En 's/^[lL]ocation: (.*)/\1/p'
elif [ "$1" = paste ]; then elif [ "$1" = paste ]; then
curl -v --data-binary @"$2" -XPOST -H "X-Api-Key: $API_KEY" "$URL/p/" curl --data-binary @"$2" -XPOST -H "X-Api-Key: $API_KEY" "$URL/p/"
fi fi

View File

@ -52,17 +52,20 @@ int main() {
mkdir((data_dir + "/pastes").c_str(), 0700); mkdir((data_dir + "/pastes").c_str(), 0700);
crow::SimpleApp app; crow::SimpleApp app;
app.loglevel(crow::LogLevel::Info); app.loglevel(crow::LogLevel::Info);
// Serve an entry
CROW_ROUTE(app, "/<string>") CROW_ROUTE(app, "/<string>")
.methods(crow::HTTPMethod::Get)( .methods(crow::HTTPMethod::Get)(
[trie](crow::response &res, std::string s) { [data_dir, trie](crow::response &res, std::string key) {
Entry *entry = ternarytrie_search(trie, s.c_str()); Entry *entry = ternarytrie_search(trie, key.c_str());
// TODO check entry type
if (entry != NULL) { if (entry != NULL) {
if (entry->type == Redirect) {
res.redirect(entry->string); res.redirect(entry->string);
} else if (entry->type == Paste) {
res.set_static_file_info(data_dir + "/pastes/" + key);
}
} else { } else {
res.code = 404; res.code = 404;
} }