Esempio n. 1
0
def login(ask=1, **kwargs):
    ask = int(ask)

    profile_settings = load_profile(profile_id=1)

    if len(profile_settings['devicekey']) == 0:
        _devicekey = 'w{uuid}'.format(uuid=uuid.uuid4())
        query = "UPDATE `vars` SET `devicekey`='{devicekey}' WHERE profile_id={profile_id}".format(
            devicekey=_devicekey, profile_id=1)
        query_settings(query=query,
                       return_result=False,
                       return_insert=False,
                       commit=True)

    creds = get_credentials()

    if len(creds['username']) < 1 or len(creds['password']) < 1 or ask == 1:
        username = gui.input(message=_.ASK_USERNAME,
                             default=creds['username']).strip()

        if not len(username) > 0:
            gui.ok(message=_.EMPTY_USER, heading=_.LOGIN_ERROR_TITLE)
            return

        password = gui.input(message=_.ASK_PASSWORD, hide_input=True).strip()

        if not len(password) > 0:
            gui.ok(message=_.EMPTY_PASS, heading=_.LOGIN_ERROR_TITLE)
            return

        set_credentials(username=username, password=password)

    login_result = api.login()

    if login_result['result'] == False:
        query = "UPDATE `vars` SET `pswd`='', `last_login_success`='{last_login_success}' WHERE profile_id={profile_id}".format(
            last_login_success=0, profile_id=1)
        query_settings(query=query,
                       return_result=False,
                       return_insert=False,
                       commit=True)

        if check_key(login_result['data'],
                     'error') and login_result['data']['error'] == 'toomany':
            gui.ok(message=_.TOO_MANY_DEVICES, heading=_.LOGIN_ERROR_TITLE)
        else:
            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
    else:
        gui.ok(message=_.LOGIN_SUCCESS)

        query = "UPDATE `vars` SET `last_login_success`='{last_login_success}' WHERE profile_id={profile_id}".format(
            last_login_success=1, profile_id=1)
        query_settings(query=query,
                       return_result=False,
                       return_insert=False,
                       commit=True)

    gui.refresh()
Esempio n. 2
0
    def login(self, username, password, channels=False):
        settings.remove(key='_cookies')
        self._session = Session(cookies_key='_cookies')

        session_url = '{api_url}/USER/SESSIONS/'.format(api_url=settings.get(key='_api_url'))

        session_post_data = {
            "credentialsStdAuth": {
                'username': username,
                'password': password,
                'remember': 'Y',
                'deviceRegistrationData': {
                    'deviceId': settings.get(key='_devicekey'),
                    'accountDeviceIdType': 'DEVICEID',
                    'deviceType' : 'PCTV',
                    'vendor' : settings.get(key='_browser_name'),
                    'model' : settings.get(key='_browser_version'),
                    'deviceFirmVersion' : settings.get(key='_os_name'),
                    'appVersion' : settings.get(key='_os_version')
                }
            },
        }

        resp = self._session.post(session_url, json=session_post_data)

        if resp.status_code != 200:
            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
            self.clear_session()
            return

        try:
            data = resp.json()
        except:
            return

        if not data or not check_key(data, 'resultCode') or data['resultCode'] == 'KO':
            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
            self.clear_session()
            return

        if channels == True or settings.getInt(key='_channels_age') < int(time.time() - 86400):
            self.get_channels_for_user()
            self.vod_subscription()

        if settings.getBool(key='save_password', default=False):
            set_credentials(username=username, password=password)
        else:
            set_credentials(username=username, password='')

        self.logged_in = True
