def download(self): """ Download last or all clips from SERVER and updates the local clipboard """ log.info("downloading clips") url = self.SERVER + Config.API_COPY_PASTE try: res = requests.get( url=url, auth=(self.USER, self.HASH_LOGIN), timeout=Config.CONN_TIMEOUT, verify=Config.VERIFY_SSL_CERT, headers=Config.HEADERS, ) except requests.exceptions.RequestException as e: log.exception("Error in download request") raise ApiException(e) else: if res.status_code == 200: clips_decrypted = self.parse_and_decrypt_response(res) log.info(f"Got new clips from SERVER:\n{clips_decrypted}") self.paste(clips_decrypted[-1]) return clips_decrypted else: log.error( f"Cannot download clips: {res.status_code} - {res.text}") raise ApiException(res.text[0:Config.MAX_RESPONSE_LEN])
def upload(self): """ Send the copied text to SERVER """ clip = self.copy() clip_encrypted = self.crypto.encrypt(clip) payload = {"text": clip_encrypted, "device": f"{Config.DEVICE_ID}"} try: res = requests.post( self.SERVER + Config.API_COPY_PASTE, data=payload, auth=(self.USER, self.HASH_LOGIN), timeout=Config.CONN_TIMEOUT, verify=Config.VERIFY_SSL_CERT, headers=Config.HEADERS, ) except requests.exceptions.RequestException as e: log.exception("Error in upload request") raise ApiException(e) else: if res.status_code == 201: log.info("Success! Copied to Cloud-Clipboard.") return clip else: log.error(f"Error cannot upload clip: {res.text}") raise ApiException(res.text[0:Config.MAX_RESPONSE_LEN])
def get_eBay_opener(username=None, password=None, login_url=None, use_which='Chrome', wait=False): if not use_which in ['Chrome', 'Firefox']: raise NotImplementedError('Given browser func not implemented. %r' % use_which) if username == None: username = '******' if password == None: password = '******' if login_url == None: login_url = 'https://signin.ebay.com.hk/ws/eBayISAPI.dll?SignIn' max_try_times = 3 while max_try_times: max_try_times -= 1 try: cookie_jar = get_eBay_cookiejar(username, password, login_url, wait=wait) break except: log.exception('[Login]') opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar)) return opener
def decrypt(self, data): """ Return encrypted text """ data = data.encode() try: clear = self.fernet.decrypt(data) except InvalidToken as e: log.exception(f"ERROR Decrypt: {e}") clear = "Error: Could not decrypt received clip".encode() clear = clear.decode() return clear
def login(server, user, pw): """ authenticate user using hash generated from pw """ crypto = Crypt(user, pw) login_hash = crypto.pw_hash_login try: res = requests.get( server + Config.API_LOGIN, auth=(user, login_hash), timeout=Config.CONN_TIMEOUT, verify=Config.VERIFY_SSL_CERT, headers=Config.HEADERS, ) except requests.exceptions.RequestException as e: log.exception("Error in login request") raise LoginException(e) if res.status_code >= 200 and res.status_code < 400: log.info("Login successful") return True else: log.error(f"Login failed: {res.status_code} - {res.text}") raise LoginException(res.text[0:Config.MAX_RESPONSE_LEN])
def register(server, user, pw): """ register user on server using hash generated from pw """ crypto = Crypt(user, pw) login_hash = crypto.pw_hash_login payload = {"username": user, "password": login_hash} try: res = requests.post( server + Config.API_REGISTER, data=payload, timeout=Config.CONN_TIMEOUT, verify=Config.VERIFY_SSL_CERT, headers=Config.HEADERS, ) except requests.exceptions.RequestException as e: log.exception("Error in register request") raise RegisterException(e) if res.status_code == 201: log.info(f"Hi {user}! You are all set.") return True else: log.error(f"Cannot register user: {res.status_code} - {res.text}") raise RegisterException(res.text[0:Config.MAX_RESPONSE_LEN])