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

Unified Diff: components/cloud_devices/tools/prototype/prototype.py

Issue 294793002: Update GCD prototype (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/cloud_devices/tools/prototype/prototype.py
diff --git a/components/cloud_devices/tools/prototype/prototype.py b/components/cloud_devices/tools/prototype/prototype.py
index c6781727490fca260541a64e64f8f4d600e17015..851b54d482c4585d9bc71a36cdada8be63f01c16 100755
--- a/components/cloud_devices/tools/prototype/prototype.py
+++ b/components/cloud_devices/tools/prototype/prototype.py
@@ -25,12 +25,7 @@ import traceback
import urlparse
import base64
-# API Client ID and Secret for Device manufacturers.
-_OAUTH_CLIENT_ID = ''
-_OAUTH_SECRET = ''
-
_OAUTH_SCOPE = 'https://www.googleapis.com/auth/clouddevices'
-_API_KEY = ''
DEVICE_DRAFT = {
"systemName": "LEDFlasher",
@@ -50,7 +45,7 @@ DEVICE_DRAFT = {
"name": "flashLED",
"parameter" : [{
"name": "times",
- "type": "int"
+ "type": "string"
}]
}
]
@@ -78,7 +73,6 @@ wpa_supplicant_template = """network={
psk="%s"
}"""
-
led_path = "/sys/class/leds/ath9k_htc-phy0/"
class DeviceUnregisteredError(Exception):
@@ -126,7 +120,7 @@ class CloudCommandHandlerFake(object):
if command_name == "flashLED":
times = 1
if "times" in args:
- times = args["times"]
+ times = int(args["times"])
print "Flashing LED %d times" % times
class CloudCommandHandlerReal(object):
@@ -136,7 +130,7 @@ class CloudCommandHandlerReal(object):
if command_name == "flashLED":
times = 1
if "times" in args:
- times = args["times"]
+ times = int(args["times"])
print "Really flashing LED %d times" % times
self.flash_led(times)
@ignore_errors
@@ -361,11 +355,20 @@ class CloudDevice:
def __init__(self, ioloop, state, delegate):
self.state = state
self.http = httplib2.Http()
+
+ credentials_f = open("api_client.json")
+ credentials = json.load(credentials_f)
+ credentials_f.close()
+
+ self.oauth_client_id = credentials["oauth_client_id"]
+ self.oauth_secret = credentials["oauth_secret"]
+ self.api_key = credentials["api_key"]
+
f = open("clouddevices.json")
discovery = f.read()
f.close()
self.gcd = build_from_document(
- discovery, developerKey=_API_KEY, http=self.http)
+ discovery, developerKey=self.api_key, http=self.http)
self.ioloop = ioloop
self.active = True
@@ -381,11 +384,12 @@ class CloudDevice:
elif token:
self.register(token)
else:
- print "Device not registered and has no credentials. Shutting down."
+ print "Device not registered and has no credentials."
+ print "Waiting for registration."
def register(self, token):
resource = {
'deviceDraft': DEVICE_DRAFT,
- 'oauthClientId': _OAUTH_CLIENT_ID
+ 'oauthClientId': self.oauth_client_id
}
self.gcd.registrationTickets().patch(registrationTicketId=token,
@@ -396,7 +400,8 @@ class CloudDevice:
authorization_code = finalTicket['robotAccountAuthorizationCode']
flow = OAuth2WebServerFlow(
- _OAUTH_CLIENT_ID, _OAUTH_SECRET, _OAUTH_SCOPE, redirect_uri='oob')
+ self.oauth_client_id, self.oauth_secret, _OAUTH_SCOPE,
+ redirect_uri='oob')
self.credentials = flow.step2_exchange(authorization_code)
self.device_id = finalTicket['deviceDraft']['id']
self.state.set_credentials(self.credentials, self.device_id)
@@ -433,27 +438,24 @@ class CloudDevice:
for command in commands["commands"]:
try:
- vendorCommand = command["base"]["vendorCommand"]
- vendorCommandName = vendorCommand["name"]
-
- if "parameters" in vendorCommand:
- for parameter in vendorCommand["parameters"]:
- value = None
- if "intValue" in parameter:
- value = int(parameter["intValue"])
- elif "stringValue" in parameter:
- value = parameter["stringValue"]
- else:
- pass
-
- args[parameter["name"]] = value
+ if command["name"].startswith("base._"):
+ vendorCommandName = command["name"][
+ len("base._"):]
+ if "parameters" in command:
+ parameters = command["parameters"]
+ else:
+ parameters = {}
+ else:
+ vendorCommandName = None
except KeyError:
print "Could not parse vendor command ",
print repr(command)
vendorCommandName = None
if vendorCommandName:
- self.command_handler.handle_command(vendorCommandName, args)
+ self.command_handler.handle_command(
+ vendorCommandName,
+ parameters)
self.gcd.commands().patch(commandId = command["id"],
body={"state": "done"}).execute()
@@ -570,14 +572,17 @@ class WebRequestHandler(WifiHandler.Delegate, CloudDevice.Delegate):
self.in_session = False
self.ioloop = ioloop
self.handlers = {
- "/privet/ping": self.do_ping,
+ "/internal/ping": self.do_ping,
"/privet/info": self.do_info,
- "/privet/wifi/switch": self.do_wifi_switch,
- "/privet/session/handshake": self.do_session_handshake,
- "/privet/session/cancel": self.do_session_cancel,
- "/privet/session/api": self.do_session_api,
- "/privet/v2/setup": self.get_insecure_api_handler(
- self.do_secure_setup)
+ "/deprecated/wifi/switch": self.do_wifi_switch,
+ "/privet/v2/session/handshake": self.do_session_handshake,
+ "/privet/v2/session/cancel": self.do_session_cancel,
+ "/privet/v2/session/api": self.do_session_api,
+ "/privet/v2/setup/start": self.get_insecure_api_handler(
+ self.do_secure_setup),
+ "/privet/v2/setup/status": self.get_insecure_api_handler(
+ self.do_secure_status),
+
}
self.current_session = None
@@ -587,7 +592,8 @@ class WebRequestHandler(WifiHandler.Delegate, CloudDevice.Delegate):
}
self.secure_handlers = {
- "/privet/v2/setup" : self.do_secure_setup
+ "/privet/v2/setup/start" : self.do_secure_setup,
+ "/privet/v2/setup/status" : self.do_secure_status
}
def start(self):
self.wifi_handler.start()
@@ -612,20 +618,8 @@ class WebRequestHandler(WifiHandler.Delegate, CloudDevice.Delegate):
def do_info(self, request, response_func):
specific_info = {
"x-privet-token": "sample",
- "setup" : {
- }
}
- if self.on_wifi:
- specific_info["setup"]["wifi"] = "complete";
- else:
- specific_info["setup"]["wifi"] = "available";
-
- if self.cloud_device.get_device_id():
- specific_info["setup"]["registration"] = "complete"
- else:
- specific_info["setup"]["registration"] = "available"
-
info = merge_dictionary(
self.get_common_info(),
specific_info
@@ -783,6 +777,27 @@ class WebRequestHandler(WifiHandler.Delegate, CloudDevice.Delegate):
return
setup[params["action"]](request, response_func, params)
+ def do_secure_status(self, request, response_func, params):
+ setup = {
+ "registration" : {
+ "required" : True
+ },
+ "wifi" : {
+ "required" : True
+ }
+ }
+ if self.on_wifi:
+ setup["wifi"]["status"] = "complete"
+ setup["wifi"]["ssid"] = "" # TODO(noamsml): Add SSID to status
+ else:
+ setup["wifi"]["status"] = "available"
+
+ if self.cloud_device.get_device_id():
+ setup["registration"]["status"] = "complete"
+ setup["registration"]["id"] = self.cloud_device.get_device_id()
+ else:
+ specific_info["setup"]["registration"] = "available"
Vitaly Buka (NO REVIEWS) 2014/05/20 00:27:30 not implemented?
Noam Samuel 2014/05/20 18:12:50 Oh whoops. I'll correct that in a followup.
+
def do_setup_start(self, request, response_func, params):
has_wifi = False
token = None
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698