Esempio n. 3
0
def login(ask=1, **kwargs):
    ask = int(ask)
    
    profile_settings = load_profile(profile_id=1)

    if len(profile_settings['devicekey']) == 0:
        devicekey = ''.join(random.choice(string.digits) for _ in range(10))
        query = "UPDATE `vars` SET `devicekey`='{devicekey}' WHERE profile_id={profile_id}".format(devicekey=devicekey, profile_id=1)
        query_settings(query=query, return_result=False, return_insert=False, commit=True)

    creds = get_credentials()

    if len(creds['username']) < 1 or len(creds['password']) < 1 or ask == 1:
        username = gui.numeric(message=_.ASK_USERNAME, default=creds['username']).strip()

        if not len(username) > 0:
            gui.ok(message=_.EMPTY_USER, heading=_.LOGIN_ERROR_TITLE)
            return

        password = gui.numeric(message=_.ASK_PASSWORD).strip()

        if not len(password) > 0:
            gui.ok(message=_.EMPTY_PASS, heading=_.LOGIN_ERROR_TITLE)
            return

        set_credentials(username=username, password=password)

    login_result = api.login()

    if login_result['result'] == False:
        query = "UPDATE `vars` SET `pswd`='', `last_login_success`='{last_login_success}' WHERE profile_id={profile_id}".format(last_login_success=0, profile_id=1)
        query_settings(query=query, return_result=False, return_insert=False, commit=True)

        if check_key(login_result['data'], 'result') and check_key(login_result['data']['result'], 'retCode') and login_result['data']['result']['retCode'] == "157022007":
            gui.ok(message=_.TOO_MANY_DEVICES, heading=_.LOGIN_ERROR_TITLE)
        else:
            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
    else:
        query = "UPDATE `vars` SET `last_login_success`='{last_login_success}' WHERE profile_id={profile_id}".format(last_login_success=1, profile_id=1)
        query_settings(query=query, return_result=False, return_insert=False, commit=True)

        gui.ok(message=_.LOGIN_SUCCESS)

    gui.refresh()
Esempio n. 4
0
    def login(self, username, password, channels=False):
        settings.remove(key='_access_token')
        user_agent = settings.get(key='_user_agent')

        HEADERS = {
            'User-Agent': user_agent,
            'X-Client-Id': settings.get(key='_client_id') + "||" + user_agent,
            'X-OESP-Token': '',
            'X-OESP-Username': username,
        }

        self._session = Session(headers=HEADERS)
        data = self.download(url=settings.get(key='_session_url'),
                             type="post",
                             code=[200],
                             data={
                                 "username": username,
                                 "password": password
                             },
                             json_data=True,
                             data_return=True,
                             return_json=True,
                             retry=True,
                             check_data=False)

        if not data or not check_key(data, 'oespToken'):
            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
            return

        settings.set(key='_access_token', value=data['oespToken'])
        self._session.headers.update({'X-OESP-Token': data['oespToken']})

        if channels == True or settings.getInt(
                key='_channels_age') < int(time.time() - 86400):
            self.get_channels_for_user(location=data['locationId'])

        if settings.getBool(key='save_password', default=False):
            set_credentials(username=username, password=password)
        else:
            set_credentials(username=username, password='')

        self.logged_in = True
