Exemple #1
0
    def get(self):
        helper = RequestHelper(self)
        try:
            if not users.is_current_user_admin():
                helper.error(403, "admin required")
                return

            oauth_token = self.request.get("oauth_token")
            if not oauth_token:
                # initial request, I store the request token key/secret as cookies and redirect to twitter's auth page
                request_token, auth_url = TwitterConnector.get_request_token_and_auth_url()
                logging.debug("request token key:%s, secret:%s" % (request_token.key, request_token.secret))

                helper.set_cookie("%s=%s; path=/" % (self._rtoken_key_cookie, request_token.key))
                helper.set_cookie("%s=%s; path=/" % (self._rtoken_secret_cookie, request_token.secret))
                helper.write_text("redirecting request token %s to %s" % (request_token.to_string(), auth_url))
                self.redirect(auth_url)
            else:
                # post verification request
                key = self.request.cookies.get(self._rtoken_key_cookie, None)
                secret = self.request.cookies.get(self._rtoken_secret_cookie, None)
                if not (key and secret):
                    helper.error(400, "key and secret not stored as cookies")
                    return
                access_token = TwitterConnector.get_access_token(key, secret)
                token_string = access_token.to_string()
                ConfigurationAccessor.update(twitter_access_token=token_string)
                helper.write_text("saved access token %s" % token_string)
        except Exception, e:
            msg = traceback.print_exc()
            helper.error(500, msg)
Exemple #2
0
 def put(self, key):
     helper = RequestHelper(self)
     if not self.request.body:
         helper.error(400, "body required")
         return
         
     value = self.request.body
     logging.info("%s=%s" % (key, value))
     try:
         ConfigurationAccessor.update(**{key: value})
     except IllegalArgumentException, e:
         helper.error(400, "invalid key")
         return
Exemple #3
0
    def put(self, key):
        helper = RequestHelper(self)
        if not self.request.body:
            helper.error(400, "body required")
            return

        value = self.request.body
        logging.info("%s=%s" % (key, value))
        try:
            ConfigurationAccessor.update(**{key: value})
        except IllegalArgumentException, e:
            helper.error(400, "invalid key")
            return
    def test_read_only(self):
        m = Mox()

        config = m.CreateMock(Configuration)
        config.twitter_access_token = "oauth_token=1234&oauth_token_secret=5678"
        config.twitter_read_only = "1"

        m.StubOutWithMock(ConfigurationAccessor, "get_or_create")
        ConfigurationAccessor.get_or_create().AndReturn(config)

        m.ReplayAll()
        api = TwitterConnector.new_api()
        self.__assert_is_instance(api, ReadOnlyTwitterApi)
        m.VerifyAll()
 def test_read_only(self):
     m = Mox()
     
     config = m.CreateMock(Configuration)
     config.twitter_access_token = "oauth_token=1234&oauth_token_secret=5678"
     config.twitter_read_only = "1"
     
     m.StubOutWithMock(ConfigurationAccessor, "get_or_create")
     ConfigurationAccessor.get_or_create().AndReturn(config)
     
     m.ReplayAll()
     api = TwitterConnector.new_api()
     self.__assert_is_instance(api, ReadOnlyTwitterApi)
     m.VerifyAll()
Exemple #6
0
    def act(self, force_act=False, action=None, skip_responses=False):
        """
        returns:
            (action, response) tuple.  response type depends on the action that was performed.
        """
        if not force_act:
            config = ConfigurationAccessor.get_or_create()
            if config and (config.is_tweeting
                           is not None) and (not safe_int(config.is_tweeting)):
                logging.debug("config.is_tweeting is False; hiding")
                return ()

        result = []
        responded = False
        if not skip_responses:
            try:
                direct, response = self.respond()
                if (direct or response):
                    # a response to a direct message or mention was generated
                    responded = True
                    if direct:
                        result.append(direct.AsDict())
                    if response:
                        result.append(response.AsDict())
            except Exception, e:
                logging.error(e)
Exemple #7
0
 def act(self, force_act=False, action=None, skip_responses=False):
     """
     returns:
         (action, response) tuple.  response type depends on the action that was performed.
     """        
     if not force_act:
         config = ConfigurationAccessor.get_or_create()
         if config and (config.is_tweeting is not None) and (not safe_int(config.is_tweeting)):
             logging.debug("config.is_tweeting is False; hiding")
             return ()
     
     result = []
     responded = False
     if not skip_responses:
         try:
             direct, response = self.respond()
             if (direct or response):
                 # a response to a direct message or mention was generated
                 responded = True
                 if direct:
                     result.append(direct.AsDict())
                 if response:
                     result.append(response.AsDict())
         except Exception, e:
             logging.error(e)
