예제 #1
0
 def render_GET(self, request):
     shared.SharedPath().response_headers(request, 'application/json')
     kwargs = User().get_role_args(shared.SharedPath().path_site(request),
                                   keys.entity_twitter)
     print 'get curator:', kwargs
     deferred_user(request, kwargs)
     return server.NOT_DONE_YET
예제 #2
0
 def get_secret_key(self, request):
     print self.consumer_secret_keys, shared.SharedPath().path_site(request)
     if shared.SharedPath().path_site(request) in self.consumer_secret_keys:
         return self.consumer_secret_keys[shared.SharedPath().path_site(
             request)]
     else:
         ln = request.getRequestHostname().split('.')[0]
         if ln not in self.consumer_secret_keys:
             self.consumer_secret_keys[ln] = user_secret_key(
                 User().get_by_role(ln, keys.entity_twitter))
         return self.consumer_secret_keys[ln]
예제 #3
0
 def render_GET(self, request):
     shared.SharedPath().response_headers(request, 'application/json')
     l = request.postpath
     site = shared.SharedPath().path_site(request)
     print 'get:', l, request.prepath, request.args
     cs = '_'.join([self.prefix, site.split('.')[0]])
     resp = fixed.to_json([
         c for c in self.mongo_db[cs].find({}).sort(Tweet.ts_ms, -1).skip(
             0 if 'skip' not in request.
             args else int(request.args['skip'][0])).limit(self.find_limit)
     ])
     print 'collection name:', cs, 'response length:', len(resp)
     request.write(json.dumps(resp, cls=fixed.SetEncoder))
     request.finish()
     return server.NOT_DONE_YET
예제 #4
0
def step1(request):
    request_token_url = 'https://api.twitter.com/oauth/request_token'
    site = shared.SharedPath().path_site(request)
    curator = User().get_by_role(site, keys.entity_twitter)
    app_name = curator[user_keys.user_twitter_apps].keys()[0]
    client_key = curator[user_keys.user_twitter_apps][app_name][user_keys.user_consumer_key]
    client_secret = curator[user_keys.user_twitter_apps][app_name][user_keys.user_consumer_secret]
    oauth = OAuth1Session(client_key, client_secret=client_secret)
    fetch_response = oauth.fetch_request_token(request_token_url)
    #{
    #    "oauth_token": "Z6eEdO8MOmk394WozF5oKyuAv855l4Mlqo7hhlSLik",
    #    "oauth_token_secret": "Kd75W4OQfb2oJTV0vzGzeXftVAwgMnEK9MumzYcM"
    #}
    resource_owner_key = fetch_response.get('oauth_token')
    resource_owner_secret = fetch_response.get('oauth_token_secret')
    print 'oauth_callback_confirmed:', fetch_response.get('oauth_callback_confirmed')

    #oauth = OAuth1(client_key, client_secret=client_secret)
    #r = requests.post(url=request_token_url, auth=oauth)
    #r.content
    #"oauth_token=Z6eEdO8MOmk394WozF5oKyuAv855l4Mlqo7hhlSLik&oauth_token_secret=Kd75W4OQfb2oJTV0vzGzeXftVAwgMnEK9MumzYcM"
    #from urlparse import parse_qs
    #credentials = parse_qs(r.content)
    #resource_owner_key = credentials.get('oauth_token')[0]
    #resource_owner_secret = credentials.get('oauth_token_secret')[0]    
    #oauth = OAuth1Session(client_key, client_secret=client_secret)
    request.write(json.dumps({'oauth_token': resource_owner_key}))
    #request.redirect("https://api.twitter.com/oauth/authorize?oauth_token=" + resource_owner_key)
    request.finish()
예제 #5
0
 def render_GET(self, request):
     shared.SharedPath().response_headers(request, 'application/json')
     if len(request.postpath) > 0:
         kwargs = User().get_role_args(request.postpath[0],
                                       keys.entity_twitter)
         print 'get operator:', kwargs
         deferred_user(request, kwargs)
     else:
         site = shared.SharedPath().path_site(request)
         threads.deferToThread(
             User().get_leagues, site,
             keys.entity_twitter).addCallback(lambda ans: json.dumps(
                 [shared.treat(shared.entity_filter(u._data)) for u in ans],
                 cls=fixed.SetEncoder)).addCallback(
                     request.write).addCallback(
                         lambda ign: request.finish())
     return server.NOT_DONE_YET
