|
|
576ff65 |
Login fixes. Includes commits 10dcea10, dc2b37f7, aff7ea13, 47a612de.
|
|
|
576ff65 |
|
|
|
576ff65 |
diff --git a/mhgui b/mhgui
|
|
|
576ff65 |
index f95bee5..1c8746d 100755
|
|
|
576ff65 |
--- a/mhgui
|
|
|
576ff65 |
+++ b/mhgui
|
|
|
576ff65 |
@@ -248,8 +248,13 @@ class WelcomePanel(WizardPanelBase):
|
|
|
576ff65 |
if loginResult is True:
|
|
|
576ff65 |
self.parent._SetPage(self.next, True, True)
|
|
|
576ff65 |
else:
|
|
|
576ff65 |
- wx.MessageBox('Login failed.', 'Login failed.', wx.OK |
|
|
|
576ff65 |
- wx.ICON_WARNING)
|
|
|
576ff65 |
+ if loginResult is None:
|
|
|
576ff65 |
+ msg = 'You appear to have used a members.harmonyremote.com ' \
|
|
|
576ff65 |
+ 'account. Please create a myharmony.com account or ' \
|
|
|
576ff65 |
+ 'login with an existing one.'
|
|
|
576ff65 |
+ else:
|
|
|
576ff65 |
+ msg = 'Login failed. Username or password incorrect.'
|
|
|
576ff65 |
+ wx.MessageBox(msg, 'Login Failed', wx.OK | wx.ICON_WARNING)
|
|
|
576ff65 |
self.usernameCtrl.Clear()
|
|
|
576ff65 |
self.passwordCtrl.Clear()
|
|
|
576ff65 |
|
|
|
576ff65 |
diff --git a/mhmanager.py b/mhmanager.py
|
|
|
576ff65 |
index e65a098..904085c 100644
|
|
|
576ff65 |
--- a/mhmanager.py
|
|
|
576ff65 |
+++ b/mhmanager.py
|
|
|
576ff65 |
@@ -30,6 +30,7 @@ import os
|
|
|
576ff65 |
import sys
|
|
|
576ff65 |
import random
|
|
|
576ff65 |
import datetime
|
|
|
576ff65 |
+import json
|
|
|
576ff65 |
from HTMLParser import HTMLParser
|
|
|
576ff65 |
from suds.cache import ObjectCache
|
|
|
576ff65 |
from suds.client import Client
|
|
|
576ff65 |
@@ -153,16 +154,35 @@ class MHManager():
|
|
|
576ff65 |
logging.basicConfig(level=logging.INFO)
|
|
|
576ff65 |
logging.getLogger('suds.transport').setLevel(logging.DEBUG)
|
|
|
576ff65 |
self.client = Client(url, cache=cache, plugins=[MHPlugin()])
|
|
|
576ff65 |
- self.logged_in = False
|
|
|
576ff65 |
|
|
|
576ff65 |
- # Log in to web service - Returns True if login succeeded, False otherwise.
|
|
|
576ff65 |
+ # Log in to web service - returns True if login succeeded, False if login
|
|
|
576ff65 |
+ # failed, and None if the account appears to be a members.harmonyremote.com
|
|
|
576ff65 |
+ # account.
|
|
|
576ff65 |
def Login(self, email, password):
|
|
|
576ff65 |
- self.logged_in = self.client.service['Security'].LoginUser(
|
|
|
576ff65 |
- email=email, password=password, customCredential='',
|
|
|
576ff65 |
- isPresistent=False)
|
|
|
576ff65 |
+ baseUrl = "https://setup.myharmony.com"
|
|
|
576ff65 |
+ url = baseUrl + "/Home/TestLogin"
|
|
|
576ff65 |
+ params = urllib.urlencode({'username': email, 'password': password})
|
|
|
576ff65 |
+ request = urllib2.Request(url, params)
|
|
|
576ff65 |
+ response = urllib2.urlopen(request)
|
|
|
576ff65 |
+ jsonResponse = json.loads(response.read())
|
|
|
576ff65 |
+ if jsonResponse["Result"] == False:
|
|
|
576ff65 |
+ return False
|
|
|
576ff65 |
+ elif jsonResponse["Token"] is None: # members.harmonyremote.com acct
|
|
|
576ff65 |
+ return None
|
|
|
576ff65 |
+ self.client.options.transport.cookiejar.extract_cookies(response,
|
|
|
576ff65 |
+ request)
|
|
|
576ff65 |
+
|
|
|
576ff65 |
+ url = baseUrl + "/Home/Login?usr=" + jsonResponse["Token"]
|
|
|
576ff65 |
+ request = urllib2.Request(url)
|
|
|
576ff65 |
+ response = urllib2.urlopen(request)
|
|
|
576ff65 |
+ parser = LoginResponseHTMLParser()
|
|
|
576ff65 |
+ parser.feed(response.read())
|
|
|
576ff65 |
+ initparams = dict(u.split("=", 1) for u in parser.initparams.split(","))
|
|
|
576ff65 |
+ self.contentServiceAuthKey = initparams['ContentServiceAuthKey']
|
|
|
576ff65 |
+
|
|
|
576ff65 |
self.email = email
|
|
|
576ff65 |
self.password = password
|
|
|
576ff65 |
- return self.logged_in is not None
|
|
|
576ff65 |
+ return True
|
|
|
576ff65 |
|
|
|
576ff65 |
# Gets the household info.
|
|
|
576ff65 |
def GetHousehold(self):
|
|
|
576ff65 |
@@ -910,6 +930,13 @@ class MHAccountDetails:
|
|
|
576ff65 |
securityAnswer = ""
|
|
|
576ff65 |
keepMeInformed = ""
|
|
|
576ff65 |
|
|
|
576ff65 |
+class LoginResponseHTMLParser(HTMLParser):
|
|
|
576ff65 |
+ def handle_starttag(self, tag, attrs):
|
|
|
576ff65 |
+ if tag == 'param' and ('name', 'initparams') in attrs:
|
|
|
576ff65 |
+ for key, value in attrs:
|
|
|
576ff65 |
+ if key == 'value':
|
|
|
576ff65 |
+ self.initparams = value
|
|
|
576ff65 |
+
|
|
|
576ff65 |
class CreateAccountResponseHTMLParser(HTMLParser):
|
|
|
576ff65 |
def __init__(self):
|
|
|
576ff65 |
HTMLParser.__init__(self)
|