def login(self):
        if not self.username or not self.password:
            self.logout()
            return True  # fall back to free account
        elif self.token is not None:
            if self.userData() is not False:
                return True
            self.token = None

        if self.username and self.password and len(self.username) > 0 and len(
                self.password) > 0:
            self.logout()
            util.info('[SC] Login user=%s, pass=*****' % self.username)

            try:
                # get salt
                headers, req = self._create_request(
                    '', {'username_or_email': self.username})
                data = post(self._url('api/salt/'), req, headers=headers)
                xml = ET.fromstring(data)
                if not xml.find('status').text == 'OK':
                    util.error(
                        '[SC] Server returned error status, response: %s' %
                        data)
                    return False
                salt = xml.find('salt').text
                # create hashes
                password = hashlib.sha1(
                    md5crypt(self.password.encode('utf-8'),
                             salt.encode('utf-8'))).hexdigest()
                digest = hashlib.md5(self.username + ':Webshare:' +
                                     self.password).hexdigest()
                # login
                headers, req = self._create_request(
                    '', {
                        'username_or_email': self.username,
                        'password': password,
                        'digest': digest,
                        'keep_logged_in': 1
                    })
                data = post(self._url('api/login/'), req, headers=headers)
                xml = ET.fromstring(data)
                if not xml.find('status').text == 'OK':
                    self.clearToken()
                    util.error(
                        '[SC] Server returned error status, response: %s' %
                        data)
                    return False
                self.saveToken(xml.find('token').text)
                try:
                    util.cache_cookies(None)
                except:
                    pass
                util.info('[SC] Login successfull')
                return True
            except Exception, e:
                util.info('[SC] Login error %s' % str(e))
예제 #2
0
 def logout(self):
     util.info("[SC] logout")
     headers, req = self._create_request('/', {'wst': self.token})
     try:
         post(self._url('api/logout/'), req, headers=headers)
     except:
         util.debug("[SC] chyba logout")
         pass
     self.clearToken()
 def logout(self):
     util.info("[SC] logout")
     headers, req = self._create_request('/', {'wst': self.token})
     try:
         post(
             self._url('api/logout/'),
             req,
             headers=headers,
             output="content")
     except:
         util.debug("[SC] chyba logout")
         pass
     self.clearToken()
    def checkHTTPS(self, userData):
        util.debug('[SC] kontrolujem nastavenia HTTPS s WS [%s] [%s]' %
                   (getSetting('ws_usessl'),
                    userData.find('wants_https_download').text))
        toggle = False
        if getSettingAsBool('ws_usessl') is not True and userData.find(
                'wants_https_download').text == '1':
            toggle = True
        elif getSettingAsBool('ws_usessl') is True and userData.find(
                'wants_https_download').text == '0':
            toggle = True

        if toggle:
            headers, req = self._create_request('/', {'wst': self.token})
            try:
                util.info('[SC] userData menim nastavenie http(s)')
                data = post(self._url('api/toggle_https_download/'),
                            req,
                            headers=headers,
                            output="content")
                util.debug('[SC] zmena: %s' % str(data))
            except:
                self.clearToken()
                return False
            pass
    def resolve(self, ident, download_type=None):
        params = {'ident': ident, 'wst': self.token}

        if None is not download_type:
            params.update({
                'download_type': download_type,
                'device_uuid': getSetting('uid'),
                'device_res_x': infoLabel('System.ScreenWidth'),
                'device_res_y': infoLabel('System.ScreenHeight'),
            })

        headers, req = self._create_request('/', params)
        util.info(headers)
        util.info(req)
        try:
            data = post(self._url('api/file_link/'),
                        req,
                        headers=headers,
                        output="content")
            xml = ET.fromstring(data)
            if not xml.find('status').text == 'OK':
                self.clearToken()
                util.error('[SC] Server returned error status, response: %s' %
                           data)
                raise ResolveException(xml.find('message').text)
            return xml.find('link').text
        except Exception as e:
            self.clearToken()
            raise ResolveException(e)
