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

Unified Diff: tools/origin_trials/generate_token.py

Issue 2456053004: Validate origins when generating subdomain tokens (Closed)
Patch Set: Fix android_cronet build error Created 4 years 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
« no previous file with comments | « build/config/linux/gconf/BUILD.gn ('k') | tools/origin_trials/validate_subdomain_origin/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/origin_trials/generate_token.py
diff --git a/tools/origin_trials/generate_token.py b/tools/origin_trials/generate_token.py
index a79f169234b01b78da36485504799b2302ae6c1a..76ae3b4f404a2af3c203542bddc8fdfaa39e1e28 100755
--- a/tools/origin_trials/generate_token.py
+++ b/tools/origin_trials/generate_token.py
@@ -20,6 +20,7 @@ import json
import re
import os
import struct
+import subprocess
import sys
import time
import urlparse
@@ -39,6 +40,9 @@ VERSION = "\x02"
# Default key file, relative to script_dir.
DEFAULT_KEY_FILE = 'eftest.key'
+# Default location of validate subdomain utility, relative to script_dir.
+DEFAULT_TARGET_PATH = '../../out/Default/'
+
def HostnameFromArg(arg):
"""Determines whether a string represents a valid hostname.
@@ -86,6 +90,28 @@ def ExpiryFromArgs(args):
return int(args.expire_timestamp)
return (int(time.time()) + (int(args.expire_days) * 86400))
+def ValidateSubdomainTokenOrigin(origin, target_path):
+ """ Calls validate_subdomain_origin utility to check the origin
+
+ If the utility is not found, prints a warning for manual validation, and
+ returns True
+ """
+ utility_path = "%s/validate_subdomain_origin" % target_path
+ if not os.path.exists(utility_path):
+ print "WARNING!"
+ print "Origin not validated for use in subdomain token"
+ print " (missing '%s' utility)" % utility_path
+ print "Must manually check origin against the Public Suffix List"
+ print
+ return True
+
+ rc = subprocess.call([utility_path, "--quiet", origin])
+ if (rc < 0 or rc > 4):
+ print("Unexpected return code from %s: %d" % (utility_path, rc))
+ sys.exit(1)
+
+ return rc == 0
+
def GenerateTokenData(origin, is_subdomain, feature_name, expiry):
data = {"origin": origin,
"feature": feature_name,
@@ -106,6 +132,7 @@ def FormatToken(version, signature, data):
def main():
default_key_file_absolute = os.path.join(script_dir, DEFAULT_KEY_FILE)
+ default_target_path_absolute = os.path.join(script_dir, DEFAULT_TARGET_PATH)
parser = argparse.ArgumentParser(
description="Generate tokens for enabling experimental features")
@@ -145,6 +172,11 @@ def main():
"00:00:00 UTC) when the token should expire",
type=int)
+ parser.add_argument("--target",
+ help="Path to the output directory for compiled "
+ "resources",
+ default=default_target_path_absolute)
+
args = parser.parse_args()
expiry = ExpiryFromArgs(args)
@@ -159,6 +191,13 @@ def main():
print("Unable to use the specified private key file.")
sys.exit(1)
+ # For subdomain tokens, validate that the origin is allowed
+ if args.is_subdomain:
+ target_path = os.path.expanduser(args.target)
+ if not ValidateSubdomainTokenOrigin(args.origin, target_path):
+ print "The specified origin is not valid for use in a subdomain token."
+ sys.exit(1)
+
token_data = GenerateTokenData(args.origin, args.is_subdomain,
args.trial_name, expiry)
data_to_sign = GenerateDataToSign(VERSION, token_data)
« no previous file with comments | « build/config/linux/gconf/BUILD.gn ('k') | tools/origin_trials/validate_subdomain_origin/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698