| #!/usr/bin/env python |
| # |
| # Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # |
| # register_host.py registers new hosts in chromoting directory. It |
| # asks for username/password and then writes these settings to config file. |
| |
| import getpass |
| import os |
| import urllib |
| import urllib2 |
| import random |
| import socket |
| import sys |
| |
| import gaia_auth |
| import keygen |
| |
| def random_uuid(): |
| return ("%04x%04x-%04x-%04x-%04x-%04x%04x%04x" % |
| tuple(map(lambda x: random.randrange(0,65536), range(8)))) |
| |
| server = 'www.googleapis.com' |
| url = 'https://' + server + '/chromoting/v1/@me/hosts' |
| |
| settings_filepath = os.path.join(os.path.expanduser('~'), |
| '.ChromotingConfig.json') |
| |
| print "Email:", |
| email = raw_input() |
| password = getpass.getpass("Password: ") |
| |
| chromoting_auth = gaia_auth.GaiaAuthenticator('chromoting') |
| auth_token = chromoting_auth.authenticate(email, password) |
| |
| host_id = random_uuid() |
| print "HostId:", host_id |
| host_name = socket.gethostname() |
| print "HostName:", host_name |
| |
| print "Generating RSA key pair...", |
| (private_key, public_key) = keygen.generateRSAKeyPair() |
| print "Done" |
| |
| params = ('{"data":{' + \ |
| '"hostId": "%(hostId)s",' + \ |
| '"hostName": "%(hostName)s",' + \ |
| '"publicKey": "%(publicKey)s"}}') % \ |
| {'hostId': host_id, 'hostName': host_name, |
| 'publicKey': public_key} |
| headers = {"Authorization": "GoogleLogin auth=" + auth_token, |
| "Content-Type": "application/json" } |
| request = urllib2.Request(url, params, headers) |
| |
| opener = urllib2.OpenerDirector() |
| opener.add_handler(urllib2.HTTPDefaultErrorHandler()) |
| |
| print |
| print "Registering host with directory service..." |
| try: |
| res = urllib2.urlopen(request) |
| data = res.read() |
| except urllib2.HTTPError, err: |
| print >> sys.stderr, "Directory returned error:", err |
| print >> sys.stderr, err.fp.read() |
| sys.exit(1) |
| |
| print "Done" |
| |
| # Get token that the host will use to athenticate in talk network. |
| authenticator = gaia_auth.GaiaAuthenticator('chromiumsync'); |
| auth_token = authenticator.authenticate(email, password) |
| |
| # Write settings file. |
| os.umask(0066) # Set permission mask for created file. |
| settings_file = open(settings_filepath, 'w') |
| settings_file.write('{\n'); |
| settings_file.write(' "xmpp_login" : "' + email + '",\n') |
| settings_file.write(' "xmpp_auth_token" : "' + auth_token + '",\n') |
| settings_file.write(' "host_id" : "' + host_id + '",\n') |
| settings_file.write(' "host_name" : "' + host_name + '",\n') |
| settings_file.write(' "private_key" : "' + private_key + '",\n') |
| settings_file.write('}\n') |
| settings_file.close() |
| |
| print 'Configuration saved in', settings_filepath |