예제 #6
0
    def userData(self, all=False):
        if self.token is not None:
            headers, req = self._create_request('/', {'wst': self.token})
            try:
                util.info('[SC] userData')
                data = post(self._url('api/user_data/'), req, headers=headers)
            except:
                self.clearToken()
                return False
            util.info('[SC] userdata dat: %s' % data)
            xml = ET.fromstring(data)
            if not xml.find('status').text == 'OK':
                self.clearToken()
                return False
            if all == True:
                return xml
            util.debug("[SC] userInfo: %s %s" %
                       (xml.find('ident').text, xml.find('vip').text))
            if xml.find('vip').text == '1':
                xbmcgui.Window(10000).setProperty('ws.vip', '1')
                xbmcgui.Window(10000).setProperty('ws.ident',
                                                  xml.find('ident').text)
                xbmcgui.Window(10000).setProperty('ws.days',
                                                  xml.find('vip_days').text)
                return int(xml.find('vip_days').text)
            else:
                xbmcgui.Window(10000).setProperty('ws.vip', '0')

        return False
    def checkHTTPS(self, userData):
        util.debug('[SC] kontrolujem nastavenia HTTPS s WS [%s] [%s]' %
                   (getSetting('ws_usessl'),
                    userData.find('wants_https_download').text))
        toggle = False
        if getSettingAsBool('ws_usessl') is not True and userData.find(
                'wants_https_download').text == '1':
            toggle = True
        elif getSettingAsBool('ws_usessl') is True and userData.find(
                'wants_https_download').text == '0':
            toggle = True

        if toggle:
            headers, req = self._create_request('/', {'wst': self.token})
            try:
                util.info('[SC] userData menim nastavenie http(s)')
                data = post(
                    self._url('api/toggle_https_download/'),
                    req,
                    headers=headers,
                    output="content")
                util.debug('[SC] zmena: %s' % str(data))
            except:
                self.clearToken()
                return False
            pass
    def resolve(self, ident, download_type=None):
        params = {'ident': ident, 'wst': self.token}

        if None is not download_type:
            params.update({
                'download_type': download_type,
                'device_uuid': getSetting('uid'),
                'device_res_x': infoLabel('System.ScreenWidth'),
                'device_res_y': infoLabel('System.ScreenHeight'),
            })

        headers, req = self._create_request('/', params)
        util.info(headers)
        util.info(req)
        try:
            data = post(
                self._url('api/file_link/'),
                req,
                headers=headers,
                output="content")
            xml = ET.fromstring(data)
            if not xml.find('status').text == 'OK':
                self.clearToken()
                util.error(
                    '[SC] Server returned error status, response: %s' % data)
                raise ResolveException(xml.find('message').text)
            return xml.find('link').text
        except Exception as e:
            self.clearToken()
            raise ResolveException(e)
    def userData(self, all=False):
        self.getToken()
        if self.token is not None:
            if self._userData is None:
                headers, req = self._create_request('/', {'wst': self.token})
                try:
                    util.info('[SC] userData')
                    data = post(self._url('api/user_data/'),
                                req,
                                headers=headers,
                                output="content")
                except:
                    self.clearToken()
                    return False
                util.info('[SC] userdata dat: %s' % str(data))
                xml = ET.fromstring(str(data))
                self._userData = xml
            else:
                xml = self._userData
            if not xml.find('status').text == 'OK':
                self.clearToken()
                return False
            if all == True:
                return xml
            util.debug("[SC] userInfo: %s %s" %
                       (xml.find('ident').text, xml.find('vip').text))
            if xml.find('vip').text == '1':
                xbmcgui.Window(10000).setProperty('ws.vip', '1')
                try:
                    private_space = int(
                        xml.find('private_space').text) / 1073741824
                    util.info('[SC] private_space %d' % private_space)
                    viptyp = 4 if private_space > 50 else 3 if private_space >= 50 else 2 if private_space >= 20 else 1
                    xbmcgui.Window(10000).setProperty('ws.viptyp', str(viptyp))
                except:
                    util.info('[SC] vip typ error %s ' %
                              str(traceback.format_exc()))
                    pass
                xbmcgui.Window(10000).setProperty('ws.ident',
                                                  xml.find('ident').text)
                xbmcgui.Window(10000).setProperty('ws.days',
                                                  xml.find('vip_days').text)
                return int(xml.find('vip_days').text)
            else:
                xbmcgui.Window(10000).setProperty('ws.vip', '0')

        return False
