Encoded url handling for is_ancestor queries

Summary: Adds proper url decoding for is_ancestor, so that special characters can be encoded in the url.

Reviewed By: kulshrax

Differential Revision: D9325467

fbshipit-source-id: d3ff60e004be8d254ea6f7288188adf54ab7ff5f
This commit is contained in:
Matthew Dippel 2018-08-15 11:06:17 -07:00 committed by Facebook Github Bot
parent 3a28aeef53
commit a3b9887ac6
2 changed files with 33 additions and 2 deletions

View File

@ -26,6 +26,7 @@ extern crate metaconfig;
extern crate mononoke_api as api;
extern crate mononoke_types;
extern crate panichandler;
extern crate percent_encoding;
extern crate reachabilityindex;
extern crate scuba_ext;
extern crate secure_utils;
@ -60,6 +61,7 @@ use clap::Arg;
use failure::{err_msg, Result};
use futures::Future;
use panichandler::Fate;
use percent_encoding::percent_decode;
use slog::{Drain, Level, Logger};
use slog_glog_fmt::{kv_categorizer, kv_defaults, GlogFormat};
use slog_logview::LogViewDrain;
@ -117,11 +119,17 @@ fn get_raw_file(
fn is_ancestor(
(state, info): (State<HttpServerState>, actix_web::Path<IsAncestorQueryInfo>),
) -> impl Future<Item = MononokeRepoResponse, Error = ErrorKind> {
let proposed_ancestor_parsed = percent_decode(info.proposed_ancestor.as_bytes())
.decode_utf8_lossy()
.to_string();
let proposed_descendent_parsed = percent_decode(info.proposed_descendent.as_bytes())
.decode_utf8_lossy()
.to_string();
unwrap_request(state.mononoke.send(MononokeQuery {
repo: info.repo.clone(),
kind: MononokeRepoQuery::IsAncestor {
proposed_ancestor: info.proposed_ancestor.clone(),
proposed_descendent: info.proposed_descendent.clone(),
proposed_ancestor: proposed_ancestor_parsed,
proposed_descendent: proposed_descendent_parsed,
},
}))
}

View File

@ -30,8 +30,17 @@ setup testing repo for mononoke
$ hg add branch2
$ hg commit -ma
$ COMMITB2=$(hg --debug id -i)
$ touch forward_slash_bm
$ hg add forward_slash_bm
$ hg commit -ma
$ FORWARD_SLASH_BM_HASH=$(hg --debug id -i)
$ COMMITB2_BOOKMARK=B2
$ hg co $COMMITB2 > /dev/null
$ hg bookmark $COMMITB2_BOOKMARK
$ hg co $FORWARD_SLASH_BM_HASH > /dev/null
$ FORWARD_SLASH_BM=forward/slash/bookmark
$ ENCODED_FORWARD_SLASH_BM=forward%2Fslash%2Fbookmark
$ hg bookmark $FORWARD_SLASH_BM
import testing repo to mononoke
$ cd ..
@ -162,6 +171,20 @@ test reachability on bookmarks
$ sslcurl $APISERVER/repo/is_ancestor/$COMMITB2_BOOKMARK/$COMMIT2
false (no-eol)
test reachability on url encoded bookmarks
$ sslcurl $APISERVER/repo/is_ancestor/$COMMIT2/$ENCODED_FORWARD_SLASH_BM
true (no-eol)
$ sslcurl $APISERVER/repo/is_ancestor/$ENCODED_FORWARD_SLASH_BM/$COMMIT2
false (no-eol)
$ sslcurl $APISERVER/repo/is_ancestor/$COMMITB2_BOOKMARK/$ENCODED_FORWARD_SLASH_BM
true (no-eol)
$ sslcurl $APISERVER/repo/is_ancestor/$ENCODED_FORWARD_SLASH_BM/$COMMITB2_BOOKMARK
false (no-eol)
test folder list
$ sslcurl $APISERVER/repo/list/$COMMIT2/folder | tee output | python -mjson.tool
[