| 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..c8b548937d08c2fe3a0307572e02a8e291d76ff4 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 > 3):
|
| + 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)
|
|
|