예제 #6
0
 def render_GET(self, request):
     shared.SharedPath().response_headers(request, 'application/json')
     missing_key = request.prepath[-1]
     hs = shared.hassocial(request, social_key=missing_key, is_null=True)
     print 'missing key:', missing_key, 'kwargs:', hs
     d = self.get_missing(hs)
     d.addCallback(lambda ans: shared.treat([e for e in ans]))
     d.addCallback(json.dumps, cls=fixed.SetEncoder)
     d.addCallback(request.write)
     d.addCallback(lambda ign: request.finish())
     return server.NOT_DONE_YET
예제 #7
0
 def render_GET(self, request):
     shared.SharedPath().response_headers(request, 'application/json')
     match_key = 'match_' + request.prepath[-1]
     hs = shared.hassocial(request, match_key)
     print 'match key:', match_key, 'kwargs:', hs
     self.get_match(hs).addCallback(lambda ans: shared.treat(
         [e for e in ans
          if not isinstance(e[match_key], Decimal)])).addCallback(
              json.dumps, cls=fixed.SetEncoder).addCallback(
                  request.write).addCallback(lambda ign: request.finish())
     return server.NOT_DONE_YET
예제 #8
0
 def render_GET(self, request):
     shared.SharedPath().response_headers(request, 'application/json')
     kwargs = {
         'league': request.postpath[0],
         'profile': Entity().league_profile(request.postpath[0])
     }
     print 'get league:', kwargs
     threads.deferToThread(
         Entity().get_item, **kwargs).addCallback(lambda ans: json.dumps(
             shared.treat(ans), cls=fixed.SetEncoder)).addCallback(
                 request.write).addCallback(lambda ign: request.finish())
     return server.NOT_DONE_YET
예제 #9
0
 def render_GET(self, request):
     shared.SharedPath().response_headers(request, 'application/json')
     kwargs = shared.hassocial(request,
                               social_key=request.prepath[1]
                               if len(request.prepath) > 1 else None,
                               is_null=False)
     print 'get entity:', kwargs
     #threads.deferToThread(Entity().query_2, **kwargs).addCallback(
     #    lambda ans: json.dumps([shared.treat(e) for e in ans],cls=fixed.SetEncoder)
     #).addCallback(request.write).addCallback(
     #    lambda ign: request.finish()
     #).addErrback(entity_error)
     return server.NOT_DONE_YET
예제 #10
0
 def find_by_profile(self, request, profile):
     if len(request.postpath) == 0 or request.postpath[0] == '':
         return [
             e for e in Entity().query_2(
                 index=Entity.index_site_profile,
                 site__eq=shared.SharedPath().path_site(request),
                 profile__eq=profile)
         ][0]
     elif len(request.postpath) == 1:
         return Entity().get_item(
             league=self.path_league(request)[keys.entity_league],
             profile=profile)
     elif len(request.postpath) == 2:
         return
예제 #11
0
    def render_GET(self, request):
        shared.SharedPath().response_headers(request, 'application/json')
        print 'tweeters get:', request.uri
        step1(request)
        return server.NOT_DONE_YET
        #shared.SharedPath().response_headers(request, 'application/json')
                        
        #entities = self.tweeters(request)

        #treated_matches = shared.treat(entities)
        #treated_json = json.dumps(treated_matches,cls=fixed.SetEncoder)            
        #request.write('')         
        #request.finish()
        #return server.NOT_DONE_YET
예제 #12
0
 def render_GET(self, request):
     print 'host:', request.getRequestHostname(
     ), 'request args:', request.args
     shared.SharedPath().response_headers(request, 'application/json')
     if 'crc_token' in request.args:
         sha256_hash_digest = hmac.new(self.get_secret_key(request),
                                       msg=request.args['crc_token'][0],
                                       digestmod=hashlib.sha256).digest()
         request.write(
             json.dumps({
                 'response_token':
                 'sha256=' + base64.b64encode(sha256_hash_digest)
             }))
         request.finish()
     else:
         request.write(
             json.dumps({
                 'host': request.getRequestHostname(),
                 'path': request.path,
                 'args': request.args
             }))
         request.finish()
     return server.NOT_DONE_YET
