home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.6)
-
- import services.service_provider as SP
- from util.primitives.structures import oset
- from peak.util import addons
- import threading
- from facebook.fbconnectlogin import LoginCheck
- from facebook.facebookapi import DIGSBY_API_KEY, DIGSBY_ACHIEVEMENTS_API_KEY
- from facebook import facebookapi
- import logging
- log = logging.getLogger('facebook_sp')
-
- class FacebookServiceProvider(SP.UsernameServiceProvider):
- password = None
- digsby_session_key = None
- digsby_secret = None
- ach_session_key = None
- ach_secret = None
- uid = None
-
- def update_info(self, info):
- super(FacebookServiceProvider, self).update_info(info)
- self.informed_ach = info.get('informed_ach', False)
- if 'filters' in info:
- self.filters = info.get('filters')
-
-
-
- def update_components(self, info):
- info = dict(info)
- info.pop('password')
- super(FacebookServiceProvider, self).update_components(info)
-
-
- def add_account_im(self, acct):
- acct_options = acct.get_options()
- if not acct.enabled:
- if self.digsby_session_key:
- pass
- if not (self.digsby_secret):
- pwd = getattr(acct, 'password', None)
- if pwd:
-
- try:
- pstr_to_list = pstr_to_list
- import facebook.fbacct
- (digsby_session_key, digsby_secret) = pstr_to_list(acct._decryptedpw())
- except ValueError:
- pass
-
- self.digsby_session_key = digsby_session_key
- self.digsby_secret = digsby_secret
-
-
- if acct.enabled or not (self.uid):
- uid = acct_options.pop('uid', None)
- if uid is not None:
- self.uid = uid
-
-
-
-
- def add_account_social(self, acct):
- acct_options = acct.get_options()
- self.informed_ach = acct_options.get('informed_ach', False)
- if 'filters' in acct_options:
- self.filters = acct_options.get('filters')
-
- login_info = [
- ('', '')] * 3
- stored_login_info = zip(acct.passwords, acct.secrets_list)
- login_info[:len(stored_login_info)] = stored_login_info
- (digsby_session_key, digsby_secret) = login_info[0]
- (ach_session_key, ach_secret) = login_info[1]
- if ach_session_key and ach_secret:
- self.ach_session_key = ach_session_key
- self.ach_secret = ach_secret
-
- if not acct.enabled:
- if self.digsby_session_key:
- pass
- if not (self.digsby_secret):
- if digsby_session_key and digsby_secret:
- self.digsby_session_key = digsby_session_key
- self.digsby_secret = digsby_secret
-
-
- if acct.enabled or not (self.uid):
- uid = acct_options.pop('uid', None)
- if uid is not None:
- self.uid = uid
-
-
-
-
- def get_options(self, type):
- opts = super(FacebookServiceProvider, self).get_options(type = type)
- opts['informed_ach'] = self.informed_ach
- if hasattr(self, 'filters'):
- opts['filters'] = self.filters
-
- return opts
-
-
- def rebuilt(self):
- log.info('rebuilt with %r', self.accounts)
- logins = [ FacebookLogin(a) for a in self.accounts.values() ]
- log.debug('logins: %r', logins)
- loginmanager = FacebookLoginManger(self)
- FacebookLogin.lock.__enter__()
-
- try:
- for login in logins:
- login.loginmanager = loginmanager
- loginmanager.logins.add(login)
- finally:
- pass
-
- loginmanager.go()
-
-
-
- class FacebookLoginManger(object):
-
- def __init__(self, provider):
- self.logins = oset()
- self.provider = provider
- self.active = False
-
-
- def go(self):
- print self.logins
- if not getattr(self.provider, 'digsby_session_key', None):
- pass
- if not getattr(self.provider, 'digsby_secret', None):
- pass
- self.digsby = facebookapi.FacebookAPI(DIGSBY_API_KEY, '', '', name = 'digsby', uid = getattr(self.provider, 'uid', None))
- if not getattr(self.provider, 'ach_session_key', None):
- pass
- if not getattr(self.provider, 'ach_secret', None):
- pass
- self.digsby_ach = facebookapi.FacebookAPI(DIGSBY_ACHIEVEMENTS_API_KEY, '', '', name = 'digsby_ach', uid = getattr(self.provider, 'uid', None))
- FacebookLogin.lock.__enter__()
-
- try:
- if not any((lambda .0: for login in .0:
- login.active)(self.logins)):
- return None
- self.active = True
- IServiceProviderGUIMetaData = IServiceProviderGUIMetaData
- import gui.pref.pg_accounts
- self.loginproto = LoginCheck(digsby_api = self.digsby, digsby_ach_api = self.digsby_ach, login_success = self.success, login_error = self.fail, do_ach = any((lambda .0: for login in .0:
- if login.acct.enabled:
- login.do_achcontinue)(self.logins)), username = self.provider.accounts.values()[0].username, acct = IServiceProviderGUIMetaData(self.provider), ask_ach = any((lambda .0: for login in .0:
- login.do_ach)(self.logins)))
- self.loginproto.initiatiate_check(True)
- finally:
- pass
-
-
-
- def success(self, check_instance, did_login = False, *a, **k):
- FacebookLogin.lock.__enter__()
-
- try:
- self.provider.digsby_session_key = self.digsby.session_key
- self.provider.digsby_secret = self.digsby.secret
- self.provider.ach_session_key = self.digsby_ach.session_key
- self.provider.ach_secret = self.digsby_ach.secret
- self.provider.uid = self.digsby.uid
- self.active = False
- for login in self.logins:
- if login.active:
- login.active = False
- if not login.did_login:
- pass
- login.login_success(check_instance, did_login, *a, **k)
- login.did_login = False
- continue
- None if login.loginmanager is not self else FacebookLogin.lock
- if not login.did_login:
- pass
- login.did_login = did_login
- finally:
- pass
-
-
-
- def fail(self, *a, **k):
- FacebookLogin.lock.__enter__()
-
- try:
- self.active = False
- for login in self.logins:
- if login.active:
- login.active = False
- login.login_error(*a, **k)
- continue
- None if login.loginmanager is not self else FacebookLogin.lock
- finally:
- pass
-
-
-
-
- class FacebookLogin(addons.AddOn):
- lock = threading.RLock()
-
- def __init__(self, subject):
- self.acct = subject
- self.active = False
- self.did_login = False
- self.loginmanager = None
- self.do_ach = getattr(subject, 'should_do_ach', (lambda : False))()
-
-
- def do_check(self, login_success, login_error, do_ach = False):
- self.lock.__enter__()
-
- try:
- self.active = True
- self.login_success = login_success
- self.login_error = login_error
- self.do_ach = do_ach
- if self.loginmanager is not None and not (self.loginmanager.active):
- self.loginmanager.go()
- finally:
- pass
-
-
-
- def __enter__(self):
- self.lock.acquire()
- return self
-
-
- def __exit__(self, exc_type, exc_value, traceback):
- self.lock.release()
-
-
-