Skip to content

Commit

Permalink
test pvl update
Browse files Browse the repository at this point in the history
  • Loading branch information
mlsteele committed Apr 20, 2017
1 parent ce59440 commit b7aec17
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
2 changes: 1 addition & 1 deletion pvl-tools/kit.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"kit_version":1,"ctime":1489692564,"tab":{"1":{"pvl_version":1,"revision":1,"services":{"coinbase":[[{"fill":{"with":"x","into":"tmp1"}},{"assert_regex_match":{"pattern":"^y$","from":"tmp1","error":["SERVICE_DEAD","coinbase proofs are no longer supported"]}}]],"dns":[[{"assert_regex_match":{"pattern":"^keybase-site-verification=%{sig_id_medium}$","from":"txt","error":["NOT_FOUND","matching DNS entry not found"]}}]],"facebook":[[{"assert_regex_match":{"pattern":"^[a-zA-Z0-9\\.]+$","from":"username_service","error":["BAD_USERNAME","Invalid characters in username '%{username_service}'"]}},{"regex_capture":{"pattern":"^https://(m|www)\\.facebook\\.com/([^/]*)/posts/([0-9]+)$","from":"hint_url","into":["unused1","username_from_url","post_id"],"error":["BAD_API_URL","Bad hint from server; URL should start with 'https://m.facebook.com/%{username_service}/posts/', got '%{hint_url}'"]}},{"assert_compare":{"cmp":"stripdots-then-cicmp","a":"username_from_url","b":"username_service","error":["BAD_API_URL","Bad hint from server; username in URL should match '%{username_service}', received '%{username_from_url}'"]}},{"fill":{"with":"https://www.facebook.com/%{username_from_url}/posts/%{post_id}","into":"our_url"}},{"fetch":{"kind":"html","from":"our_url"}},{"selector_css":{"selectors":["code",0,{"contents":true},0],"into":"first_code_comment","data":true,"error":["FAILED_PARSE","Could not find proof markup comment in Facebook's response"]}},{"replace_all":{"old":"-\\-\\","new":"--","from":"first_code_comment","into":"fcc2"}},{"replace_all":{"old":"\\\\","new":"\\","from":"fcc2","into":"fcc3"}},{"parse_html":{"from":"fcc3","error":["FAILED_PARSE","Failed to parse proof markup comment in Facebook post: %{fcc3}"]}},{"selector_css":{"selectors":["div.userContent+div a",1],"into":"link_text","error":["FAILED_PARSE","Could not find link text in Facebook's response"]}},{"whitespace_normalize":{"from":"link_text","into":"link_text_nw"}},{"regex_capture":{"pattern":"^Verifying myself: I am (\\S+) on Keybase.io. (\\S+)$","from":"link_text_nw","into":["username_from_link","sig_from_link"],"error":["TEXT_NOT_FOUND","Could not find Verifying myself: I am %{username_keybase} on Keybase.io. (%{sig_id_medium})"]}},{"assert_compare":{"cmp":"cicmp","a":"username_from_link","b":"username_keybase","error":["BAD_USERNAME","Wrong keybase username in post '%{username_from_link}' should be '%{username_keybase}'"]}},{"assert_compare":{"cmp":"exact","a":"sig_id_medium","b":"sig_from_link","error":["BAD_SIGNATURE","Could not find sig; '%{sig_from_link}' != '%{sig_id_medium}'"]}}]],"github":[[{"regex_capture":{"pattern":"^https://gist\\.github(?:usercontent)?\\.com/([^/]*)/.*$","from":"hint_url","into":["username_from_url"],"error":["BAD_API_URL","Bad hint from server; URL should start with either https://gist.github.com OR https://gist.githubusercontent.com"]}},{"assert_compare":{"cmp":"cicmp","a":"username_from_url","b":"username_service","error":["BAD_API_URL","Bad hint from server; URL should contain username matching %{username_service}; got %{username_from_url}"]}},{"fetch":{"kind":"string","from":"hint_url","into":"haystack"}},{"assert_find_base64":{"needle":"sig","haystack":"haystack"},"error":["TEXT_NOT_FOUND","signature not found in body"]}]],"hackernews":[[{"regex_capture":{"pattern":"^https://hacker-news\\.firebaseio\\.com/v0/user/([^/]+)/about.json$","from":"hint_url","into":["username_from_url"],"error":["BAD_API_URL","Bad hint from server; URL should match https://hacker-news.firebaseio.com/v0/user/%{username_service}/about.json"]}},{"assert_compare":{"cmp":"cicmp","a":"username_from_url","b":"username_service","error":["BAD_API_URL","Bad hint from server; URL should contain username matching %{username_service}; got %{username_from_url}"]}},{"fetch":{"kind":"string","from":"hint_url","into":"profile"}},{"assert_regex_match":{"pattern":"^.*%{sig_id_medium}.*$","from":"profile","error":["TEXT_NOT_FOUND","Posted text does not include signature '%{sig_id_medium}'"]}}]],"reddit":[[{"regex_capture":{"pattern":"^https://www.reddit.com/r/([^/]+)/(.*)$","from":"hint_url","into":["subreddit_from_url","path_remainder"],"error":["BAD_API_URL","URL should start with 'https://www.reddit.com/r/keybaseproofs'"]}},{"assert_regex_match":{"pattern":"^keybaseproofs$","case_insensitive":true,"from":"subreddit_from_url","error":["BAD_API_URL","URL contained wrong subreddit '%{subreddit_from_url}' !+ 'keybaseproofs'"]}},{"fetch":{"from":"hint_url","kind":"json"}},{"selector_json":{"selectors":[0,"kind"],"into":"kind","error":["CONTENT_MISSING","Could not find 'kind' in json"]}},{"assert_regex_match":{"pattern":"^Listing$","from":"kind","error":["CONTENT_FAILURE","Wanted a post of type 'Listing', but got '%{kind}'"]}},{"selector_json":{"selectors":[0,"data","children",0,"kind"],"into":"inner_kind","error":["CONTENT_MISSING","Could not find inner 'kind' in json"]}},{"assert_regex_match":{"pattern":"^t3$","from":"inner_kind","error":["CONTENT_FAILURE","Wanted a child of type 't3' but got '%{inner_kind}'"]}},{"selector_json":{"selectors":[0,"data","children",0,"data","subreddit"],"into":"subreddit_from_json","error":["CONTENT_MISSING","Could not find 'subreddit' in json"]}},{"assert_regex_match":{"pattern":"^keybaseproofs$","case_insensitive":true,"from":"subreddit_from_json","error":["CONTENT_FAILURE","Wrong subreddti %{subreddit_from_json}"]}},{"selector_json":{"selectors":[0,"data","children",0,"data","author"],"into":"author","error":["CONTENT_MISSING","Could not find author in json"]}},{"assert_compare":{"cmp":"cicmp","a":"author","b":"username_service","error":["BAD_USERNAME","Bad post author; wanted '%{username_service}' but got '%{author}'"]}},{"selector_json":{"selectors":[0,"data","children",0,"data","title"],"into":"title","error":["CONTENT_MISSING","Could not find title in json"]}},{"assert_regex_match":{"pattern":"^.*%{sig_id_medium}.*$","from":"title","error":["TITLE_NOT_FOUND","Missing signature ID (%{sig_id_medium})) in post title '%{title}'"]}},{"selector_json":{"selectors":[0,"data","children",0,"data","selftext"],"into":"selftext","error":["CONTENT_MISSING","Could not find selftext in json"]}},{"assert_find_base64":{"needle":"sig","haystack":"selftext","error":["TEXT_NOT_FOUND","signature not found in body"]}}]],"rooter":[[{"assert_regex_match":{"pattern":"^https?://[\\w:_\\-\\.]+/_/api/1\\.0/rooter/%{username_service}/.*$","case_insensitive":true,"from":"hint_url"}},{"fetch":{"from":"hint_url","kind":"json"}},{"selector_json":{"selectors":["status","name"],"into":"name"}},{"assert_regex_match":{"pattern":"^ok$","case_insensitive":true,"from":"name"}},{"selector_json":{"selectors":["toot","post"],"into":"post"}},{"assert_regex_match":{"pattern":"^.*%{sig_id_medium}.*$","from":"post"}}]],"twitter":[[{"regex_capture":{"pattern":"^https://twitter\\.com/([^/]+)/.*$","from":"hint_url","into":["username_from_url"],"error":["BAD_API_URL","Bad hint from server; URL should start with 'https://twitter.com/%{username_service}/'"]}},{"assert_compare":{"cmp":"cicmp","a":"username_from_url","b":"username_service","error":["BAD_API_URL","Bad hint from server; URL should contain username matching %{username_service}; got %{username_from_url}"]}},{"fetch":{"from":"hint_url","kind":"html"}},{"selector_css":{"selectors":["div.permalink-tweet-container div.permalink-tweet",0],"attr":"data-screen-name","into":"data_screen_name","error":["FAILED_PARSE","Couldn't find a div $(div.permalink-tweet-container div.permalink-tweet).eq(0)"]}},{"assert_compare":{"cmp":"cicmp","a":"data_screen_name","b":"username_service","error":["BAD_USERNAME","Bad post authored: wanted '%{username_service}' but got '%{data_screen_name}'"]}},{"selector_css":{"selectors":["div.permalink-tweet-container div.permalink-tweet",0,"p.tweet-text",0],"into":"tweet_contents","error":["CONTENT_MISSING","Missing <div class='tweet-text'> container for tweet"]}},{"whitespace_normalize":{"from":"tweet_contents","into":"tweet_contents_nw"}},{"regex_capture":{"pattern":"^ *(?:@[a-zA-Z0-9_-]+\\s*)* *Verifying myself: I am ([A-Za-z0-9_]+) on Keybase\\.io\\. (\\S+) */.*$","from":"tweet_contents_nw","into":["username_from_tweet_contents","sig_from_tweet_contents"],"error":["DELETED","Could not find 'Verifying myself: I am %{username_keybase} on Keybase.io. %{sig_id_short}'"]}},{"assert_compare":{"cmp":"cicmp","a":"username_from_tweet_contents","b":"username_keybase","error":["BAD_USERNAME","Wrong username in tweet '%{username_from_tweet_contents}' should be '%{username_keybase}'"]}},{"assert_regex_match":{"pattern":"^%{sig_id_short}$","from":"sig_from_tweet_contents","error":["TEXT_NOT_FOUND","Could not find sig '%{sig_from_tweet_contents}' != '%{sig_id_short}'"]}}]],"generic_web_site":[[{"assert_regex_match":{"pattern":"^%{protocol}://%{hostname}/(?:\\.well-known/keybase\\.txt|keybase\\.txt)$","from":"hint_url","error":["BAD_API_URL","Bad hint from server; didn't recognize API url: \"%{hint_url}\""]}},{"fetch":{"kind":"string","from":"hint_url","into":"blob"}},{"assert_find_base64":{"needle":"sig","haystack":"blob","error":["TEXT_NOT_FOUND","signature not found in body"]}}]]}}}}
{"kit_version":1,"ctime":1492631322,"tab":{"1":{"pvl_version":1,"revision":1,"services":{"coinbase":[[{"fill":{"with":"x","into":"tmp1"}},{"assert_regex_match":{"pattern":"^y$","from":"tmp1","error":["SERVICE_DEAD","coinbase proofs are no longer supported"]}}]],"dns":[[{"assert_regex_match":{"pattern":"^keybase-site-verification=%{sig_id_medium}$","from":"txt","error":["NOT_FOUND","matching DNS entry not found"]}}]],"facebook":[[{"assert_regex_match":{"pattern":"^[a-zA-Z0-9\\.]+$","from":"username_service","error":["BAD_USERNAME","Invalid characters in username '%{username_service}'"]}},{"regex_capture":{"pattern":"^https://(m|www)\\.facebook\\.com/([^/]*)/posts/([0-9]+)$","from":"hint_url","into":["unused1","username_from_url","post_id"],"error":["BAD_API_URL","Bad hint from server; URL should start with 'https://m.facebook.com/%{username_service}/posts/', got '%{hint_url}'"]}},{"assert_compare":{"cmp":"stripdots-then-cicmp","a":"username_from_url","b":"username_service","error":["BAD_API_URL","Bad hint from server; username in URL should match '%{username_service}', received '%{username_from_url}'"]}},{"fill":{"with":"https://www.facebook.com/%{username_from_url}/posts/%{post_id}","into":"our_url"}},{"fetch":{"kind":"html","from":"our_url"}},{"selector_css":{"selectors":["code",0,{"contents":true},0],"into":"first_code_comment","data":true,"error":["FAILED_PARSE","Could not find proof markup comment in Facebook's response"]}},{"replace_all":{"old":"-\\-\\","new":"--","from":"first_code_comment","into":"fcc2"}},{"replace_all":{"old":"\\\\","new":"\\","from":"fcc2","into":"fcc3"}},{"parse_html":{"from":"fcc3","error":["FAILED_PARSE","Failed to parse proof markup comment in Facebook post: %{fcc3}"]}},{"selector_css":{"selectors":["div.userContent+div a",1],"into":"link_text","error":["FAILED_PARSE","Could not find link text in Facebook's response"]}},{"whitespace_normalize":{"from":"link_text","into":"link_text_nw"}},{"regex_capture":{"pattern":"^Verifying myself: I am (\\S+) on Keybase.io. (\\S+)$","from":"link_text_nw","into":["username_from_link","sig_from_link"],"error":["TEXT_NOT_FOUND","Could not find Verifying myself: I am %{username_keybase} on Keybase.io. (%{sig_id_medium})"]}},{"assert_compare":{"cmp":"cicmp","a":"username_from_link","b":"username_keybase","error":["BAD_USERNAME","Wrong keybase username in post '%{username_from_link}' should be '%{username_keybase}'"]}},{"assert_compare":{"cmp":"exact","a":"sig_id_medium","b":"sig_from_link","error":["BAD_SIGNATURE","Could not find sig; '%{sig_from_link}' != '%{sig_id_medium}'"]}}]],"github":[[{"regex_capture":{"pattern":"^https://gist\\.github(?:usercontent)?\\.com/([^/]*)/.*$","from":"hint_url","into":["username_from_url"],"error":["BAD_API_URL","Bad hint from server; URL should start with either https://gist.github.com OR https://gist.githubusercontent.com"]}},{"assert_compare":{"cmp":"cicmp","a":"username_from_url","b":"username_service","error":["BAD_API_URL","Bad hint from server; URL should contain username matching %{username_service}; got %{username_from_url}"]}},{"fetch":{"kind":"string","from":"hint_url","into":"haystack"}},{"assert_find_base64":{"needle":"sig","haystack":"haystack"},"error":["TEXT_NOT_FOUND","signature not found in body"]}]],"hackernews":[[{"regex_capture":{"pattern":"^https://hacker-news\\.firebaseio\\.com/v0/user/([^/]+)/about.json$","from":"hint_url","into":["username_from_url"],"error":["BAD_API_URL","Bad hint from server; URL should match https://hacker-news.firebaseio.com/v0/user/%{username_service}/about.json"]}},{"assert_compare":{"cmp":"cicmp","a":"username_from_url","b":"username_service","error":["BAD_API_URL","Bad hint from server; URL should contain username matching %{username_service}; got %{username_from_url}"]}},{"fetch":{"kind":"string","from":"hint_url","into":"profile"}},{"assert_regex_match":{"pattern":"^.*%{sig_id_medium}.*$","from":"profile","error":["TEXT_NOT_FOUND","Posted text does not include signature '%{sig_id_medium}'"]}}]],"reddit":[[{"regex_capture":{"pattern":"^https://www.reddit.com/r/([^/]+)/(.*)$","from":"hint_url","into":["subreddit_from_url","path_remainder"],"error":["BAD_API_URL","URL should start with 'https://www.reddit.com/r/keybaseproofs'"]}},{"assert_regex_match":{"pattern":"^.*reddit.*$","from":"hint_url","error":["BAD_API_URL","URL should contain 'reddit'"]}},{"assert_regex_match":{"pattern":"^keybaseproofs$","case_insensitive":true,"from":"subreddit_from_url","error":["BAD_API_URL","URL contained wrong subreddit '%{subreddit_from_url}' !+ 'keybaseproofs'"]}},{"fetch":{"from":"hint_url","kind":"json"}},{"selector_json":{"selectors":[0,"kind"],"into":"kind","error":["CONTENT_MISSING","Could not find 'kind' in json"]}},{"assert_regex_match":{"pattern":"^Listing$","from":"kind","error":["CONTENT_FAILURE","Wanted a post of type 'Listing', but got '%{kind}'"]}},{"selector_json":{"selectors":[0,"data","children",0,"kind"],"into":"inner_kind","error":["CONTENT_MISSING","Could not find inner 'kind' in json"]}},{"assert_regex_match":{"pattern":"^t3$","from":"inner_kind","error":["CONTENT_FAILURE","Wanted a child of type 't3' but got '%{inner_kind}'"]}},{"selector_json":{"selectors":[0,"data","children",0,"data","subreddit"],"into":"subreddit_from_json","error":["CONTENT_MISSING","Could not find 'subreddit' in json"]}},{"assert_regex_match":{"pattern":"^keybaseproofs$","case_insensitive":true,"from":"subreddit_from_json","error":["CONTENT_FAILURE","Wrong subreddti %{subreddit_from_json}"]}},{"selector_json":{"selectors":[0,"data","children",0,"data","author"],"into":"author","error":["CONTENT_MISSING","Could not find author in json"]}},{"assert_compare":{"cmp":"cicmp","a":"author","b":"username_service","error":["BAD_USERNAME","Bad post author; wanted '%{username_service}' but got '%{author}'"]}},{"selector_json":{"selectors":[0,"data","children",0,"data","title"],"into":"title","error":["CONTENT_MISSING","Could not find title in json"]}},{"assert_regex_match":{"pattern":"^.*%{sig_id_medium}.*$","from":"title","error":["TITLE_NOT_FOUND","Missing signature ID (%{sig_id_medium})) in post title '%{title}'"]}},{"selector_json":{"selectors":[0,"data","children",0,"data","selftext"],"into":"selftext","error":["CONTENT_MISSING","Could not find selftext in json"]}},{"assert_find_base64":{"needle":"sig","haystack":"selftext","error":["TEXT_NOT_FOUND","Signature not found in body"]}}]],"rooter":[[{"assert_regex_match":{"pattern":"^https?://[\\w:_\\-\\.]+/_/api/1\\.0/rooter/%{username_service}/.*$","case_insensitive":true,"from":"hint_url"}},{"fetch":{"from":"hint_url","kind":"json"}},{"selector_json":{"selectors":["status","name"],"into":"name"}},{"assert_regex_match":{"pattern":"^ok$","case_insensitive":true,"from":"name"}},{"selector_json":{"selectors":["toot","post"],"into":"post"}},{"assert_regex_match":{"pattern":"^.*%{sig_id_medium}.*$","from":"post"}}]],"twitter":[[{"regex_capture":{"pattern":"^https://twitter\\.com/([^/]+)/.*$","from":"hint_url","into":["username_from_url"],"error":["BAD_API_URL","Bad hint from server; URL should start with 'https://twitter.com/%{username_service}/'"]}},{"assert_compare":{"cmp":"cicmp","a":"username_from_url","b":"username_service","error":["BAD_API_URL","Bad hint from server; URL should contain username matching %{username_service}; got %{username_from_url}"]}},{"fetch":{"from":"hint_url","kind":"html"}},{"selector_css":{"selectors":["div.permalink-tweet-container div.permalink-tweet",0],"attr":"data-screen-name","into":"data_screen_name","error":["FAILED_PARSE","Couldn't find a div $(div.permalink-tweet-container div.permalink-tweet).eq(0)"]}},{"assert_compare":{"cmp":"cicmp","a":"data_screen_name","b":"username_service","error":["BAD_USERNAME","Bad post authored: wanted '%{username_service}' but got '%{data_screen_name}'"]}},{"selector_css":{"selectors":["div.permalink-tweet-container div.permalink-tweet",0,"p.tweet-text",0],"into":"tweet_contents","error":["CONTENT_MISSING","Missing <div class='tweet-text'> container for tweet"]}},{"whitespace_normalize":{"from":"tweet_contents","into":"tweet_contents_nw"}},{"regex_capture":{"pattern":"^ *(?:@[a-zA-Z0-9_-]+\\s*)* *Verifying myself: I am ([A-Za-z0-9_]+) on Keybase\\.io\\. (\\S+) */.*$","from":"tweet_contents_nw","into":["username_from_tweet_contents","sig_from_tweet_contents"],"error":["DELETED","Could not find 'Verifying myself: I am %{username_keybase} on Keybase.io. %{sig_id_short}'"]}},{"assert_compare":{"cmp":"cicmp","a":"username_from_tweet_contents","b":"username_keybase","error":["BAD_USERNAME","Wrong username in tweet '%{username_from_tweet_contents}' should be '%{username_keybase}'"]}},{"assert_regex_match":{"pattern":"^%{sig_id_short}$","from":"sig_from_tweet_contents","error":["TEXT_NOT_FOUND","Could not find sig '%{sig_from_tweet_contents}' != '%{sig_id_short}'"]}}]],"generic_web_site":[[{"assert_regex_match":{"pattern":"^%{protocol}://%{hostname}/(?:\\.well-known/keybase\\.txt|keybase\\.txt)$","from":"hint_url","error":["BAD_API_URL","Bad hint from server; didn't recognize API url: \"%{hint_url}\""]}},{"fetch":{"kind":"string","from":"hint_url","into":"blob"}},{"assert_find_base64":{"needle":"sig","haystack":"blob","error":["TEXT_NOT_FOUND","Signature not found in body"]}}]]}}}}
9 changes: 7 additions & 2 deletions pvl-tools/tab/1.cson
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,11 @@ services:
, from: "hint_url"
, into: ["subreddit_from_url", "path_remainder"]
, error: ["BAD_API_URL", "URL should start with 'https://www.reddit.com/r/keybaseproofs'"] } },
# this assertion is just here to test the pvl updater
{ assert_regex_match: {
, pattern: "^.*reddit.*$"
, from: "hint_url"
, error: ["BAD_API_URL", "URL should contain 'reddit'"] } },
{ assert_regex_match: {
, pattern: "^keybaseproofs$"
, case_insensitive: true
Expand Down Expand Up @@ -233,7 +238,7 @@ services:
{ assert_find_base64: {
, needle: "sig"
, haystack: "selftext"
, error: ["TEXT_NOT_FOUND", "signature not found in body"] } },
, error: ["TEXT_NOT_FOUND", "Signature not found in body"] } },
]]
rooter: [[
# URL validation.
Expand Down Expand Up @@ -330,5 +335,5 @@ services:
{ assert_find_base64: {
, needle: "sig"
, haystack: "blob"
, error: ["TEXT_NOT_FOUND", "signature not found in body"] } },
, error: ["TEXT_NOT_FOUND", "Signature not found in body"] } },
]]

0 comments on commit b7aec17

Please sign in to comment.