예제 #13
0
 def render_POST(self, request):
     shared.SharedPath().response_headers(request, 'application/json')
     raw_body = request.content.read()
     print 'body:', raw_body, 'headers:', self.requestHeaders.getAllRawHeaders(
     )
     if 'x-twitter-webhooks-signature' in self.requestHeaders.getAllRawHeaders(
     ):
         signature = self.requestHeaders.getAllRawHeaders(
         )['x-twitter-webhooks-signature'][7:]
         print 'signature:', signature
         sha256_hash_digest = hmac.new(self.get_secret_key(request),
                                       msg=raw_body,
                                       digestmod=hashlib.sha256).digest()
         print 'sha256:', sha256_hash_digest
         if sha256_hash_digest == base64.b64decode(signature):
             print 'valid message'
             body = json.loads(raw_body)
             print 'body:', body
         else:
             print 'invalid message'
     request.write('')
     request.finish()
     return server.NOT_DONE_YET
예제 #14
0
 def render_POST(self, request):
     shared.SharedPath().response_headers(request, 'application/json')
     body = json.loads(request.content.read())
     print 'match post:', request.prepath, 'uri:', request.uri, 'body:', body
     try:
         social_key = [sk for sk in keys_league.social_keys
                       if sk in body][0]
         print 'social_key:', social_key
         if 'block' in body and body['block']:
             blocks = keys_league.add_blocked(
                 shared.SharedPath().path_site(request), social_key,
                 body[social_key])
             print 'blocks:', blocks
             if keys.entity_profile in body:
                 entity = self.find_by_profile(request,
                                               body[keys.entity_profile])
                 del entity[social_key]
                 del entity[getattr(keys, 'entity_match_' + social_key)]
                 entity.partial_save()
             request.write(
                 json.dumps({
                     'match': 'blocked',
                     keys.entity_profile: body[keys.entity_profile],
                     social_key: body[social_key]
                 }))
             request.finish()
             return server.NOT_DONE_YET
         elif 'no' in body and body['no']:
             entity = self.find_by_profile(request,
                                           body[keys.entity_profile])
             del entity[getattr(keys, 'entity_match_' + social_key)]
             entity.partial_save()
             request.write(
                 json.dumps({
                     'match': 'deleted',
                     keys.entity_profile: body[keys.entity_profile],
                     social_key: body[social_key]
                 }))
             request.finish()
             return server.NOT_DONE_YET
         elif 'remove' in body and body['remove']:
             entity = self.find_by_profile(request,
                                           body[keys.entity_profile])
             if entity[social_key] == body[social_key]:
                 request.write('removed: ' +
                               entity[social_key].encode('utf-8'))
                 del entity[social_key]
                 differences = {
                     social_key + '__remove': entity[social_key],
                     time_keys.ts_remove: int(time.time())
                 }
                 EntityHistory().delta(entity, differences)
                 entity.partial_save()
                 request.finish()
                 return server.NOT_DONE_YET
             else:
                 self.render_ERROR(400,
                                   'Cannot Remove:' + str(body[social_key]),
                                   request)
                 return server.NOT_DONE_YET
         else:
             entity = self.find_by_profile(request,
                                           body[keys.entity_profile])
             body[social_key] = body[social_key][1:] if body[
                 social_key][:1] == '@' else body[social_key]
             if not entity[social_key] or 'overwrite' in body and body[
                     'overwrite']:
                 entity[social_key] = body[social_key]
                 if (social_key == keys.entity_twitter
                         and twitter_keys.validate_twitter(entity)) or (
                             social_key == keys.entity_instagram
                             and instagram_keys.validate_instagram(entity)):
                     return self.identify(social_key, entity, request)
                 else:
                     print 'league has:', social_key, 'value:', entity[
                         social_key]
                     self.render_ERROR(
                         400,
                         'Invalid:' + entity[social_key].encode('utf-8'),
                         request)
                     return server.NOT_DONE_YET
             else:
                 print 'already has:', social_key, 'value:', entity[
                     social_key]
                 self.render_ERROR(
                     409,
                     'Already Has:' + entity[social_key].encode('utf-8'),
                     request)
                 return server.NOT_DONE_YET
     except Exception as e:
         print 'social key exception:', e