Beispiel #1
0
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)
Beispiel #2
0
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))
Beispiel #3
0
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))
Beispiel #4
0
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))
Beispiel #5
0
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))
Beispiel #6
0
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)
Beispiel #7
0
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))
Beispiel #8
0
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']
        )
    )
Beispiel #9
0
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)
Beispiel #10
0
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)
Beispiel #11
0
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)
Beispiel #12
0
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)
Beispiel #13
0
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)
Beispiel #14
0
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)
Beispiel #15
0
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)
Beispiel #16
0
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
Beispiel #17
0
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))
Beispiel #18
0
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))
Beispiel #19
0
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)
Beispiel #20
0
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)
Beispiel #21
0
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))
Beispiel #22
0
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)
Beispiel #23
0
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))
Beispiel #24
0
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))
Beispiel #25
0
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
    ))
Beispiel #26
0
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
        )
    )
Beispiel #27
0
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))
Beispiel #28
0
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))
Beispiel #29
0
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))
Beispiel #30
0
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)