예제 #10
0
 def resolve(self, ident):
     headers, req = self._create_request('/', {
         'ident': ident,
         'wst': self.token
     })
     util.info(headers)
     util.info(req)
     try:
         data = post(self._url('api/file_link/'), req, headers=headers)
         xml = ET.fromstring(data)
         if not xml.find('status').text == 'OK':
             self.clearToken()
             util.error('[SC] Server returned error status, response: %s' %
                        data)
             raise ResolveException(xml.find('message').text)
         return xml.find('link').text
     except Exception as e:
         self.clearToken()
         raise ResolveException(e)
    def userData(self, all=False):
        self.getToken()
        if self.token is not None:
            if self._userData is None:
                headers, req = self._create_request('/', {'wst': self.token})
                try:
                    util.info('[SC] userData')
                    data = post(
                        self._url('api/user_data/'),
                        req,
                        headers=headers,
                        output="content")
                except:
                    self.clearToken()
                    return False
                util.info('[SC] userdata dat: %s' % str(data))
                xml = ET.fromstring(str(data))
                self._userData = xml
            else:
                xml = self._userData
            if not xml.find('status').text == 'OK':
                self.clearToken()
                return False
            if all == True:
                return xml
            util.debug("[SC] userInfo: %s %s" % (xml.find('ident').text,
                                                 xml.find('vip').text))
            if xml.find('vip').text == '1':
                xbmcgui.Window(10000).setProperty('ws.vip', '1')
                xbmcgui.Window(10000).setProperty('ws.ident',
                                                  xml.find('ident').text)
                xbmcgui.Window(10000).setProperty('ws.days',
                                                  xml.find('vip_days').text)
                return int(xml.find('vip_days').text)
            else:
                xbmcgui.Window(10000).setProperty('ws.vip', '0')

        return False
    def login(self):
        util.debug('[SC] start login')
        if not self.username or not self.password:
            util.debug('[SC] idem sa odhlasit lebo nemam meno/heslo')
            self.logout()
            return True  # fall back to free account
        elif self.token is not None:
            userData = self.userData(True)
            if userData is not False:
                self.checkHTTPS(userData)
                return True
            self.clearToken()

        if self.username and self.password and len(self.username) > 0 and len(
                self.password) > 0:
            self.logout()
            util.info('[SC] Login user=%s, pass=***** (%d)' %
                      (self.username, len(self.password)))

            try:
                # get salt
                headers, req = self._create_request(
                    '', {'username_or_email': self.username})
                data = post(self._url('api/salt/'),
                            req,
                            headers=headers,
                            output="content")
                util.info('[SC] salt: %s' % str(data))
                xml = ET.fromstring(str(data))
                if not xml.find('status').text == 'OK':
                    util.error(
                        '[SC] Server returned error status, response: %s' %
                        data)
                    return False
                salt = xml.find('salt').text
                if salt is None:
                    salt = ''
                # create hashes
                password = hashlib.sha1(
                    md5crypt(self.password.encode('utf-8'),
                             salt.encode('utf-8'))).hexdigest()
                digest = hashlib.md5(
                    self.username.encode('utf-8') + ':Webshare:' +
                    self.password.encode('utf-8')).hexdigest()
                util.debug('[SC] pass: %s | [%s] digest: %s' %
                           (password,
                            str(
                                md5crypt(self.password.encode('utf-8'),
                                         salt.encode('utf-8'))), digest))
                # login
                headers, req = self._create_request(
                    '', {
                        'username_or_email': self.username,
                        'password': password,
                        'digest': digest,
                        'keep_logged_in': 1
                    })
                data = post(self._url('api/login/'),
                            req,
                            headers=headers,
                            output="content")
                xml = ET.fromstring(data)
                if not xml.find('status').text == 'OK':
                    self.clearToken()
                    util.error(
                        '[SC] Server returned error status, response: %s' %
                        data)
                    return False
                self.saveToken(xml.find('token').text)
                util.info('[SC] Login successfull')
                userData = self.userData(True)
                self.checkHTTPS(userData)
                return True
            except Exception as e:
                util.info('[SC] Login error %s' % str(e))
        self.clearToken()
        return False
