Example #1
0
    def get(self, context, filter):

        min_perms = self.min_perms

        if self.request.get('perms') == 'write':
            min_perms = 'write'

        if not self.check_logged_in(min_perms):
            self.do_flickr_auth(min_perms)
            return

        # this is who I am ...

        if not context and self.request.get('user'):
            context = 'user'
            filter = self.request.get('user')

        self.assign('context', context)

        # Default, choose a user

        if not context:
            self.display('chooser.html')
            return

        # ok, what are we trying to do...

        other_user = None
        other_username = None

        if context == 'user':

            other_username = filter

        elif context == 'photo':

            # magic referer glue, mostly for the Brooklyn Museum

            headers = self.request.headers

            if headers.has_key('Referer'):

                u = urlparse.urlparse(headers['Referer'])

                m = re.match(r'(?:www\.)?flickr\.com', u[1])

                if not m:
                    self.error(404)
                    return

                m = re.match(r'/photos/(?:[^/]+)/(\d+)', u[2])

                if m:
                    filter = m.groups()[0]
                else:
                    self.error(404)
                    return

            # end of magic glue

            method = 'flickr.photos.getInfo'

            args = {
                'photo_id': filter,
                'auth_token': self.user.token,
            }

            ttl = 60 * 60

            rsp = self.proxy_api_call(method, args, ttl)

            if not rsp or not rsp.has_key('photo'):
                self.assign('error', 'no_photo')
            elif rsp['photo'].has_key('location'):
                self.assign('error', 'already_geotagged')
            else:

                # this is kind of dumb in the end...

                spr = {
                    'id': rsp['photo']['id'],
                    'owner': rsp['photo']['owner']['nsid'],
                    'secret': rsp['photo']['secret'],
                    'server': rsp['photo']['server'],
                    'farm': rsp['photo']['farm'],
                    'title': rsp['photo']['title']['_content'],
                    'tags': '',
                    'datetaken': rsp['photo']['dates']['taken'],
                    'ownername': rsp['photo']['owner']['username'],
                }

                if rsp['photo'].has_key('tags'):
                    tags = map(lambda t: t['_content'],
                               rsp['photo']['tags']['tag'])
                    spr['tags'] = ' '.join(tags)

                json = simplejson.dumps({'photo': [spr]})
                self.assign("photo_json", json)

                other_username = rsp['photo']['owner']['username']

                self.assign("usernsid", rsp['photo']['owner']['nsid'])

        elif context == 'random':
            noidea_crumb = self.generate_crumb(self.user, 'method=noidea')
            self.assign('noidea_crumb', noidea_crumb)
        else:
            self.assign('error', 'unknown_context')

        # do some sanity checking on the user

        self.assign("username", other_username)

        if other_username:
            other_user = User.get_user_by_username(other_username)

            if other_user:

                if Blocked.is_user_blocked(self.user.nsid, other_user.nsid):
                    self.assign('blocked', 1)

                elif Membership.has_user_opted_out(other_user.nsid):
                    self.assign('optedout', 1)

                else:

                    pass

                self.assign("other_user", other_user)

                #

        # crumbs

        crumb = self.generate_crumb(self.user, 'method=suggest')
        self.assign('suggest_crumb', crumb)

        # go!

        self.display('chooser.html')
        return
Example #2
0
  def get (self, context, filter) :

    min_perms = self.min_perms

    if self.request.get('perms') == 'write' :
      min_perms = 'write'
  
    if not self.check_logged_in(min_perms) :
      self.do_flickr_auth(min_perms)
      return

    # this is who I am ...

    if not context and self.request.get('user') :
      context = 'user'
      filter = self.request.get('user')
      
    self.assign('context', context)
    
    # Default, choose a user
    
    if not context :
      self.display('chooser.html')
      return

    # ok, what are we trying to do...

    other_user = None
    other_username = None
      
    if context == 'user' :

      other_username = filter
  
    elif context == 'photo' :

      # magic referer glue, mostly for the Brooklyn Museum
      
      headers = self.request.headers

      if headers.has_key('Referer') :
        
        u = urlparse.urlparse(headers['Referer'])

        m = re.match(r'(?:www\.)?flickr\.com', u[1])
        
        if not m :
          self.error(404)
          return

        m = re.match(r'/photos/(?:[^/]+)/(\d+)', u[2])
        
        if m :
          filter = m.groups()[0]
        else :
          self.error(404)          
          return
      
      # end of magic glue
      
      method = 'flickr.photos.getInfo'

      args = {
        'photo_id' : filter,
        'auth_token' : self.user.token,
        }

      ttl = 60 * 60
      
      rsp = self.proxy_api_call(method, args, ttl)
      
      if not rsp or not rsp.has_key('photo') :
        self.assign('error', 'no_photo')
      elif rsp['photo'].has_key('location') :
        self.assign('error', 'already_geotagged')
      else :
        
        # this is kind of dumb in the end...
        
        spr = {
          'id': rsp['photo']['id'],
          'owner' : rsp['photo']['owner']['nsid'],
          'secret' : rsp['photo']['secret'],
          'server' : rsp['photo']['server'],
          'farm' : rsp['photo']['farm'],
          'title' : rsp['photo']['title']['_content'],
          'tags' : '',
          'datetaken' : rsp['photo']['dates']['taken'],
          'ownername' : rsp['photo']['owner']['username'],
          }

        if rsp['photo'].has_key('tags') :
          tags = map( lambda t: t['_content'], rsp['photo']['tags']['tag'])
          spr['tags'] = ' '.join(tags)
        
        json = simplejson.dumps({ 'photo' : [spr] })
        self.assign("photo_json", json)
          
        other_username = rsp['photo']['owner']['username']

        self.assign("usernsid", rsp['photo']['owner']['nsid'])
        
    elif context == 'random' :
      noidea_crumb = self.generate_crumb(self.user, 'method=noidea')
      self.assign('noidea_crumb', noidea_crumb);
    else :
      self.assign('error', 'unknown_context')

    # do some sanity checking on the user

    self.assign("username", other_username)
    
    if other_username :
      other_user = User.get_user_by_username(other_username)
      
      if other_user :
      
        if Blocked.is_user_blocked(self.user.nsid, other_user.nsid) :
          self.assign('blocked', 1)
          
        elif Membership.has_user_opted_out(other_user.nsid) :
          self.assign('optedout', 1)

        else :

          pass
        
        self.assign("other_user", other_user)
        
        #
        
    # crumbs
      
    crumb = self.generate_crumb(self.user, 'method=suggest')
    self.assign('suggest_crumb', crumb)

    # go!
    
    self.display('chooser.html')
    return