Esempio n. 5
0
    def login(self, username, password, channels=False, retry=True):
        if self._debug_mode:
            log.debug('Executing: api.login')
            log.debug(
                'Vars: username={username}, password={password}, channels={channels}, retry={retry}'
                .format(username=username,
                        password=password,
                        channels=channels,
                        retry=retry))

        settings.remove(key='_cookies')
        self._cookies = ''
        self._session = Session(cookies_key='_cookies')
        session_url = '{api_url}/USER/SESSIONS/'.format(api_url=self._api_url)

        if self._debug_mode:
            log.debug('Clear Setting _cookies')
            log.debug('Creating new Requests Session')
            log.debug('Request Session Headers')
            log.debug(self._session.headers)

        email_or_pin = settings.getBool(key='email_instead_of_customer')

        if email_or_pin:
            session_post_data = {
                "credentialsExtAuth": {
                    'credentials': {
                        'loginType': 'UsernamePassword',
                        'username': username,
                        'password': password,
                        'appId': 'KPN',
                    },
                    'remember': 'Y',
                    'deviceInfo': {
                        'deviceId': self._devicekey,
                        'deviceIdType': 'DEVICEID',
                        'deviceType': 'PCTV',
                        'deviceVendor': settings.get(key='_browser_name'),
                        'deviceModel': settings.get(key='_browser_version'),
                        'deviceFirmVersion': settings.get(key='_os_name'),
                        'appVersion': settings.get(key='_os_version')
                    }
                },
            }
        else:
            session_post_data = {
                "credentialsStdAuth": {
                    'username': username,
                    'password': password,
                    'remember': 'Y',
                    'deviceRegistrationData': {
                        'deviceId': settings.get(key='_devicekey'),
                        'accountDeviceIdType': 'DEVICEID',
                        'deviceType': 'PCTV',
                        'vendor': settings.get(key='_browser_name'),
                        'model': settings.get(key='_browser_version'),
                        'deviceFirmVersion': settings.get(key='_os_name'),
                        'appVersion': settings.get(key='_os_version')
                    }
                },
            }

        data = self.download(url=session_url,
                             type='post',
                             code=[200],
                             data=session_post_data,
                             json_data=True,
                             data_return=True,
                             return_json=True,
                             retry=retry,
                             check_data=False)

        if not data or not check_key(
                data, 'resultCode') or data['resultCode'] == 'KO':
            if self._debug_mode:
                log.debug('Failure to retrieve expected data')
                log.debug('Execution Done: api.login')

            if email_or_pin:
                gui.ok(message=_.LOGIN_ERROR2, heading=_.LOGIN_ERROR_TITLE)
            else:
                gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)

            self.clear_session()
            return False

        self._session_age = time.time()
        settings.setInt(key='_session_age', value=self._session_age)

        if self._debug_mode:
            log.debug('Settings _channels_age: {channels_age}'.format(
                channels_age=self._channels_age))
            log.debug('Time - 86400 seconds: {time}'.format(
                time=int(time.time() - 86400)))

        if channels or self._channels_age < int(time.time() - 86400):
            self.get_channels_for_user()
            self.vod_subscription()

        self._username = username
        self._password = password

        if settings.getBool(key='save_password', default=False):
            set_credentials(username=username, password=password)
        else:
            set_credentials(username=username, password='')

        self.logged_in = True

        if self._debug_mode:
            log.debug('Execution Done: api.login')

        return True
Esempio n. 6
0
    def login(self, username, password, channels=False):
        settings.remove(key='_cookies')
        self._session = Session(cookies_key='_cookies')

        login_url = '{base_url}/inloggen'.format(base_url=CONST_BASE_URL)

        resp = self.download(url=login_url,
                             type="get",
                             code=None,
                             data=None,
                             json_data=False,
                             data_return=True,
                             return_json=False,
                             retry=False,
                             check_data=False)

        if resp.status_code != 200 and resp.status_code != 302:
            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
            self.clear_session()
            return

        if self.check_data(resp=resp) == False:
            resp.encoding = 'utf-8'
            frmtoken = re.findall(
                r'name=\"form\[_token\]\"\s+value=\"([\S]*)\"', resp.text)

            session_post_data = {
                "form[password]": password,
                "form[email]": username,
                "form[login]": '',
                'form[_token]': frmtoken[0],
            }

            resp = self.download(url=login_url,
                                 type="post",
                                 code=None,
                                 data=session_post_data,
                                 json_data=False,
                                 data_return=True,
                                 return_json=False,
                                 retry=False,
                                 check_data=False)

            if (resp.status_code != 200
                    and resp.status_code != 302) or self.check_data(
                        resp=resp) == False:
                gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
                self.clear_session()
                return

        data = self.download(
            url='{base_url}/api/info'.format(base_url=CONST_BASE_URL),
            type="get",
            code=[200],
            data=None,
            json_data=False,
            data_return=True,
            return_json=True,
            retry=False,
            check_data=True)

        if not data or not check_key(data, 'sessionToken') or not check_key(
                data, 'emp'):
            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
            self.clear_session()
            return

        settings.set(key='_session_token', value=data['sessionToken'])
        settings.set(key='_emp_url', value=data['emp']['url'])
        settings.set(key='_emp_customer', value=data['emp']['customer'])
        settings.set(key='_emp_businessunit',
                     value=data['emp']['businessunit'])

        if channels == True or settings.getInt(
                key='_channels_age') < int(time.time() - 86400):
            self.get_channels_for_user(channels=data['channels'])

        if settings.getBool(key='save_password', default=False):
            set_credentials(username=username, password=password)
        else:
            set_credentials(username=username, password='')

        self.logged_in = True
