def get_items(user, since, model_instance=None): serv = model_instance or get_model_instance(user, __name__) items = [] at = AccessToken.objects.get(service=serv) try: feed = feedparser.parse('http://www.google.com/reader/public/atom/user/%s/state/com.google/broadcast' % (at.userid,)) for entry in feed.entries: updated = parser.parse(entry.updated) updated = (updated - updated.utcoffset()).replace(tzinfo=None) if updated.date() >= since: item = ServiceItem() item.title = entry.title # we dont take the summary as its huge #if entry.has_key('summary'): item.body = '' if entry.has_key('links'): item.link_back = entry['links'] if entry.has_key('link'): item.link_back = entry['link'] item.created = updated item.service = serv item.user = user # for stats o = urlparse(entry.source.link) item.source = o.netloc item.author = entry.author # person making comment # entry.content[0].value == coment items.append(item) except Exception, e: raise LoggedServiceError(original_exception=e)
def auth(request): """We dont need a full oauth setup just a username.""" service = get_model_instance(request.user, PACKAGE_NAME) if service and request.method == 'POST': username = request.POST['username'] if username: user_feed = get_url('http://feeds.delicious.com/v2/json/%s' % (username,)) if username: # check the username is valid if user_feed[0]['d'] == '404 Not Found': messages.error(request, 'Unable to find username "%s", please try again' % (username,)) else: if not service.auth: auth_handler = Auth() else: auth_handler = service.auth auth_handler.username = username auth_handler.save() if not service.auth: service.auth = auth_handler service.setup = True service.public = True service.save() else: messages.error(request, 'Please enter a Delicious username') return redirect(settings_redirect(request))
def verify_auth(request): """Take incoming request and validate it to create a valid AccessToken.""" service = get_model_instance(request.user, PACKAGE) service.auth.request_token.oauth_verify = request.GET.get('oauth_verifier') service.auth.request_token.save() if not generate_access_token(service, service.app.auth_settings['access_token_url']): messages.error( request, 'Unable to validate your username with Flickr, please check grant permission for gargoyle.me to access your photos.' ) return HttpResponseRedirect(settings_redirect(request)) ## Mark as setup completed service.setup = True ## Test if service is protected on twitter's side ## if so mark it #twitter_user = get_user(service) #if twitter_user.protected: #service.public = False #else: #service.public = True service.save() return redirect(settings_redirect(request))
def auth(request): """We dont need a full oauth setup just a username.""" service = get_model_instance(request.user, MODULE_NAME) if service and request.method == 'POST': username = request.POST['username'] if username: # Delete existing token AccessToken.objects.filter(service=service).delete() # Before creating a new one AccessToken.objects.create( service=service, username=username, created=datetime.now(), api_token=service.app.oauth.consumer_key ) user_feed = get_data( None, 'http://feeds.delicious.com/v2/json/%s' % (username), disable_oauth=True) # check the username is valid if user_feed[0]['d'] == '404 Not Found': messages.error(request, 'Unable to find your username, please try again') else: service.setup = True service.public = True service.save() else: messages.error(request, 'Please enter a Delicious username') return redirect(settings_redirect(request))
def verify_auth(request): """Take incoming request and validate it to create a valid AccessToken.""" service = get_model_instance(request.user, PACKAGE) service.auth.request_token.oauth_verify = request.GET.get('oauth_verifier') service.auth.request_token.save() if not generate_access_token(service, "https://twitter.com/oauth/access_token"): messages.error( request, 'Unable to validate your account with Twitter, please grant gargoyle.me access.' ) return HttpResponseRedirect(settings_redirect(request)) # Mark as setup completed service.setup = True # Test if service is protected on twitter's side # if so mark it twitter_user = get_user(service) if twitter_user.protected: service.public = False else: service.public = True service.save() return HttpResponseRedirect(settings_redirect(request))
def auth(request): """Prepare a oauth request by saving a record locally ready for the redirect from twitter.""" request.session['causal_twitter_oauth_return_url'] = \ request.GET.get('HTTP_REFERER', None) service = get_model_instance(request.user, PACKAGE) return user_login(service)
def verify_auth(request): """Handle the redirect from foursquare as part of the oauth process. """ service = get_model_instance(request.user, PACKAGE) code = request.GET.get('code') url = "https://foursquare.com/oauth2/access_token?client_id=%s&client_secret=%s&grant_type=authorization_code&redirect_uri=%s&code=%s" % (service.app.auth_settings['consumer_key'], service.app.auth_settings['consumer_secret'], service.app.auth_settings['return_url'], code) access_token = get_url(url) if access_token.has_key('error'): messages.error(request, 'Unable to validate your with Foursquare, please wait a few minutes and retry.') else: at = AccessToken.objects.create( oauth_token = access_token["access_token"], oauth_token_secret = '', oauth_verify = '' ) service.auth.access_token = at service.auth.save() service.setup = True service.public = True service.save() return redirect(settings_redirect(request))
def auth(request): """First leg of the two stage auth process. We setup and take note""" request.session['causal_facebook_oauth_return_url'] = \ request.GET.get('HTTP_REFERER', None) service = get_model_instance(request.user, PACKAGE) if not service.auth: auth_handler = OAuth() auth_handler.save() service.auth = auth_handler service.save() if request.is_secure(): scheme = "https://" else: scheme = "http://" base_url = "%s%s" % (scheme, request.get_host(),) callback = "%s%s" % (base_url, reverse('causal-facebook-callback'),) return redirect("https://graph.facebook.com/oauth/authorize&redirect_uri=%s&scope=%s&client_id=%s" % ( callback, 'read_stream,offline_access,user_photos,user_photo_video_tags,user_checkins', service.app.auth_settings['app_id'] ) )
def get_items(user, since, model_instance=None): serv = model_instance or get_model_instance(user, __name__) at = AccessToken.objects.get(service=serv) url = 'http://%s.tumblr.com/api/read/json?callback=callback' % (at.username,) h = httplib2.Http() resp, content = h.request(url, "GET") return _convert_feed(content, serv, user)
def get_items(user, since, model_instance=None): """Fetch the history of checkins for the current user.""" serv = model_instance or get_model_instance(user, __name__) try: checkins = get_data(serv, 'http://api.foursquare.com/v1/history.json') except Exception, e: raise LoggedServiceError(original_exception=e)
def get_items(user, since, model_instance=None): """Fetch updates.""" serv = model_instance or get_model_instance(user, __name__) at = AccessToken.objects.get(service=serv) return _convert_feed(at.username, serv, _get_feed(user, serv), since)
def auth(request): """Setup oauth details for the return call from foursquare""" request.session['causal_foursquare_oauth_return_url'] = \ request.GET.get('HTTP_REFERER', None) service = get_model_instance(request.user, MODULE_NAME) if not service: app = ServiceApp.objects.get(module_name=MODULE_NAME) service = UserService(user=request.user, app=app) service.save() return user_login(service)
def get_stats_items(user, since, model_instance=None): serv = model_instance or get_model_instance(user, __name__) items = [] at = AccessToken.objects.get(service=serv) user_feed = get_data( serv, 'http://github.com/%s.json' % (at.username), disable_oauth=True) return _convert_stats_feed(at.username, serv, user_feed, since)
def get_items(user, since, model_instance=None): serv = model_instance or get_model_instance(user, __name__) at = AccessToken.objects.get(service=serv) url = 'http://feeds.delicious.com/v2/json/%s?count=100' % (at.username,) user_feed = get_data( serv, url, disable_oauth=True ) return _convert_feed(serv, user, user_feed, since)
def auth(request): """Prepare a oauth request by saving a record locally ready for the redirect from twitter.""" request.session['causal_twitter_oauth_return_url'] = \ request.GET.get('HTTP_REFERER', None) service = get_model_instance(request.user, MODULE_NAME) if not service: app = ServiceApp.objects.get(module_name=MODULE_NAME) service = UserService(user=request.user, app=app) service.save() else: logging.error('Service not found') return user_login(service)
def get_items(user, since, model_instance): """Fetch and normalise the updates from the service.""" serv = model_instance or get_model_instance(user, __name__) access_token = AccessToken.objects.get(service=serv) flickr = flickrapi.FlickrAPI(access_token.api_token) photos = _get_service_items(user, model_instance, flickr, serv, access_token) items = [] if photos and photos['photos'].has_key('photo'): for photo in photos['photos']['photo']: # info about the pic pic = flickr.photos_getInfo(photo_id=photo['id'], format='json', nojsoncallback='1') pic_json = simplejson.loads(pic) item = ServiceItem() item.title = pic_json['photo']['title']['_content'] # use date from when the photo was uploaded to flickr NOT when it was taken item.created = datetime.fromtimestamp(float(pic_json['photo']['dates']['posted'])) #u'posted': u'1300054696' item.service = serv item.link_back = pic_json['photo']['urls']['url'][0]['_content'] item.tags = pic_json['photo']['tags']['tag'] item.favorite = pic_json['photo']['isfavorite'] item.url_thumb = "http://farm%s.static.flickr.com/%s/%s_%s_t.jpg" % \ (pic_json['photo']['farm'], pic_json['photo']['server'], pic_json['photo']['id'], pic_json['photo']['secret']) item.url_small = "http://farm%s.static.flickr.com/%s/%s_%s_m.jpg" % \ (pic_json['photo']['farm'], pic_json['photo']['server'], pic_json['photo']['id'], pic_json['photo']['secret']) item.body = "<br/><img src='" + item.url_thumb +"'/>" # add location item.user = user items.append(item) return items
def verify_auth(request): """Handle the redirect from foursquare as part of the oauth process.""" service = get_model_instance(request.user, MODULE_NAME) request_token = RequestToken.objects.get(service=service) request_token.oauth_verify = request.GET.get('oauth_verifier') request_token.save() generate_access_token(service, request_token) service.setup = True service.public = True service.save() request_token.delete() return redirect(settings_redirect(request))
def auth(request): """We dont need a full oauth setup just a username. """ # http://flickr.com/services/auth/?api_key=[api_key]&perms=[perms]&api_sig=[api_sig] service = get_model_instance(request.user, PACKAGE_NAME) if service and request.method == "POST": username = request.POST["username"] if username: # Talk to flickr to get a flickr ID 1234567@N0 style url = ( "http://api.flickr.com/services/rest/?method=flickr.people.findByUsername&api_key=%s&username=%s&format=json&nojsoncallback=1" % (service.app.auth_settings["api_key"], username) ) http_requester = httplib2.Http() resp, content = http_requester.request(url, "GET") if resp["status"] == "200": json = simplejson.loads(content) # Parse the request and check we have got back flickr id if json["stat"] == "ok": userid = json["user"]["id"] if not service.auth: auth_handler = Auth() else: auth_handler = service.auth auth_handler.username = username auth_handler.secret = userid auth_handler.save() if not service.auth: service.auth = auth_handler service.setup = True service.public = True service.save() else: messages.error( request, "Unable to validate your username with Flickr, please check your username and retry." ) else: messages.error(request, "Please enter a Flickr username") return redirect(settings_redirect(request))
def get_items(user, since, model_instance=None): """Fetch main stats for history page.""" serv = model_instance or get_model_instance(user, __name__) access_token = AccessToken.objects.get(service=serv) try: query = FQL(access_token.oauth_token) uid_result = query(USER_ID) if uid_result: uid = uid_result[0]['uid'] week_ago_epoch = time.mktime(since.timetuple()) status_stream = _fetch_feed(serv, access_token, STATUS_FQL % int(week_ago_epoch)) except Exception, exception: raise LoggedServiceError(original_exception=exception)
def get_artists(user, since, model_instance=None): """Get a users top artists.""" serv = model_instance or get_model_instance(user, __name__) access_token = AccessToken.objects.get(service=serv) fav_artists = None if access_token: fav_artists = get_data( serv, 'http://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=%s&api_key=%s&period=7day&format=json' \ % (access_token.username, access_token.api_token,), disable_oauth=True ) return _convert_top_artists_json(user, serv, fav_artists)
def auth(request): """We dont need a full oauth setup just a username.""" service = get_model_instance(request.user, MODULE_NAME) if service and request.method == 'POST': username = request.POST['username'] if username: # talk to flickr to get a flickr ID 1234567@N0 style url = "http://api.flickr.com/services/rest/?method=flickr.people.findByUsername&api_key=%s&username=%s&format=json&nojsoncallback=1" % \ (service.app.oauth.consumer_key, username) http_requester = httplib2.Http() resp, content = http_requester.request(url, "GET") if resp['status'] == '200': json = simplejson.loads(content) # parse the request and check we have got back flickr id if json['stat'] == 'ok': userid = json['user']['id'] # Delete existing token AccessToken.objects.filter(service=service).delete() # Before creating a new one AccessToken.objects.create( service=service, username=username, userid=userid, created=datetime.now(), api_token=service.app.oauth.consumer_key ) service.setup = True service.public = True service.save() else: messages.error(request, 'Unable to validate your username with Flickr, please check your username and retry.') else: messages.error(request, 'Please enter a Flickr username') return redirect(settings_redirect(request))
def auth(request): """Setup oauth details for the return call from foursquare. """ request.session['causal_foursquare_oauth_return_url'] = \ request.GET.get('HTTP_REFERER', None) service = get_model_instance(request.user, PACKAGE) if not service.auth: auth_handler = OAuth() auth_handler.save() service.auth = auth_handler service.save() url = "https://foursquare.com/oauth2/authenticate?client_id=%s&response_type=code&redirect_uri=%s" % (service.app.auth_settings['consumer_key'], service.app.auth_settings['return_url']) return redirect(url)
def auth(request): """We dont need a full oauth setup just a username. """ service = get_model_instance(request.user, PACKAGE_NAME) if service and request.method == 'POST': username = request.POST['username'] if username: # Fetch the page and try to find the reader id url = "http://www.google.com/reader/shared/%s" % (username,) links = SoupStrainer('link') h = httplib2.Http() resp, content = h.request(url, "GET") parsed_links = [tag for tag in soup(str(content), parseOnlyThese=links)] if parsed_links: try: user_id = parsed_links[2].attrs[2][1].split('%2F')[1] if not service.auth: auth_handler = Auth() else: auth_handler = service.auth auth_handler.username = username auth_handler.secret = user_id auth_handler.save() if not service.auth: service.auth = auth_handler service.setup = True service.public = True service.save() except: messages.error( request, 'Unable to find Google Reader account with username "%s"' % (username,) ) else: messages.error( request, 'Unable to find Google Reader account with username "%s"' % (username,) ) else: messages.error(request, "Please enter a Google Reader username") return redirect(settings_redirect(request))
def auth(request): """We dont need a full oauth setup just a username. """ service = get_model_instance(request.user, PACKAGE_NAME) if service and request.method == 'POST': username = request.POST['username'] if username: user_feed = get_url('http://ws.audioscrobbler.com/2.0/?method=user.getinfo&user=%s&api_key=%s&format=json' % ( username, service.app.auth_settings['api_key'])) #user_feed = get_data( #service, #'http://ws.audioscrobbler.com/2.0/?method=user.getinfo&user=%s&api_key=%s&format=json' % ( #username, #service.app.auth_settings['api_key'] #), #disable_oauth=True #) # check we have a valid username if user_feed.has_key('error'): messages.error( request, 'Unable to validate your username "%s" with Last.fm, please check your username and retry.' % ( username, ) ) return redirect(settings_redirect(request)) if not service.auth: auth_handler = Auth() else: auth_handler = service.auth auth_handler.username = username auth_handler.save() if not service.auth: service.auth = auth_handler service.setup = True service.public = True service.save() else: messages.error(request, 'Please enter a Last.fm username') return redirect(settings_redirect(request))
def auth(request): """We dont need a full oauth setup just a username. """ service = get_model_instance(request.user, PACKAGE) if not service.auth: auth = OAuth() auth.save() service.auth = auth service.save() current_site = Site.objects.get(id=settings.SITE_ID) callback = reverse('causal-github-callback') callback = "http://%s%s" % (current_site.domain, callback,) return redirect('https://github.com/login/oauth/authorize?client_id=%s&redirect_uri=%s' %( service.app.auth_settings['api_key'], callback ))
def auth(request): """First leg of the two stage auth process. We setup and take note""" request.session['causal_facebook_oauth_return_url'] = \ request.GET.get('HTTP_REFERER', None) service = get_model_instance(request.user, MODULE_NAME) if not service: app = ServiceApp.objects.get(module_name=MODULE_NAME) service = UserService(user=request.user, app=app) service.save() callback = "%s%s" % (service.app.oauth.callback_url_base, reverse('causal-facebook-callback'),) return redirect("%s&redirect_uri=%s&scope=%s&client_id=%s" % ( service.app.oauth.request_token_url, callback, 'read_stream,offline_access,user_photos,user_photo_video_tags,user_checkins', service.app.oauth.consumer_key ) )
def auth(request): """We dont need a full oauth setup just a username.""" service = get_model_instance(request.user, MODULE_NAME) if service and request.method == 'POST': username = request.POST['username'] # Delete existing token AccessToken.objects.filter(service=service).delete() # Before creating a new one AccessToken.objects.create( service=service, username=username, created=datetime.now(), api_token=service.app.oauth.consumer_key ) service.setup = True service.public = True service.save() return redirect(settings_redirect(request))
def auth(request): """We dont need a full oauth setup just a username. """ service = get_model_instance(request.user, PACKAGE) if service and request.method == 'POST': username = request.POST['username'] if username: user_feed = get_data( service, 'https://api.github.com/users/%s' % (username), disable_oauth=True ) if user_feed.has_key('message') and user_feed['message'] == "Not Found": messages.error(request, 'Unable to validate your username with github, please check your username and retry.') return redirect(settings_redirect(request)) if not service.auth: auth_handler = Auth() else: auth_handler = service.auth auth_handler.username = username auth_handler.save() if not service.auth: service.auth = auth_handler service.setup = True service.public = True service.save() else: messages.error(request, 'Please enter a github username') return redirect(settings_redirect(request))
def auth(request): """We dont need a full oauth setup just a username.""" service = get_model_instance(request.user, MODULE_NAME) if service and request.method == 'POST': username = request.POST['username'] if username: # fetch the page and try to find the reader id url = "http://www.google.com/reader/shared/%s" % username links = SoupStrainer('link') h = httplib2.Http() resp, content = h.request(url, "GET") parsed_links = [tag for tag in soup(str(content), parseOnlyThese=links)] if parsed_links: try: userid = parsed_links[2].attrs[2][1].split('%2F')[1] # Delete existing token AccessToken.objects.filter(service=service).delete() # Before creating a new one AccessToken.objects.create( service=service, username=username, userid=userid, created=datetime.now(), api_token=service.app.oauth.consumer_key ) service.setup = True service.public = True service.save() except: messages.error(request, "Unable to find Google Reader account with that username") else: messages.error(request, "Unable to find Google Reader account with that username") else: messages.error(request, "Please enter a Google Reader username") return redirect(settings_redirect(request))
def get_items(user, since, model_instance=None): """Fetch and filter the updates from Last.fm.""" serv = model_instance or get_model_instance(user, __name__) access_token = AccessToken.objects.get(service=serv) tracks_listing = None if access_token: try: t = datetime.now() tracks_listing = get_data( serv, 'http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=%s&api_key=%s&format=json&from=%s&to=%s&limit=%s' \ % (access_token.username, access_token.api_token, str(int(mktime(since.timetuple()))), str(int(mktime(t.timetuple()))), MAX_RESULTS), disable_oauth=True ) except Exception, exception: raise LoggedServiceError(original_exception = exception)