Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Unified Diff: tools/origin_trials/generate_token.py

Issue 2411803002: Support subdomain matching in trial tokens (Closed)
Patch Set: Add fuzzer data for subdomain tokens Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/origin_trials/generate_token.py
diff --git a/tools/origin_trials/generate_token.py b/tools/origin_trials/generate_token.py
index 268f4567d19209af982274cba66edc6a39fdd770..a79f169234b01b78da36485504799b2302ae6c1a 100755
--- a/tools/origin_trials/generate_token.py
+++ b/tools/origin_trials/generate_token.py
@@ -8,6 +8,7 @@
usage: generate_token.py [-h] [--key-file KEY_FILE]
[--expire-days EXPIRE_DAYS |
--expire-timestamp EXPIRE_TIMESTAMP]
+ [--is_subdomain | --no-subdomain]
origin trial_name
Run "generate_token.py -h" for more help on usage.
@@ -85,10 +86,13 @@ def ExpiryFromArgs(args):
return int(args.expire_timestamp)
return (int(time.time()) + (int(args.expire_days) * 86400))
-def GenerateTokenData(origin, api_name, expiry):
- return json.dumps({"origin": origin,
- "feature": api_name,
- "expiry": expiry}).encode('utf-8')
+def GenerateTokenData(origin, is_subdomain, feature_name, expiry):
+ data = {"origin": origin,
+ "feature": feature_name,
+ "expiry": expiry}
+ if is_subdomain is not None:
iclelland 2016/10/13 15:51:23 Could this be just if is_subdomain: ? (Is ther
chasej 2016/10/13 16:05:42 There isn't an obvious need - I debated back and f
iclelland 2016/10/13 16:06:46 sgtm
+ data["isSubdomain"] = is_subdomain
+ return json.dumps(data).encode('utf-8')
def GenerateDataToSign(version, data):
return version + struct.pack(">I",len(data)) + data
@@ -104,11 +108,11 @@ def main():
default_key_file_absolute = os.path.join(script_dir, DEFAULT_KEY_FILE)
parser = argparse.ArgumentParser(
- description="Generate tokens for enabling experimental APIs")
+ description="Generate tokens for enabling experimental features")
parser.add_argument("origin",
- help="Origin for which to enable the API. This can be "
- "either a hostname (default scheme HTTPS, default "
- "port 443) or a URL.",
+ help="Origin for which to enable the feature. This can "
+ "be either a hostname (default scheme HTTPS, "
+ "default port 443) or a URL.",
type=OriginFromArg)
parser.add_argument("trial_name",
help="Feature to enable. The current list of "
@@ -117,14 +121,28 @@ def main():
parser.add_argument("--key-file",
help="Ed25519 private key file to sign the token with",
default=default_key_file_absolute)
+
+ subdomain_group = parser.add_mutually_exclusive_group()
+ subdomain_group.add_argument("--is-subdomain",
+ help="Token will enable the feature for all "
+ "subdomains that match the origin",
+ dest="is_subdomain",
+ action="store_true")
+ subdomain_group.add_argument("--no-subdomain",
+ help="Token will only match the specified "
+ "origin (default behavior)",
+ dest="is_subdomain",
+ action="store_false")
+ parser.set_defaults(is_subdomain=None)
+
expiry_group = parser.add_mutually_exclusive_group()
expiry_group.add_argument("--expire-days",
- help="Days from now when the token should exipire",
+ help="Days from now when the token should expire",
type=int,
default=42)
expiry_group.add_argument("--expire-timestamp",
help="Exact time (seconds since 1970-01-01 "
- "00:00:00 UTC) when the token should exipire",
+ "00:00:00 UTC) when the token should expire",
type=int)
args = parser.parse_args()
@@ -141,7 +159,8 @@ def main():
print("Unable to use the specified private key file.")
sys.exit(1)
- token_data = GenerateTokenData(args.origin, args.trial_name, expiry)
+ token_data = GenerateTokenData(args.origin, args.is_subdomain,
+ args.trial_name, expiry)
data_to_sign = GenerateDataToSign(VERSION, token_data)
signature = Sign(private_key, data_to_sign)
@@ -157,6 +176,7 @@ def main():
# Output the token details
print "Token details:"
print " Origin: %s" % args.origin
+ print " Is Subdomain: %s" % args.is_subdomain
print " Feature: %s" % args.trial_name
print " Expiry: %d (%s UTC)" % (expiry, datetime.utcfromtimestamp(expiry))
print

Powered by Google App Engine
This is Rietveld 408576698