def _get_cu_and_fu_status(self): """Submit POST request to update information.""" # adjust headers headers = HEADERS.copy() headers['Accept'] = '*/*' headers['X-Requested-With'] = 'XMLHttpRequest' headers['X-CSRFToken'] = self._parent.csrftoken # example {"controller_serial":"12345","faucet_serial":"abcd"} argv = '{"controller_serial":"' + self.serial + \ '","faucet_serial":"' + self.faucet.serial + '"}' post_data = {'argv': argv} req = self._parent.client.post(DAJAXICE_ENDPOINT, data=post_data, headers=headers) # token probably expired, then try again if req.status_code == 403: self._parent.login() self.update() elif req.status_code == 200: self.attributes = req.json() else: req.raise_for_status()
def _authenticate(self): """Authenticate.""" # to obtain csrftoken, remove Referer from headers headers = HEADERS.copy() headers.pop('Referer') # initial GET request self.client = requests.Session() self.client.proxies = self._proxies self.client.verify = self._ssl_verify self.client.stream = True self.client.get(LOGIN_ENDPOINT, headers=headers) # set headers to submit POST request token = INITIAL_DATA.copy() token['csrfmiddlewaretoken'] = self.csrftoken token['email'] = self._username token['password'] = self._password req = self.client.post(LOGIN_ENDPOINT, data=token, headers=HEADERS) if req.status_code != 302: req.raise_for_status() # populate device list self.html['home'] = generate_soup_html(req.text) # currently only one faucet is supported on the code # we have future plans to support it parsed_controller = serial_finder(self.html['home']) self.controllers.append( RainCloudyController(self, parsed_controller['controller_serial'], parsed_controller['faucet_serial'])) self.is_connected = True return True
def post(self, ddata, url=SETUP_ENDPOINT, referer=SETUP_ENDPOINT): """Method to update some attributes on namespace.""" headers = HEADERS.copy() if referer is None: headers.pop('Referer') else: headers['Referer'] = referer # append csrftoken if 'csrfmiddlewaretoken' not in ddata.keys(): ddata['csrfmiddlewaretoken'] = self._parent.csrftoken req = self._parent.client.post(url, headers=headers, data=ddata) if req.status_code == 200: self.update()
def _get_cu_and_fu_status(self): """Submit GET request to update information.""" # adjust headers headers = HEADERS.copy() headers['Accept'] = '*/*' headers['X-Requested-With'] = 'XMLHttpRequest' headers['X-CSRFToken'] = self._parent.csrftoken args = '?controller_serial=' + self.serial \ + '&faucet_serial=' + self.faucet.serial req = self._parent.client.get(STATUS_ENDPOINT + args, headers=headers) # token probably expired, then try again if req.status_code == 403: self._parent.login() self.update() elif req.status_code == 200: self.attributes = req.json() else: req.raise_for_status()
def _authenticate(self): """Authenticate.""" __location__ = os.path.realpath( os.path.join(os.getcwd(), os.path.dirname(__file__))) cert_file = Path(__location__ + "/wifiaquatimer_com_chain.cer") # to obtain csrftoken, remove Referer from headers headers = HEADERS.copy() headers.pop('Referer') # initial GET request self.client = requests.Session() self.client.proxies = self._proxies self.client.verify = cert_file.resolve() self.client.stream = True self.client.get(LOGIN_ENDPOINT, headers=headers) # set headers to submit POST request token = INITIAL_DATA.copy() token['csrfmiddlewaretoken'] = self.csrftoken token['email'] = self._username token['password'] = self._password req = self.client.post(LOGIN_ENDPOINT, data=token, headers=HEADERS) if req.status_code != 302: req.raise_for_status() home = self.client.get(url=HOME_ENDPOINT) self.html['home'] = generate_soup_html(home.text) setup = self.client.get(SETUP_ENDPOINT, headers=HEADERS) # populate device list self.html['setup'] = generate_soup_html(setup.text) controller_serials = controller_serial_finder(self.html['setup']) for index, controller_serial in enumerate(controller_serials): # We need to do a form submit for other controllers to get # faucet serials if index > 0: data = {'select_controller': index} self.html['setup'] = \ generate_soup_html( self.post( data, url=SETUP_ENDPOINT, referer=SETUP_ENDPOINT ).text) faucet_serials = faucet_serial_finder(self.html['setup']) faucets = [] for faucet_index, faucet_serial in enumerate(faucet_serials): # We need to do a form submit for other faucets to get # zone names if faucet_index > 0: data = {'select_faucet': faucet_index} self.html['setup'] = \ generate_soup_html( self.post( data, url=SETUP_ENDPOINT, referer=SETUP_ENDPOINT ).text) zone_names = find_zone_names(self.html['setup']) faucets.append({'serial': faucet_serial, 'zones': zone_names}) self._controllers.append( RainCloudyController(self, controller_serial, index, faucets)) self.is_connected = True return True