Exemple #8
0
 def new_api(cls):
     config = ConfigurationAccessor.get_or_create()
     if config and config.twitter_oauth_enabled and config.twitter_access_token:
         logging.debug("creating OAuth API instance")
         api = cls._new_oauth_api(config.twitter_access_token)
     else:
         raise Exception("no OAuth token stored in config")
         
     if safe_int(config.twitter_read_only):
         logging.debug("creating read-only Twitter API")
         api = ReadOnlyTwitterApi(api)
     return api
Exemple #9
0
    def new_api(cls):
        config = ConfigurationAccessor.get_or_create()
        if config and config.twitter_oauth_enabled and config.twitter_access_token:
            logging.debug("creating OAuth API instance")
            api = cls._new_oauth_api(config.twitter_access_token)
        else:
            raise Exception("no OAuth token stored in config")

        if safe_int(config.twitter_read_only):
            logging.debug("creating read-only Twitter API")
            api = ReadOnlyTwitterApi(api)
        return api
Exemple #10
0
    def get(self):
        helper = RequestHelper(self)
        try:
            if not users.is_current_user_admin():
                helper.error(403, "admin required")
                return

            oauth_token = self.request.get("oauth_token")
            if not oauth_token:
                # initial request, I store the request token key/secret as cookies and redirect to twitter's auth page
                request_token, auth_url = TwitterConnector.get_request_token_and_auth_url(
                )
                logging.debug("request token key:%s, secret:%s" %
                              (request_token.key, request_token.secret))

                helper.set_cookie("%s=%s; path=/" %
                                  (self._rtoken_key_cookie, request_token.key))
                helper.set_cookie(
                    "%s=%s; path=/" %
                    (self._rtoken_secret_cookie, request_token.secret))
                helper.write_text("redirecting request token %s to %s" %
                                  (request_token.to_string(), auth_url))
                self.redirect(auth_url)
            else:
                # post verification request
                key = self.request.cookies.get(self._rtoken_key_cookie, None)
                secret = self.request.cookies.get(self._rtoken_secret_cookie,
                                                  None)
                if not (key and secret):
                    helper.error(400, "key and secret not stored as cookies")
                    return
                access_token = TwitterConnector.get_access_token(key, secret)
                token_string = access_token.to_string()
                ConfigurationAccessor.update(twitter_access_token=token_string)
                helper.write_text("saved access token %s" % token_string)
        except Exception, e:
            msg = traceback.print_exc()
            helper.error(500, msg)
Exemple #11
0
 def get(self, key):
     helper = RequestHelper(self)
     config = ConfigurationAccessor.get_or_create()
     result = None
     if config:
         if key:
             if entity_has_property(config, key):
                 result = getattr(config, key)
             else:
                 helper.error(400, "invalid key")
                 return
         else:
             result = entity_to_hash(config)
     else:
         result = {}
     helper.write_json(result)
Exemple #12
0
 def get(self, key):
     helper = RequestHelper(self)
     config = ConfigurationAccessor.get_or_create()
     result = None
     if config:
         if key:
             if entity_has_property(config, key):
                 result = getattr(config, key)
             else:
                 helper.error(400, "invalid key")
                 return
         else:
             result = entity_to_hash(config)
     else:
         result = {}
     helper.write_json(result)
Exemple #13
0
 def delete(self, key):
     helper = RequestHelper(self)
     ConfigurationAccessor.update(**{key: None})
     helper.set_status(204)
def _build_standard_config(moxer):
    moxer.StubOutWithMock(ConfigurationAccessor, "get_or_create")
    config = moxer.CreateMock(Configuration)
    ConfigurationAccessor.get_or_create().AndReturn(config)
    config.is_tweeting = None
    return config
 def __mock_config(self, config, moxer):
     moxer.StubOutWithMock(ConfigurationAccessor, "get_or_create")
     ConfigurationAccessor.get_or_create().AndReturn(config)
Exemple #16
0
def _build_standard_config(moxer):
    moxer.StubOutWithMock(ConfigurationAccessor, "get_or_create")
    config = moxer.CreateMock(Configuration)
    ConfigurationAccessor.get_or_create().AndReturn(config)
    config.is_tweeting = None
    return config
Exemple #17
0
 def __mock_config(self, config, moxer):
     moxer.StubOutWithMock(ConfigurationAccessor, "get_or_create")
     ConfigurationAccessor.get_or_create().AndReturn(config)
Exemple #18
0
 def delete(self, key):
     helper = RequestHelper(self)
     ConfigurationAccessor.update(**{key: None})
     helper.set_status(204)