Esempio n. 7
0
    def login(self, username, password, channels=False, retry=True):
        if self._debug_mode:
            log.debug('Executing: api.login')
            log.debug('Vars: username={username}, password={password}, channels={channels}, retry={retry}'.format(username=username, password=password, channels=channels, retry=retry))

        oauth = ''

        settings.remove(key='_cookies')
        self._cookies = ''
        settings.remove(key='_session_token')
        self._session_token = ''
        self._session = Session(cookies_key='_cookies')
        self._session.headers = CONST_BASE_HEADERS
        auth_url = '{login_url}/authenticate?redirect_uri=https%3A%2F%2Flivetv.canaldigitaal.nl%2Fauth.aspx&state={state}&response_type=code&scope=TVE&client_id=StreamGroup'.format(login_url=CONST_LOGIN_URL, state=int(time.time()))

        if self._debug_mode:
            log.debug('Clear Setting _cookies')
            log.debug('Creating new Requests Session')
            log.debug('Request Session Headers')
            log.debug(self._session.headers)

        data = self.download(url=auth_url, type="get", code=[200], data=None, json_data=False, data_return=True, return_json=False, retry=retry, check_data=False, allow_redirects=False)

        if not data:
            if self._debug_mode:
                log.debug('Failure to retrieve expected data')
                log.debug('Execution Done: api.login')

            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
            self.clear_session()
            return False

        self._session.headers = CONST_LOGIN_HEADERS
        self._session.headers.update({'Referer': auth_url})

        session_post_data = {
            "Password": password,
            "Username": username,
        }

        if self._debug_mode:
            log.debug('Request Session Headers')
            log.debug(self._session.headers)

        resp = self.download(url=CONST_LOGIN_URL, type="post", code=None, data=session_post_data, json_data=False, data_return=True, return_json=False, retry=retry, check_data=False, allow_redirects=False)

        if (resp.status_code != 302):
            if self._debug_mode:
                log.debug('Failure to retrieve expected data')
                log.debug('Execution Done: api.login')

            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
            self.clear_session()
            return False

        params = parse_qs(urlparse(resp.headers['Location']).query)

        if check_key(params, 'code'):
            oauth = params['code'][0]

        if self._debug_mode:
            log.debug('Params: {params}'.format(params=params))
            log.debug('OAuth: {oauth}'.format(oauth=oauth))

        if len(oauth) == 0:
            if self._debug_mode:
                log.debug('Failure to retrieve expected data')
                log.debug('Execution Done: api.login')

            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
            self.clear_session()
            return False

        challenge_url = "{base_url}/m7be2iphone/challenge.aspx".format(base_url=CONST_BASE_URL)
        browser_name = settings.get(key='_browser_name')

        session_post_data = {
            "autotype": "nl",
            "app": "cds",
            "prettyname": browser_name,
            "model": "web",
            "serial": self._devicekey,
            "oauthcode": oauth
        }

        self._session.headers = CONST_BASE_HEADERS
        self._session.headers.update({'Content-Type': 'application/json;charset=UTF-8'})

        if self._debug_mode:
            log.debug('Request Session Headers')
            log.debug(self._session.headers)

        data = self.download(url=challenge_url, type="post", code=[200], data=session_post_data, json_data=True, data_return=True, return_json=True, retry=retry, check_data=False, allow_redirects=False)

        if not data or not check_key(data, 'id') or not check_key(data, 'secret'):
            if check_key(data, 'error') and data['error'] == 'toomany':
                gui.ok(message=_.TOO_MANY_DEVICES, heading=_.LOGIN_ERROR_TITLE)
            else:
                gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)

            if self._debug_mode:
                log.debug('Failure to retrieve expected data')
                log.debug('Execution Done: api.login')

            self.clear_session()
            return False

        login_url = "{base_url}/m7be2iphone/login.aspx".format(base_url=CONST_BASE_URL)

        self._session.headers = CONST_BASE_HEADERS
        self._session.headers.update({'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'})

        if self._debug_mode:
            log.debug('Request Session Headers')
            log.debug(self._session.headers)

        secret = '{id}\t{secr}'.format(id=data['id'], secr=data['secret'])

        session_post_data = {
            "secret": secret,
            "uid": self._devicekey,
            "app": "cds",
        }

        resp = self.download(url=login_url, type="post", code=None, data=session_post_data, json_data=False, data_return=True, return_json=False, retry=retry, check_data=False, allow_redirects=False)

        if (resp.status_code != 302):
            if self._debug_mode:
                log.debug('Failure to retrieve expected data')
                log.debug('Execution Done: api.login')

            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
            self.clear_session()
            return False

        ssotoken_url = "{base_url}/m7be2iphone/capi.aspx?z=ssotoken".format(base_url=CONST_BASE_URL)

        self._session.headers = CONST_BASE_HEADERS

        if self._debug_mode:
            log.debug('Request Session Headers')
            log.debug(self._session.headers)

        data = self.download(url=ssotoken_url, type="get", code=[200], data=None, json_data=False, data_return=True, return_json=True, retry=retry, check_data=False, allow_redirects=False)

        if not data or not check_key(data, 'ssotoken'):
            if self._debug_mode:
                log.debug('Failure to retrieve expected data')
                log.debug('Execution Done: api.login')

            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
            self.clear_session()
            return False

        session_url = "{api_url}/session".format(api_url=CONST_DEFAULT_API)

        session_post_data = {
            "sapiToken": data['ssotoken'],
            "deviceType": "PC",
            "deviceModel": browser_name,
            "osVersion": '{name} {version}'.format(name=settings.get(key='_os_name'), version=settings.get(key='_os_version')),
            "deviceSerial": self._devicekey,
            "appVersion": settings.get(key='_browser_version'),
            "brand": "cds"
        }

        self._session.headers = CONST_BASE_HEADERS
        self._session.headers.update({'Content-Type': 'application/json;charset=UTF-8'})

        if self._debug_mode:
            log.debug('Request Session Headers')
            log.debug(self._session.headers)

        data = self.download(url=session_url, type="post", code=[200], data=session_post_data, json_data=True, data_return=True, return_json=True, retry=retry, check_data=False, allow_redirects=False)

        if not data or not check_key(data, 'token'):
            if self._debug_mode:
                log.debug('Failure to retrieve expected data')
                log.debug('Execution Done: api.login')

            gui.ok(message=_.LOGIN_ERROR, heading=_.LOGIN_ERROR_TITLE)
            self.clear_session()
            return False

        self._session_token = data['token']
        settings.set(key='_session_token', value=self._session_token)
        self._session_age = time.time()
        settings.setInt(key='_session_age', value=self._session_age)

        if self._debug_mode:
            log.debug('Session Token: {session_token}'.format(session_token=self._session_token))
            log.debug('Settings _channels_age: {channels_age}'.format(channels_age=self._channels_age))
            log.debug('Time - 86400 seconds: {time}'.format(time=int(time.time() - 86400)))

        if channels or self._channels_age < int(time.time() - 86400):
            self.get_channels_for_user()

        self._username = username
        self._password = password

        if settings.getBool(key='save_password', default=False):
            set_credentials(username=username, password=password)
        else:
            set_credentials(username=username, password='')

        self.logged_in = True
        self._session.headers = CONST_BASE_HEADERS
        self._session.headers.update({'Authorization': 'Bearer ' + self._session_token})

        if self._debug_mode:
            log.debug('Request Session Headers')
            log.debug(self._session.headers)
            log.debug('Execution Done: api.login')

        return True