예제 #13
0
    def userData(self, all=False):
        self.getToken()
        if self.token is None:
            self.login()

        if self.token is not None:
            if self._userData is None:
                headers, req = self._create_request('/', {'wst': self.token})
                try:
                    util.info('[SC] userData')
                    data = post(self._url('api/user_data/'),
                                req,
                                headers=headers,
                                output="content")
                except:
                    self.clearToken()
                    return False
                util.info('[SC] userdata dat: %s' % str(data))
                xml = ET.fromstring(str(data))
                self._userData = xml
            else:
                xml = self._userData
            if not xml.find('status').text == 'OK':
                self.clearToken()
                return False
            if all is True:
                return xml
            util.debug("[SC] userInfo: %s %s" %
                       (xml.find('ident').text, xml.find('vip').text))
            if xml.find('vip').text == '1':
                xbmcgui.Window(10000).setProperty('ws.vip', '1')
                try:
                    t = [
                        'credits', 'points', 'files', 'bytes', 'score_files',
                        'score_bytes', 'private_files', 'private_bytes',
                        'private_space', 'tester', 'role', 'id', 'username',
                        'email'
                    ]
                    j = dict((i, xml.find(i).text) for i in t
                             if xml.find(i) is not None)
                    xbmcgui.Window(10000).setProperty('ws.j',
                                                      str(json.dumps(j)))
                except Exception as e:
                    util.debug('[SC] chyba pri natiahnuti dat %s' %
                               str(traceback.format_exc()))

                try:
                    private_space = int(
                        xml.find('private_space').text) / 1073741824
                    util.info('[SC] private_space %d' % private_space)
                    viptyp = 4 if private_space > 50 else 3 if private_space >= 50 else 2 if private_space >= 20 else 1
                    xbmcgui.Window(10000).setProperty('ws.viptyp', str(viptyp))
                except:
                    util.info('[SC] vip typ error %s ' %
                              str(traceback.format_exc()))
                    pass
                xbmcgui.Window(10000).setProperty('ws.ident',
                                                  xml.find('ident').text)
                xbmcgui.Window(10000).setProperty('ws.days',
                                                  xml.find('vip_days').text)
                return int(xml.find('vip_days').text)
            else:
                xbmcgui.Window(10000).setProperty('ws.vip', '0')

        return False
    def login(self):
        util.debug('[SC] start login')
        if not self.username or not self.password:
            util.debug('[SC] idem sa odhlasit lebo nemam meno/heslo')
            self.logout()
            return True  # fall back to free account
        elif self.token is not None:
            userData = self.userData(True)
            if userData is not False:
                self.checkHTTPS(userData)
                return True
            self.clearToken()

        if self.username and self.password and len(self.username) > 0 and len(
                self.password) > 0:
            self.logout()
            util.info('[SC] Login user=%s, pass=***** (%d)' %
                      (self.username, len(self.password)))

            try:
                # get salt
                headers, req = self._create_request(
                    '', {'username_or_email': self.username})
                data = post(
                    self._url('api/salt/'),
                    req,
                    headers=headers,
                    output="content")
                util.info('[SC] salt: %s' % str(data))
                xml = ET.fromstring(str(data))
                if not xml.find('status').text == 'OK':
                    util.error(
                        '[SC] Server returned error status, response: %s' %
                        data)
                    return False
                salt = xml.find('salt').text
                if salt is None:
                    salt = ''
                # create hashes
                password = hashlib.sha1(
                    md5crypt(
                        self.password.encode('utf-8'),
                        salt.encode('utf-8'))).hexdigest()
                digest = hashlib.md5(
                    self.username.encode('utf-8') + ':Webshare:' +
                    self.password.encode('utf-8')).hexdigest()
                util.debug('[SC] pass: %s | [%s] digest: %s' %
                           (password,
                            str(
                                md5crypt(
                                    self.password.encode('utf-8'),
                                    salt.encode('utf-8'))), digest))
                # login
                headers, req = self._create_request(
                    '', {
                        'username_or_email': self.username,
                        'password': password,
                        'digest': digest,
                        'keep_logged_in': 1
                    })
                data = post(
                    self._url('api/login/'),
                    req,
                    headers=headers,
                    output="content")
                xml = ET.fromstring(data)
                if not xml.find('status').text == 'OK':
                    self.clearToken()
                    util.error(
                        '[SC] Server returned error status, response: %s' %
                        data)
                    return False
                self.saveToken(xml.find('token').text)
                util.info('[SC] Login successfull')
                userData = self.userData(True)
                self.checkHTTPS(userData)
                return True
            except Exception as e:
                util.info('[SC] Login error %s' % str(e))
        self.clearToken()
        return False